Service Fabric 停用(暂停)与停用(重启)?

Service Fabric Deactivate (pause) vs Deactivate (restart)?

当我登录到 Service Fabric Explorer 并尝试为 OS 升级禁用节点时,我看到两个选项:

谁能告诉我区别?

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

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

四个不同的选项是:

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

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

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

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