8

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

我在 Service Fabric 尝试将太多服务太快地放置到单个节点上时遇到问题。

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

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

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

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

第二:主机重新上线后启动的服务过多,单个节点不堪重负

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

       "Name": "PlacementAndLoadBalancing",
       “参数”: [
         {
           "Name": "UseMoveCostReports",
           “值”:“真”
         },
         {
           "名称": "PLBRefreshGap",
           “价值”:“1”
         },
         {
           "Name": "MinPlacementInterval",
           “价值”:“30.0”
         },
         {
           "名称": "MinLoadBalancingInterval",
           “价值”:“30.0”
         },
         {
           "名称": "MinConstraintCheckInterval",
           “价值”:“30.0”
         },
         {
           "Name": "GlobalMovementThrottleThresholdForPlacement",
           “价值”:“25”
         },
         {
           "Name": "GlobalMovementThrottleThresholdForBalance",
           “价值”:“25”
         },
         {
           "Name": "GlobalMovementThrottleThreshold",
           “价值”:“25”
         },
         {
           "Name": "GlobalMovementThrottleCountingInterval",
           “价值”:“450”
         },
         {
           "Name": "InBuildThrottlingEnabled",
           “值”:“假”
         },
         {
           "Name": "InBuildThrottlingGlobalMaxValue",
           “价值”:“100”
         }
       ]
     },

根据下面答案中的讨论,想要留下一个图形图像:如果一个节点出现故障,将服务改组到其余节点的行为将导致第二个节点出现故障,如此处所述。绿色节点关闭,然后紫色节点由于过多的资源被洗牌而关闭。

一张图说明了上述情况。 绿色下降,然后是紫色

4

1 回答 1

3

从 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"
 },

为了使内置油门起作用,这需要翻转为 true:

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

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

前两个设置也在 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 个应用程序实例是否确实有效以及这是否是适当的阈值也可能会很好。

于 2020-06-26T22:25:54.093 回答