【问题标题】:Service Fabric Deactivate (pause) vs Deactivate (restart)?Service Fabric 停用(暂停)与停用(重新启动)?
【发布时间】:2016-03-22 09:26:23
【问题描述】:

当我登录到 Service Fabric Explorer 并尝试禁用节点以进行操作系统升级时,我看到了两个选项:

  • 停用(暂停)
  • 停用(重新启动)

谁能告诉我区别?

【问题讨论】:

    标签: azure azure-service-fabric


    【解决方案1】:

    Service Fabric 具有可让您管理节点的 API(在 C# 中这些是 DeactivateNodeAsync 和 ActivateNodeAsync,在 PS 中它们是 Enable/Disable-ServiceFabricNode)。首先,其中大部分是人们管理自己的集群时的保留,与运行自己的集群时相比,在 Azure 托管的 Service Fabric 集群环境中应该较少常用。无论哪种方式,在停用节点时都有几个不同的选项,我们称之为 Intents

    您可以将这些视为节点上越来越严格的操作,您将在不同情况下使用这些操作,并使用它们将正在对节点执行的操作传达给 Service Fabric。

    四个不同的选项是:

    1. 暂停 - 有效地“暂停”节点:节点上的服务将继续运行,但除非服务自行失败或将服务移至节点,否则任何服务都不应移入或移出节点是防止中断或不一致所必需的。
    2. 重新启动 - 这会将所有内存中的有状态和无状态服务移出节点,然后关闭(关闭)任何持久性服务(如果这样做是安全的,否则我们将构建备件)。
    3. RemoveData - 这将关闭节点上的所有服务,如果安全需要,再次构建备件。用户负责确保如果节点确实返回,则返回为空。
    4. RemoveNode - 这将关闭节点上的所有服务,如果安全需要,再次构建备件。在这种情况下,尽管您明确告诉 SF 该节点不会回来。 SF 执行附加检查以确保要删除的节点不是 SeedNode(当前负责维护底层集群的节点之一)。除此之外,这与 RemoveData 相同。

    现在让我们谈谈你什么时候使用它们。 暂停是最常见的,如果您想调试给定的服务、进程、机器等,并且希望在您查看它时(尽可能地)不对其进行更改。如果您去诊断服务的某些行为只是为了确定我们刚刚将其转移到您身上,那会有点尴尬。 重新启动(这是我们看到的最常用的方法)在出于某种原因想要将所有工作负载移出节点时使用。例如,Service Fabric 在升级节点上的 Service Fabric 位时会使用它本身 - 首先我们通过意图重启来停用节点,然后我们等待它完成(因此我们知道您的服务没有运行),然后再关闭和升级我们自己在那个节点上的代码。 RemoveData 是您知道节点正在被取消配置并且不会返回的位置(例如硬盘驱动器将被换出,或者硬件将被完全移除),或者您知道如果节点回来了,它特别是空的(比如你正在重新映像机器)。 Restart 和 RemoveData 之间的区别在于,对于重新启动,我们知道节点正在返回,因此我们保留了该节点上副本的知识。对于持久副本,这意味着我们不必立即再次构建副本。但是对于 RemoveData,我们知道副本不会回来,因此需要在确认节点可以安全重启之前立即构建任何备用。 RemoveNode 建立在 RemoveData 之上,是一个额外的指标,表明您没有具体计划恢复此节点。由于保持 SeedNode 正常运行很重要,如果要删除的节点当前是 Seed,SF 将调用失败。如果您真的想删除该特定节点,您可以重新配置集群以使用不同的节点作为种子。当您想要使用 RemoveData 与 RemoveNode 时的一个示例是,如果您要缩小集群,您将明确调用 RemoveNode,因为您打算不让节点返回并希望确保您重新带走正确的集群,这样底层集群就不会崩溃。

    一旦操作(无论是什么)完成并且您想重新启用节点,相应的调用是激活/启用。重新启动节点不会导致它自动重新启用。因此,如果您完成了软件补丁(或任何导致您使用 Intent Restart 的原因),并且您希望服务再次放置在节点上,您将使用适当的节点名称调用 Enable/Activate。

    作为停用/禁用调用的示例,请查看 PS API 文档here

    【讨论】:

    • 好吧,所以说我有内存泄漏并且在修复内存快满之前 - 我可以使用哪一个来重新启动服务?我刚刚尝试了重新启动,但由于内存仍然很高,它并没有杀死并重新启动服务。正如您所说,我害怕执行“RemoveData”“节点正在被取消配置并且不会不会回来” - 我希望它回来,我只需要它来重新启动服务以便它们免费-增加内存。
    • 这些都不适合。创建一个单独的问题,列出您的方案 - 问题是什么以及您要做什么。
    • 您有关于这些状态如何收费的任何信息吗?
    • 添加了一个指向 API 示例的链接。它存在于 SF 支持的每个 API 模型中(HTTP、C#、Java、PS、sfctl)
    • 如果我只想重新启动应用程序怎么办?我遇到了运行该应用程序的帐户的权限已更改的情况。它已被添加到一个新组中。我过去在其他 Windows 服务上看到过,我们需要重新启动服务才能获得新的权限。我认为服务结构也需要这样做。我必须重新启动整个节点还是有办法只重新启动特定的应用程序?
    猜你喜欢
    • 2014-02-15
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 2020-04-26
    • 2012-01-22
    • 1970-01-01
    • 2014-02-08
    • 2017-01-05
    相关资源
    最近更新 更多