Поделиться через


Регулирование посредством диспетчера кластерных ресурсов Service Fabric

Даже если диспетчер кластерных ресурсов настроен правильно, работа кластера может быть нарушена. Например, отказы нескольких узлов и доменов сбоя могут произойти во время установки новой версии или при применении обновлений. Диспетчер кластерных ресурсов всегда пытается устранить любые ошибки, используя кластерные ресурсы для реорганизации и исправления кластера. Регулирование обеспечивает ресурсы, чтобы кластер мог стабилизировать работу (вернуть узлы в работоспособное состояние, восстановить работоспособность сетевых разделов и развернуть исправленный код).

Чтобы помочь в подобных ситуациях, диспетчер кластерных ресурсов Service Fabric включает в себя несколько регулировок. Все это достаточно масштабные средства. Обычно они не должны изменяться без тщательного планирования и тестирования.

Если вы измените регулировки диспетчера кластерных ресурсов, то их необходимо будет настроить для ожидаемой фактической нагрузки. Возможно, вы решите настроить несколько регулировок, даже если это означает, что в некоторых ситуациях стабилизация кластера будет занимать больше времени. Тестирование требуется, чтобы определить правильные значения для регулировок. Величина регулирования должна быть достаточно большой, чтобы позволить кластеру реагировать на изменения в разумные сроки, и достаточно малой, чтобы избегать слишком большого потребления ресурсов.

Чаще всего клиенты используют регулировки при работе в среде с ограниченными ресурсами. Например, в них может быть ограничена пропускная способность сети для отдельных узлов или диски не могут параллельно создавать много реплик с отслеживанием состояния из-за ограничений пропускной способности. Без регулирования операции могут перегрузить эти ресурсы, что приведет к сбою или замедлению работы. В таких случаях клиенты использовали регулировки и знали, что они потенциально увеличивают период стабилизации работы кластера, и что регулирование может привести к понижению общей надежности.

Настройка регулирования

В Service Fabric есть два механизма регулирования числа перемещений реплик. Механизм по умолчанию, который существовал до выпуска Service Fabric 5.7, представляет регулирование как абсолютное число допустимых перемещений. Это подходит не для всех размеров кластеров. В частности, для больших кластеров значение по умолчанию может быть слишком мало, что значительно замедляет балансировку даже в том случае, когда она необходима, но такое значение не ухудшает работу небольших кластеров. Этот предыдущий механизм был заменен процентным регулированием, которое лучше масштабируется на динамических кластерах, в которых количество служб и узлов регулярно изменяется.

Эти регулировки основаны на проценте числа реплик в кластерах. Процентное регулирование позволяет, например, применить правило: "не перемещать более 10 % реплик в течение 10 минут".

Ниже приведены доступные параметры конфигурации процентного регулирования.

  • GlobalMovementThrottleThresholdPercentage — максимальное число перемещений в кластере в любое время, выраженное в проценте от общего числа реплик в кластере. Значение 0 означает, что ограничения отсутствуют. Значение по умолчанию — 0. Если указаны этот параметр и GlobalMovementThrottleThreshold, то используется более умеренное ограничение.
  • GlobalMovementThrottleThresholdPercentageForPlacement — максимальное число перемещений на этапе размещения, выраженное в проценте от общего числа реплик в кластере. Значение 0 означает, что ограничения отсутствуют. Значение по умолчанию — 0. Если указаны этот параметр и GlobalMovementThrottleThresholdForPlacement, то используется более умеренное ограничение.
  • GlobalMovementThrottleThresholdPercentageForBalancing — максимальное число перемещений на этапе балансировки, выраженное в проценте от общего числа реплик в кластере. Значение 0 означает, что ограничения отсутствуют. Значение по умолчанию — 0. Если указаны этот параметр и GlobalMovementThrottleThresholdForBalancing, то используется более умеренное ограничение.

При указании процента регулирования 5 % указывается как 0,05. Интервал для этих регулировок определяет параметр GlobalMovementThrottleCountingInterval, который указывается в секундах.

<Section Name="PlacementAndLoadBalancing">
     <Parameter Name="GlobalMovementThrottleThresholdPercentage" Value="0" />
     <Parameter Name="GlobalMovementThrottleThresholdPercentageForPlacement" Value="0" />
     <Parameter Name="GlobalMovementThrottleThresholdPercentageForBalancing" Value="0" />
     <Parameter Name="GlobalMovementThrottleCountingInterval" Value="600" />
</Section>

Для автономных развертываний используется ClusterConfig.json, а для размещенных в Azure кластеров — Template.json.

"fabricSettings": [
  {
    "name": "PlacementAndLoadBalancing",
    "parameters": [
      {
          "name": "GlobalMovementThrottleThresholdPercentage",
          "value": "0.0"
      },
      {
          "name": "GlobalMovementThrottleThresholdPercentageForPlacement",
          "value": "0.0"
      },
      {
          "name": "GlobalMovementThrottleThresholdPercentageForBalancing",
          "value": "0.0"
      },
      {
          "name": "GlobalMovementThrottleCountingInterval",
          "value": "600"
      }
    ]
  }
]

Регулирование на основе количества по умолчанию

Эти сведения предоставляются на случай, если у вас имеются устаревшие кластеры или в обновленных кластерах по-прежнему используются такие конфигурации. Как правило, рекомендуется заменить их конфигурациями с процентным регулированием. Так как процентное регулирование отключено по умолчанию, этот механизм регулирования используется по умолчанию для кластера, пока он не будет отключен и заменен процентным регулированием.

  • GlobalMovementThrottleThreshold. Данный параметр управляет общим количеством перемещений в кластере за некоторое время. Это время указывается в секундах в параметре GlobalMovementThrottleCountingInterval. Значение по умолчанию GlobalMovementThrottleThreshold равно 1000, а значение по умолчанию GlobalMovementThrottleCountingInterval равно 600.
  • MovementPerPartitionThrottleThreshold. Данный параметр управляет общим количеством перемещений для любой секции службы за некоторое время. Это время указывается в секундах в параметре MovementPerPartitionThrottleCountingInterval. Значение по умолчанию MovementPerPartitionThrottleThreshold равно 50, а значение по умолчанию MovementPerPartitionThrottleCountingInterval равно 600.

В конфигурации этих регулировок используется та же схема, что и в процентном регулировании.

Дальнейшие действия

  • Чтобы узнать, как диспетчер кластерных ресурсов управляет нагрузкой кластера и балансирует ее, ознакомьтесь со статьей о балансировке нагрузки
  • В Cluster Resource Manager предусмотрено много параметров для описания кластера. Дополнительные сведения об этих параметрах см. в статье с описанием кластера Service Fabric.