Автозапуск vm/ct при включении 1 ноды в кластере

Это не “рекоменднуемый разработчиком pve метод”. Они предлагают ставить qdevice или держать всегда включенной 1 ноду.
Так же, если у вас vm/ct распределяются между нодами по загрузке/вручную - этот метод вам не подойдет из-за репликации.

У меня 3 ноды в кластере. 01 - основной сервер, 02 и 03 - резерв (старые ноуты).
По умолчанию, все сервисы поднимаются на 01, при отключении - сначала переходят на 03 (и на 02, если 03 недоступна), при включении 01 возвращаются на нее.
Навайбкодил себе сервис, что бы на 01 автоматически запускались сервисы без кворума (ноуты обычно выключены).
pve02, pve03 нужно поменять на ваши названия нод.
Если любая из нод доступна - скрипт не выполняется.
Количество нод можно поставить любое, или изменить скрипт, что бы проверять доступность каких-то конкретных нод.

  1. nano /usr/local/bin/pve-auto-expected.sh
    вставляем содержимое:
#!/bin/bash

Список хостов или IP-адресов остальных нод кластера

NODES=("pve02" "pve03")

Даем системе и сетям немного времени на инициализацию после загрузки

sleep 15

Проверяем, ответит ли хотя бы одна из остальных нод по ping

ANY_ONLINE=false

for node in "${NODES[@]}"; do
if ping -c 1 -W 2 "$node" > /dev/null 2>&1; then
ANY_ONLINE=true
break
fi
done

Если ни одна нода не ответила, устанавливаем expected votes в 1

if [ "$ANY_ONLINE" = false ]; then
/usr/bin/pvecm expected 1
fi
  1. Делаем исполняемым:
    chmod +x /usr/local/bin/pve-auto-expected.sh

  2. Делаем сервис:
    nano /etc/systemd/system/pve-auto-expected.service
    Вставляем содержимое:

[Unit]
Description=Auto set Proxmox expected votes to 1 if other nodes are offline
After=network-online.target pve-cluster.service
Wants=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/pve-auto-expected.sh

[Install]
WantedBy=multi-user.target
  1. Включаем сервис:
    systemctl daemon-reload
    systemctl enable pve-auto-expected.service

После ребута хоста, vm/ct должны стартовать автоматически.

В теории, можно задать “вес” pve01 равный 3, тогда общий вес будет 5, для кворума надо 3.
Минус такого подхода: pve02 и pve03 по отдельности без pve01 не смогут работать все равно
Плюс такого подхода: Вы всегда будете иметь консистентные данные

В вашем случае могу предположить такой сценарий:

  1. Срабатывает ваш скрипт и выставляет expected 1
  2. Вы вносите изменения в конфигурацию под corosync(создаете гостя, меняете его настройки, выключаете/выключаете)
  3. Подтягиваются 2 других узла
  4. Начинается голосование по кворуму
  5. 2 других узла голосуют 2мя голосами против одного за старые данные
  6. Происходит откат всех изменений, которые производились пока pve02 и pve03 были в оффлайне

Могу ошибаться, но в теории это должно так сработать.

Либо вообще сделать 3 отдельных узла без кластера, а управлять ими при помощи Proxmox Datacenter Manager или тонных навайбодиных сервисов