Кластер Proxmox VE держится не на доверии между нодами, а на голосовании. Каждая нода отдаёт один голос в corosync, и пока сумма голосов живых узлов больше половины от общего числа — кластер «quorate», решения принимать можно. Как только большинство пропадает (узлы упали, сеть между сегментами порвалась) — кластер теряет кворум, и это не абстрактная метрика для дашборда, а жёсткий замок на изменения.
Смотрится это через pvecm status: в выводе есть блок Votequorum information с Expected votes, Total votes и собственно Quorum — минимальным числом голосов, после которого узел продолжает работать как часть кластера. Нода без кворума не может писать в /etc/pve — конфигурационная файловая система pmxcfs переходит в read-only, так что создать VM, поменять настройку HA или отредактировать corosync.conf через обычный путь не выйдет. Если на отрезанной ноде были активны HA-сервисы, pve-ha-lrm ждёт возврата кворума и не трогает их конфигурацию; не дождавшись в течение таймаута watchdog (по умолчанию 60 секунд), нода уходит в перезагрузку — это самозащита от ситуации, когда два изолированных сегмента кластера одновременно решат, что VM должна работать именно у них.
Отдельная засада — кластер из чётного числа узлов, типичный пример: 2 ноды. Разрыв связи ровно пополам (1 против 1) не даёт большинства ни одной из сторон, и обе остаются без кворума, хотя обе живы. Для такого случая в corosync есть QDevice — внешний арбитр на базе corosync-qnetd, который выдаёт дополнительный голос той стороне, которую видит сам. Поднимается командой pvecm qdevice setup <QDEVICE-IP> с отдельного сервера (не входящего в сам кластер, иначе смысл арбитража теряется), а pvecm status после настройки показывает флаг Qdevice в колонке голосов. Важная оговорка из документации Proxmox: для кластеров с чётным числом узлов QDevice даёт только один дополнительный голос и рекомендуется явно, а вот для нечётного числа узлов его эффект иной — он отдаёт N-1 голосов, что звучит как бонус отказоустойчивости, но на деле превращает сам QDevice в точку отказа: если ляжет он, кластер больше не переживёт падения ни одной ноды.
Планируя кластер с нуля, проще сразу закладывать нечётное число полноценных узлов (3, 5, 7) — тогда любое разделение сети математически не может дать кворум сразу двум сторонам, и QDevice не нужен вообще. Он оправдан именно как точечное решение для 2-нодового кластера, где третий полноценный узел экономически не нужен, а переживать одновременную потерю обеих нод ради отказоустойчивости как раз не требуется.
#proxmox #ha
