应在具有大量来宾可执行应用程序的集群的 Service Fabric 放置/负载平衡配置中设置哪些阈值?

What thresholds should be set in Service Fabric Placement / Load balancing config for Cluster with large number of guest executable applications?

对于具有大量来宾可执行应用程序的群集,应在 Service Fabric 放置/负载平衡配置中设置什么阈值?

我在使用 Service Fabric 时遇到问题,它试图将太多服务过快地放置到单个节点上。

举个集群大小的例子,有 2-4 个工作节点类型,每个节点类型有 3-6 个工作节点,每个节点类型可以 运行 200 个来宾可执行应用程序,每个应用程序将至少有 2 个副本。节点有能力 运行 宁服务而 运行宁,这只是启动时间 CPU 太高了。

问题似乎是集群配置中设置的放置和负载平衡规则的阈值或默认值。作为我尝试过的示例:我已打开 InBuildThrottlingEnabled 并将 InBuildThrottlingGlobalMaxValue 设置为 100,我已将 Global Movement Throttle 设置设置为应用程序总数的不同百分比。

在这一点上,我试图解决两种截然不同的情况。在这两种情况下,节点都会在一段时间内达到 100%,以便服务结构将节点声明为关闭。

第 1 步:从所有节点关闭开始整个集群,而不会压倒节点。

第二:单个节点被主机恢复在线后启动的过多服务所淹没

这是我在集群上的当前参数:

       "Name": "PlacementAndLoadBalancing",
       "Parameters": [
         {
           "Name": "UseMoveCostReports",
           "Value": "true"
         },
         {
           "Name": "PLBRefreshGap",
           "Value": "1"
         },
         {
           "Name": "MinPlacementInterval",
           "Value": "30.0"
         },
         {
           "Name": "MinLoadBalancingInterval",
           "Value": "30.0"
         },
         {
           "Name": "MinConstraintCheckInterval",
           "Value": "30.0"
         },
         {
           "Name": "GlobalMovementThrottleThresholdForPlacement",
           "Value": "25"
         },
         {
           "Name": "GlobalMovementThrottleThresholdForBalancing",
           "Value": "25"
         },
         {
           "Name": "GlobalMovementThrottleThreshold",
           "Value": "25"
         },
         {
           "Name": "GlobalMovementThrottleCountingInterval",
           "Value": "450"
         },
         {
           "Name": "InBuildThrottlingEnabled",
           "Value": "false"
         },
         {
           "Name": "InBuildThrottlingGlobalMaxValue",
           "Value": "100"
         }
       ]
     },

基于,想留下一个图形图像:如果一个节点出现故障,将服务改组到其余节点的行为将导致第二个节点出现故障,如此处所述。绿色节点关闭,然后紫色节点关闭,因为有太多资源被洗牌到它上面。

在SF看来,1&2是同一个问题。另外请注意,SF 不会仅仅因为 CPU 消耗高就驱逐节点。因此:“节点在一段时间内达到 100%,以便服务结构将节点声明为关闭。”需要更多解释。这些机器可能由于其他原因而发生故障,或者我猜可能负载太大以至于内核级故障检测器无法 ping 通其他机器,但这并不常见。

对于配置更改:我会删除所有这些以使用默认设置

 {
   "Name": "PLBRefreshGap",
   "Value": "1"
 },
 {
   "Name": "MinPlacementInterval",
   "Value": "30.0"
 },
 {
   "Name": "MinLoadBalancingInterval",
   "Value": "30.0"
 },
 {
   "Name": "MinConstraintCheckInterval",
   "Value": "30.0"
 },

要使内置节流阀起作用,需要将其翻转为真:

     {
       "Name": "InBuildThrottlingEnabled",
       "Value": "false"
     },

此外,由于这些可能是约束违规和放置(不是主动重新平衡),我们需要明确指示 SF 也限制这些操作。在 SF 中有这方面的配置,虽然目前没有记录或公开支持,但您可以 see it in the settings。默认情况下,只有平衡受到限制,但您应该能够为所有阶段打开限制并通过类似下面的内容设置适当的限制。

前两个设置也在 PlacementAndLoadBalancing 中,就像上面的设置一样。

 {
   "Name": "ThrottlePlacementPhase",
   "Value": "true"
 },
 {
   "Name": "ThrottleConstraintCheckPhase",
   "Value": "true"
 },

这些设置限制的下一个设置在它们自己的部分中,并且是不同节点类型名称与您要针对该节点类型限制的限制的映射。

{
"name": "MaximumInBuildReplicasPerNodeConstraintCheckThrottle",
"parameters": [
  {
      "name": "YourNodeTypeNameHere",
      "value": "100"
  },
  {
      "name": "YourOtherNodeTypeNameHere",
      "value": "100"
  }
]
},
{
"name": "MaximumInBuildReplicasPerNodePlacementThrottle",
"parameters": [
  {
      "name": "YourNodeTypeNameHere",
      "value": "100"
  },
  {
      "name": "YourOtherNodeTypeNameHere",
      "value": "100"
  }
]
},
{
"name": "MaximumInBuildReplicasPerNodeBalancingThrottle",
"parameters": [
  {
      "name": "YourNodeTypeNameHere",
      "value": "100"
  },
  {
      "name": "YourOtherNodeTypeNameHere",
      "value": "100"
  }
]
},
{
"name": "MaximumInBuildReplicasPerNode",
"parameters": [
  {
      "name": "YourNodeTypeNameHere",
      "value": "100"
  },
  {
      "name": "YourOtherNodeTypeNameHere",
      "value": "100"
  }
]
}

我会进行这些更改,然后重试。其他信息,如实际导致节点关闭的原因(通过事件和 SF 健康信息确认)将有助于确定问题的根源。验证在节点上启动 100 个应用程序实例是否确实有效以及这是否是一个合适的阈值可能也很好。