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

时间:2019-03-06 11:27:18

标签: azure-service-fabric service-fabric-on-premises

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

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

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

不幸的是,直到删除节点,我才能在此集群上进行任何配置升级-这是由于Start-ServiceFabricClusterConfigurationUpgrade powershell命令报告的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,有人曾经用来删除集群中的节点...但是在我的情况下,节点仍列在清单文件中...不过,单词 hack production 永远都不会相遇!

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

1 个答案:

答案 0 :(得分:0)

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

我进行了相当多的测试,以确保可以放心地从群集中添加/删除多个节点。我还删除了足够多的节点,以将“种子”节点从9个减少到6个。

因此,要解决上述问题,这是删除节点所要做的:

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

注意:最初我只是尝试执行上面2-5的操作-但是它没有用,并且节点仍然处于错误状态。

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

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

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

最后一点:如果您重新添加先前已删除的节点,则该节点可能会恢复为“停用”状态。只需激活该节点,一切都将正常。