13

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

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

谁能告诉我区别?

4

1 回答 1

34

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 位时会使用它本身 - 首先我们通过意图重启来停用节点,然后我们等待它完成(因此我们知道您的服务没有运行),然后我们关闭并升级我们自己在那个节点上的代码。删除数据是您知道节点正在被取消配置并且不会再回来的地方(例如硬盘驱动器将被换出,或者硬件将被完全移除),或者您知道如果节点要回来,它会专门为空(假设您正在重新映像机器)。Restart 和 RemoveData 之间的区别在于,对于重新启动,我们知道节点正在返回,因此我们保留了该节点上副本的知识。对于持久副本,这意味着我们不必立即再次构建副本。但是对于 RemoveData,我们知道副本不会回来,因此需要在确认节点可以安全重启之前立即构建任何备用。移除节点建立在 RemoveData 之上,并且是一个额外的指标,表明您没有具体计划恢复此节点。由于保持 SeedNode 正常运行很重要,如果要删除的节点当前是 Seed,SF 将调用失败。如果您真的想删除该特定节点,您可以重新配置集群以使用不同的节点作为种子。当您想要使用 RemoveData 与 RemoveNode 时的一个示例是,如果您要缩小集群,您将明确调用 RemoveNode,因为您打算不让节点返回并希望确保您重新带走正确的集群,这样底层集群就不会崩溃。

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

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

于 2015-12-16T20:31:55.183 回答