Service Fabric - 无法进行Config升级以添加或删除节点

问题描述 投票:1回答:1

我有一个内部服务Fabric,由18个节点组成(9个是种子节点) - 通过gMSA windows安全保护。群集代码版本6.4.622.9590

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

根据MSDOCs,通过配置升级执行节点的添加/删除。注意:我最近已经使用这个过程添加了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,我怀疑内部计算的可靠性水平将下降(可能从金到银)。

我也遇到了一个曾经有人用来删除集群中节点的hack ...但在我的场景中,节点仍然列在清单文件中......尽管如此,黑客和生产这些词永远不会满足!

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

azure-service-fabric service-fabric-on-premises
1个回答
0
投票

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

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

因此,要解决上述问题,我需要做的就是删除节点:

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

注意:最初我尝试只做2-5以上 - 但它没有工作,节点仍处于错误状态。

也就是说,根据我的经验,请在删除节点时注意以下内容(此信息在MSDOC中不明确:

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

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

最后要注意的是:如果重新添加先前已删除的节点,它可能会以“已停用”状态返回。只需激活此节点,一切都应该没问题。

© www.soinside.com 2019 - 2024. All rights reserved.