Пересборка кластера Proxmox

Небольшая заметка о том, что делать, если развалился кластер Proxmox, и как заставить его пересобраться. Также поможет и при некоторых других болезнях Proxmox, например, если перестал работать web-интерфейс. Следующий текст не претендует на панацею, но если вы недостаточно знаете Linux, не работали с Proxmox и не знаете, в какую сторону смотреть в случае подобных проблем, то этот рецепт вам стоит попробовать.

Итак, как-то мне достался в наследство кластер Proxmox (версия 3.4) из 6 нод (предположим, с именами машин pve01 — pve06). Меня предупредили, что кластер периодически разваливался, выпадали ноды, прерывались бэкапы и т. д. и это лечилось перезагрузкой нод. Работы и так было очень много и ещё приходилось отвлекаться и на это. Конечно, такое положение дел мне не нравилось, поэтому в качестве временного обходного решения я написал простенький приведённый ниже скрипт.

Симптомы

Развалился кластер Proxmox — некоторые ноды красные и недоступны из web-интерфейса. При этом все виртуальные машины работают. В логах /var/log/daemon.log и /var/log/syslog есть сообщения такого вида:

ipcc_send_rec failed: Transport endpoint is not connected
ipcc_send_rec failed: Connection refused

Скрипт для пересборки кластера

Скрипт пытается перезапустить некоторые ключевые сервисы кластера. В итоге сетевые подключения должны переинициализироваться и через несколько минут кластер может быть восстановлен. Не принципиально на какой ноде запускать, просто нужно учесть в нём все ноды и в данном случае скрипт запускается пользователем root на ноде pve01.

#!/bin/bash
echo "######" Перезапуск локальных сервисов "######"
service ntp restart
service pvedaemon restart
service pvestatd restart
service pve-cluster restart
service pve-manager restart
service pveproxy restart

echo "######" Начинаю перезапуск удалённых сервисов "######"
for PVE in pve02 pve03 pve04 pve05 pve06
do
    echo "######" Перезапуск сервисов на $PVE "######"
    ssh root@$PVE -t service ntp restart
    ssh root@$PVE -t service pvedaemon restart
    ssh root@$PVE -t service pvestatd restart
    ssh root@$PVE -t service pve-cluster restart
    ssh root@$PVE -t service pve-manager restart
    ssh root@$PVE -t service pveproxy restart
done

Если в вашей версии Proxmox вместо ntp используется chrony, то это нужно учесть, конечно. Да и вообще, проверить, все ли эти сервисы у вас используются. В моём случае этот скрипт решал почти любые проблемы с кластером или нодами индивидуально.

Позже я собрал ещё один кластер на Proxmox 5 и с ним таких проблем не было.