Короткий ответ

Без quorum служба кластера не держит роли: CSV, VM, Broker — Offline. Лечение — вернуть большинство голосов (узлы + witness), а не «запустить VM руками на обоих серверах». Force quorum (Start-ClusterNode -FixQuorum / /fq) — аварийный рычаг, когда вы доказали, что другой раздел кластера мёртв и не пишет на те же LUN.

Симптомы и как отличить

Типичная картина:

  • Failover Cluster Manager не подключается / «cluster not reachable»;
  • Event ID 1177 (Cluster service shutting down because quorum was lost), 1135 (lost communication);
  • Get-Cluster с узла падает или Get-ClusterNode показывает Down;
  • Hyper-V GUI локально видит VM, кластер — нет.

Отличия:

Что видноКуда
Кворум есть, CSV мёртвCSV
Кворум есть, не едет одна VMперенос VM
Плановый DR на другую площадкурезервирование
Один хост больной, кластер живhealth

Возможные причины

  1. Упала сеть heartbeat/cluster (часто та же, что CSV).
  2. Большинство узлов выключены (электропитание стойки).
  3. Witness недоступен (file share, disk, cloud) плюс нечёт голосов.
  4. Динамический кворум снял голоса и остался один узел без witness.
  5. После аварии забыли Force и оставили кластер в «странном» наборе.
  6. Рассинхрон времени, долгие паузы (редко как единственная причина).

Диагностика

На каждом узле, до которого есть консоль:

Get-Service clussvc | Format-List Status, StartType
Get-Cluster -ErrorAction SilentlyContinue
Get-ClusterNode -ErrorAction SilentlyContinue | Format-Table Name, State, Id
Get-ClusterQuorum -ErrorAction SilentlyContinue | Format-List QuorumResource, QuorumType
Get-WinEvent -FilterHashtable @{ LogName = 'System'; Id = 1177,1135,1561,1558; StartTime = (Get-Date).AddHours(-12) } |
  Format-Table TimeCreated, Id, Message -Wrap

Сеть:

Get-ClusterNetwork -ErrorAction SilentlyContinue | Format-Table Name, State, Role
Get-NetAdapter | Format-Table Name, Status, LinkSpeed
Test-NetConnection -ComputerName 'HV02.contoso.example' -Port 3343

Witness:

Get-ClusterResource -ErrorAction SilentlyContinue | Where-Object ResourceType -match 'Witness|File Share|Cloud'
# file share witness: с узла
Test-Path '\\fs01.contoso.example\clusterwitness'

BMC: питание HV01/HV02/HV03. Запишите в заявку, кто Up. Пока два узла «вроде живы, но не видят друг друга» — это кандидаты на split, не на Force.

Решение

Сценарий A. Сеть моргнула, узлы живы

Почините L2/L3 cluster network, firewall UDP 3343 между узлами. Когда heartbeat вернулся, кворум часто поднимается сам. Не FixQuorum.

Сценарий B. Упал witness, узлы в большинстве

Верните file share / disk / cloud witness. Для cloud witness — время, DNS, доступ к endpoint, ключ хранилища не протух. Set-ClusterQuorum меняйте осознанно, не «на Node Majority» на двух узлах без понимания, что падение одного снова убьёт кластер.

Get-ClusterQuorum | Format-List

Сценарий C. Один узел жив, остальные доказанно выключены

  1. BMC: остальные Power Off, не «сеть management лежит, а кластерный NIC жив».
  2. Отключите от СХД узлы, в которых не уверены (zoning/iSCSI logout), чтобы они не стартовали VM.
  3. Только затем, с документированным решением:
Start-ClusterNode -Name 'HV01' -FixQuorum
Get-ClusterNode | Format-Table Name, State
Get-ClusterQuorum
  1. Когда остальные узлы реально включают: пусть присоединяются к этому авторитетному разделу, не поднимайте второй Force на HV02.

Сценарий D. Split уже случился

Не merge «чей NTFS свежее». Остановите VM на одном разделе, разберите запись на LUN, планируйте restore гостей. Это инцидент целостности.

После успешного Force не поднимайте сразу все группы. Порядок: quorum → CSV Online → одна некритичная VM → сверка Get-VM на всех узлах (нет второго Running) → остальные роли. DNS/VIP приложений не «починятся сами», если вы переехали не туда.

Не оставляйте кластер навсегда в режиме, когда NodeWeight нули. Как только witness и узлы живы, верните штатный Get-ClusterQuorum. Двух-узел без witness снова упадёт на следующем ребуте одного сервера.

Сценарий E. Динамический кворум оставил 0

Изучите Get-ClusterNode Property NodeWeight после восстановления сети. Не крутите NodeWeight без модели голосов.

Как проверить, что проблема устранена

Get-ClusterNode | Format-Table Name, State
Get-ClusterQuorum | Format-List
Get-ClusterSharedVolume | Format-Table Name, State
Get-ClusterGroup | Format-Table Name, State, OwnerNode

Все ожидаемые узлы Up, quorum type штатный, witness Online если он в модели. CSV Online. VM-APP01 Running на одном OwnerNode. Get-VM -ComputerName HV01,HV02 не показывает одну и ту же VM Running на двух хостах с одним Path.

Сверьте с BMC, что нет «тихого» третьего узла.

Если не помогло

  • clussvc не стартует даже с fq: журнал Cluster, повреждён hive — не импортируйте чужой cluster db.
  • Кворум есть, CSV нет: статья CSV.
  • После Force забыли вернуть witness — двух-узел снова хрупкий.
  • Cloud witness в закрытом контуре без доступа — смените тип quorum штатно, не Force каждую пятницу.

Профилактика

  • Witness обязателен для чётного числа узлов.
  • Отдельная сеть heartbeat.
  • Мониторинг 1177/1135 и Get-ClusterQuorum.
  • Запрет FixQuorum без runbook и двух человек.
  • ИБП/две стойки, чтобы не гасить majority разом.
  • Регулярный Test-Cluster в окно, не во время аварии как первая мысль.

FAQ

Node majority на двух узлах?

При падении одного кворума нет. Добавьте witness (disk, file share, cloud).

ForceStartResource на VM без кворума?

Не обход. Сначала quorum. Иначе риск двух писателей.

Можно ли выключить динамический кворум?

Иногда в специфических топологиях. Не «чтобы Force не понадобился». Читайте модель Microsoft Dynamic Quorum прежде чем LowerQuorumPriority руками.

File share witness на одном из узлов кластера?

Нет. Witness должен пережить падение любого узла. Шара на HV01 бесполезна, когда мёртв HV01.

После FixQuorum VM сами не Online?

Поднимайте группы осознанно, сверив что второй раздел не держит те же VM. Start-ClusterGroup не массово «все».

Event 1135 без 1177?

Потеря связи с узлом при живом кворуме. Чините сеть этого узла, не Force.