Это не “рекоменднуемый разработчиком pve метод”. Они предлагают ставить qdevice или держать всегда включенной 1 ноду.
Так же, если у вас vm/ct распределяются между нодами по загрузке/вручную - этот метод вам не подойдет из-за репликации.
У меня 3 ноды в кластере. 01 - основной сервер, 02 и 03 - резерв (старые ноуты).
По умолчанию, все сервисы поднимаются на 01, при отключении - сначала переходят на 03 (и на 02, если 03 недоступна), при включении 01 возвращаются на нее.
Навайбкодил себе сервис, что бы на 01 автоматически запускались сервисы без кворума (ноуты обычно выключены).
pve02, pve03 нужно поменять на ваши названия нод.
Если любая из нод доступна - скрипт не выполняется.
Количество нод можно поставить любое, или изменить скрипт, что бы проверять доступность каких-то конкретных нод.
- 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
-
Делаем исполняемым:
chmod +x /usr/local/bin/pve-auto-expected.sh -
Делаем сервис:
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
- Включаем сервис:
systemctl daemon-reload
systemctl enable pve-auto-expected.service
После ребута хоста, vm/ct должны стартовать автоматически.