Изменения в кворумных моделях в Windows Server 2012 Failover Clustering

Windows Server 2012 Failover Clustering представляет две новые возможности для кворума - Cluster Node Weight (установка “веса” для узлов) и Dynamic Quorum (динамический кворум). Установка “веса” для узла была доступна в Windows Server 2008 (+R2) с помощью KB 2494036. Здесь же эта возможность реализована в составе кода ОС.

1.1.               
Установка веса для кластерного узла

Концепция “Веса” кластерного узла в наибольшей степени приемлема для геораспределенных кластеров, хотя может применяться и для обычных кластеров. Идея концепции – исключить часть кластерных узлов из голосования, что в случае их “падения” не приведет к остановке кластера в целом. Исключение из голосования выполняется путем установки параметра NodeWeight = 0, что автоматически исключает этот узел от участия в “голосовании’ при формировании кворума.

 

NodeWeight, устанавливаемый для узла называется "целевым весом". В реестре этот параметр TargetNodeWeight.

 Изменение “веса” узла может быть произведено или через графический интерфейс, или через командную строку PowerShell.

Для изменения через GUI используется Configure Cluster Quorum Wizard в Failover Cluster Manager. Это достигается выбором опции Advanced Quorum Configuration and Witness Selection. Страница Select Voting Configuration для присвоения “веса” узлу (узлам).

 

Та же процедура может быть выполнена через PowerShell.

 

 PowerShell:

 (Get-ClusterNode W2K12-N1).NodeWeight = 0

 Для просмотра внесенных изменений может использоваться PowerShell.

 

PowerShell:

 Get-ClusterNode W2K12-N1 | fl *

 Результат выполнения команды показан ниже.

 После изменения веса узла узел не будет использоваться при расчете голосов.

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

1.1.           
Динамический кворум (Dynamic Quorum)

Динамический кворум — это новая функциональность, которая появилась в Windows Server 2012 Failover Clusters и предназначена для обеспечения бесперебойной работы кластера в случае если количество голосов в нем уменьшится ниже 50% от общего количества голосов. Используя эту модель кластер пересчитывает количество голосов в кластере исходя из голосов узлов принимающих участие в голосовании.  Модель изначально предназначается для кластеров имеющих большое количество узлов, но может использоваться и с обычным кластером. Динамический кворум включен по умолчанию и кластер может сохранить работоспособность даже если останется один последний узел. Такая ситуация называется 'Last Man Standing'.

Модель Dynamic Quorum включена по умолчанию в Windows Server 2012 Failover Cluster (DynamicQuorum = 1) (См. ниже).

Администратор может выключить эту модель при необходимости.

PowerShell:

 (Get-Cluster Clus-W2k12).DynamicQuorum = 0

Другой способ управления Динамическим кворумом это использование Configure Cluster Quorum Wizard, выбирая опцию Advanced Quorum Configuration and Witness Selection

За правильное функционирования Динамического Кворума отвечает Dynamic Quorum Daemon (DQD), являющийся частью кластерного сервиса. DQD “пробуждается” каждые 5 минут или ранее, если происходят события, на которые он должен отреагировать. Перечень таких событий и действия DQD приведены ниже.

События

Действия DQD

Узел закончил присоединение к кластеру и сообщил RCM (Resource Control Manager) событие “UP”

DQD на этом узле переводит “вес” узла с 0 в 1

Cluster View изменилось поскольку один или более узлов выключены

Узел с наименьшим “Node ID” из оставшихся узлов приводит “веса” выключенных узлов в 0, один за другим

Событие потери кворума

DQD на каждом узле проверяет необходимо ли произвести подстройку “веса” узлов

Узел добавлен, удален, кворум изменен

DQD на каждом узле проверяет необходимо ли произвести подстройку “веса” узлов

Сценарии работы Dynamic Quorum:

  • Узел разрушен из-за серьезной аварии: Узел с наименьшим “Node ID” из оставшихся узлов приводит “вес” узла в 0. Приведение проводится “узел-за-узлом”
  • Узел выключен штатным способом ( Graceful Shutdown): Узел удаляет свой собственный голос как часть процесса выключения сервера.
  • Узел добавлен в кластер: Узел добавляет свой собственный голос как часть процесса выключения сервера.

Подстройка “веса” DQD происходит в соответствии с нижеприведенными правилами:

  • Когда кластерный сервис стартован с ключом /FQ, подстройка веса не производится
  • DQD никогда не устанавливает вес узла в 1 если целевой вес (TargetNodeWeight в реестре) установлен в 0
  • DQD работает только с динамическим “весом” узла и никогда не изменяет “целевого веса” узла.
  • Если узел стартовал и функционирует, то DQD повышает “вес” узла до “целевого веса”
  • Перед остановкой узла DQD понижает “вес” узла до 0. Если же это приводит к снижению количества голосов до 0, то кластерная служба останавливается
  • Узел с минимальным Node ID в текущем кластере (Current Cluster View) ответственен за понижение “веса” узлов (узел-за-узлом) и репликацию этих изменений на другие узлы.
  • Если кворумная конфигурация содержит диск или общую папку, то DQD никогда не понижает количество голосов ниже 2.

Ситуация 'Last Man Standing' возникает если остается один узел без кворумного ресурса или узел и кворумный ресурс. И в том и в другом случае кластер продолжает функционировать и DQD на оставшемся “в живых” узле выполняет правила описанные выше.

Ниже показана ситуация 'Last Man Standing' при наличии кворумного ресурса.

Конфигурация 'Last Man Standing' with Node Majority имеет некоторые особенности функционирования DQD. Если в кластере остаются активными только два узла и нет кворумного ресурса требуется применения специальных алгоритмов для того, чтобы избежать явления “Split-Brain”. “Split-Brain” это ситуация, когда узлы оставшихся в кластере теряют контакт друг с другом, и каждый из них начинает себя считать, самостоятельным кластером.  

Для недопущения этой ситуации кластерный сервис понижает динамический “вес” одного из двух оставшихся “в живых” узлов до 0 (См. рис. ниже). Обратите внимание, что узел W2K12-N2 находится в состоянии UP, но его DynamicWeight понижен до 0.

И в случае разделения узлов (потери связи друг с другом по всем сетевым интерфейсам) для недопущения явления “Split-Brain”, кластерный сервис на этом узле будет остановлен (в данном случае это узел W2K12-N2), а на другом он будет продолжать работать (в данном случае это узел W2K12-N1).

Применение описанных выше усовершенствований повышает удобство и отказоустойчивость работы кластера Windows 2012 Failover Cluster при применении его в больших датацентрах и в Cloud-технологиях, когда количество узлом может достигать нескольких десятков.

  Александр Каленик, Senior Premier Field Engineer (PFE), MSFT (Russia)