1

我有一个由 18 个节点(9 个是种子节点)组成的本地 Service Fabric - 通过 gMSA Windows 安全性进行保护。集群代码版本 6.4.622.9590

不幸的是,我必须重建其中的 6 个节点(3 个种子节点)。他们都住在一个数据中心(集群跨越 3 个数据中心)。因此,我希望删除这 6 个节点,重建它们,然后重新添加它们。

根据MSDOC,添加/删除节点是通过配置升级执行的。注意:我最近已经使用这个过程来添加 12 个节点,所以很好地理解 SF 配置升级的概念。

不幸的是,在删除节点之前,我无法在此集群上进行任何配置升级 - 这是由于Start-ServiceFabricClusterConfigurationUpgradepowershell 命令报告的 ValidationExceptions:

  • 如果我不将 6 个节点添加到“NodesToBeRemoved”部分,我会收到验证错误,即并非所有已删除的节点都在此字段中
  • 如果我确实添加了 6 个节点,则会收到以下验证错误:
Start-ServiceFabricClusterConfigurationUpgrade : 
System.Runtime.InteropServices.COMException (-2147017627)
ValidationException: Model validation error. Removing a non-seed node and changing reliability level in the same
upgrade is not supported. Initiate an upgrade to remove node first and then change the reliability level.
At line:1 char:1
+ Start-ServiceFabricClusterConfigurationUpgrade -ClusterConfigPath "AL ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (Microsoft.Servi...usterConnection:ClusterConnection) [Start-ServiceFa
   ...gurationUpgrade], FabricException
    + FullyQualifiedErrorId : StartClusterConfigurationUpgradeErrorId,Microsoft.ServiceFabric.Powershell.StartClusterC
   onfigurationUpgrade

所以,我们被困住了!我也已经删除了节点状态,因此所有 6 个节点都处于“无效状态”。Get-ServiceFabricClusterConfiguration不返回这 6 个节点,但它们仍显示在 SF Explorer 中并列在集群清单 XML 文件中。

就可靠性水平而言——我很确定在 SF 中无法再改变这一点;即旧版本的 SF 允许您在配置文件中配置青铜/银/金,但在最近的版本中(+6.0??) - 这是一个计算字段,由 SF 内部管理。无论如何 - 因为种子节点将从 9 个减少到 6 个,我怀疑内部计算的可靠性水平会下降(大概从黄金到白银)。

我还遇到过有人用来删除集群中的节点的黑客行为......但在我的场景中,节点仍然列在清单文件中......尽管如此,黑客生产这两个词永远不应该相遇!

那么,如何让我们的生产集群摆脱这种情况呢?重建集群不是一种选择(这就是集群的全部原因......高可用性!)。

4

1 回答 1

2

我发现上述错误主要是缺乏明确记录的程序以及在进行服务结构配置升级时出现错误/误导性错误消息的症状。

我进行了大量自己的测试,以确保我可以自信地从集群中添加/删除多个节点。我还删除了足够的节点以将种子节点从 9 删除到 6。

因此,要解决上述问题,我必须执行以下操作来删除节点:

  1. 使用 SF 资源管理器删除节点状态 - 这将节点状态从错误更改为无效
  2. 通过 Get-ServiceFabricClusterConfiguration 获取最新的 json 配置
  3. 从节点部分中删除节点
  4. 完全删除 NodesToBeRemoved json 部分(即,如果要删除的节点列表为空,则会出现不一致的错误 - 所以只需删除包含 json 块
  5. 进行配置更新

注意:最初我尝试只执行上面的 2-5 - 但它不起作用,节点仍处于错误状态。

也就是说,根据我的经验,在删除节点时还请注意以下事项(此信息在MSDOC中不清楚:

  • 可以一次删除多个种子节点(我想这样做以尝试复制上述场景)
  • 您也可以一次添加多个节点 - 请注意,您可能不会通过 SF 配置升级状态工具看到任何活动/指示正在发生任何事情......准备等待至少 +15 分钟(取决于您有多少节点)重新添加...毕竟,SF 正在将安装文件复制到节点)
  • 有时,当移除一个或多个节点时,该节点不会被成功移除 - 而是处于错误状态。如果是这种情况,请使用 SF Explorer(或 powershell)删除节点状态。状态将更改为无效。此时,进行另一次配置升级,确保:
    • 删除的节点不在节点部分
    • 移除的节点不在 NodesToBeRemoved 列表中
    • 如上所述,如果 NodesToBeRemoved 的值为(或应该)为空,请删除整个 JSON 块,否则您将收到有关 NodesToBeRemoved 参数包含不一致信息的误导/模糊警告。

后一部分确实是上次让我绊倒的令人困惑的部分。还要记住的是,一旦成功删除节点,Get-ServiceFabricClusterConfiguration仍将在 NodesToBeRemoved 参数中返回已删除的节点。这可能会使您在任何后续尝试进行配置升级时感到困惑/绊倒。因此,我建议您在完全删除此部分的情况下再进行一次最终配置升级

最后一点:如果您重新添加之前已删除的节点,它可能会重新处于停用状态。只需激活此节点,一切都会好起来的。

于 2019-04-04T04:31:41.683 回答