Кластер Proxmox Virtual Environment из двух узлов — популярный бюджетный вариант высокой доступности, но у него есть неприятная особенность: когда один узел падает, второй замирает. Причина в кворуме Corosync: для работы кластера нужно больше 50% голосов, а два узла после потери одного дают ровно половину. Автор XDA Ayush Pande рассказывает, как решил эту проблему первым Raspberry Pi Zero за 15 долларов — устройством, которое для серверных задач выглядит откровенно слабым.
Почему кластер из двух узлов замирает без третьего голоса
Сам по себе Raspberry Pi Zero — не сервер: 512 МБ оперативной памяти и устаревший процессор ARMv6, под который нет образов большинства привычных приложений. Но для роли арбитра много и не нужно.
Схема с ZFS-репликацией позволяет обойтись двумя узлами и соединением 2.5G, однако требует решить проблему split brain: при падении одного узла Corosync получает только 50% голосов, и кластер замораживается целиком. В такой ситуации недоступен даже уцелевший узел вместе с его виртуальными гостями — не говоря уже о миграции высокоприоритетных LXC и виртуальных машин. В кластере из трёх узлов падение одного не критично: оставшиеся дают 2/3 голосов.
QDevice: третий голос без третьего сервера
Решение — QDevice, арбитр, который убеждает службы кластера Proxmox, что активных узлов больше половины. Ему не нужен ни пул ZFS-репликации, ни сама установка Proxmox: достаточно, чтобы система работала под Linux. Именно поэтому подошёл Raspberry Pi Zero.
Порядок действий из статьи:
- Установить на Raspberry Pi Zero систему DietPi.
- Поставить пакет арбитра командой
sudo apt install corosync-qnetd— на устаревшей плате он установился без ошибок совместимости за несколько секунд. - На обоих узлах PVE в Shell выполнить
apt install corosync-qdevice. - На одном из узлов запустить
pvecm qdevice setup.
На последнем шаге автора ждала ошибка: в SSH-сервере по умолчанию в DietPi не хватало нужных для этой операции пакетов SFTP. Помогло переключение на OpenSSH-сервер, после чего pvecm qdevice setup прошёл и Raspberry Pi Zero был добавлен в кластер как узел QDevice.
Проверка отказом
Убедиться в работоспособности схемы автор решил самым прямым способом — выключил один из узлов. Через несколько секунд службы кластера PVE начали переносить виртуальных гостей, помеченных в разделе HA resources, на второй узел. Так двухузловой кластер с арбитром на слабой плате получил поведение, которого сам по себе не обеспечивал.
Для домашней лаборатории это дешёвый способ закрыть главную дыру в отказоустойчивости: не покупать третий полноценный сервер, а отдать роль арбитра плате за 15 долларов. Правда, у этой экономии есть обратная сторона — арбитр становится единственной точкой, от которой зависит кворум, и относиться к нему стоит соответственно. Тем, кто настраивает домашние устройства вслепую, пригодится и другой материал — про то, как отключение анимаций ускоряет Pixel без потери батареи: тот же принцип «сначала измерь, потом тюнингуй».
Что ещё умеет Raspberry Pi Zero
Если кластер Proxmox не нужен, первое поколение Raspberry Pi Zero всё равно находит применение в домашней лаборатории: дешёвый блокировщик рекламы, выходной узел Tailscale или MQTT-сервер. Все эти задачи не требуют ни большой памяти, ни свежей архитектуры — ровно то, чего у платы нет. А если в хозяйстве есть Android-смартфон, который вечно разряжается раньше времени, отключение анимаций на Pixel — смежная по духу оптимизация: малой кровью вернуть устройству отзывчивость.
Частые вопросы
Зачем кластеру Proxmox из двух узлов третий участник?
Для кворума Corosync нужно больше 50% голосов. Два узла после падения одного дают ровно 50%, и кластер замораживается. Третий голос — QDevice — выводит результат за половину.
Обязательно ли ставить на арбитр Proxmox?
Нет. QDevice не требует ни установки Proxmox, ни пула ZFS-репликации — достаточно Linux. В статье использован Raspberry Pi Zero с DietPi.
Какой пакет нужен на арбитре?
corosync-qnetd, устанавливается командой sudo apt install corosync-qnetd.
Что ставить на узлы PVE?
Пакет corosync-qdevice — на обоих узлах, командой apt install corosync-qdevice в Shell.
Почему pvecm qdevice setup выдал ошибку?
В SSH-сервере по умолчанию в DietPi не было нужных пакетов SFTP. Переключение на OpenSSH-сервер решило проблему, и команда прошла.
Хватит ли Raspberry Pi Zero по производительности?
Для роли арбитра — да: пакет установился без ошибок совместимости, несмотря на ARMv6 и 512 МБ памяти. Для серверных задач общего назначения плата не подходит.
Как проверить, что схема работает?
Автор выключил один узел: через несколько секунд службы PVE начали переносить гостей, помеченных в HA resources, на второй узел.
Что будет, если упадёт сам арбитр?
В статье этот сценарий не проверялся. Но кворум снова окажется в зависимости от одного устройства, поэтому арбитру стоит обеспечить стабильное питание и сеть.
Источник: xda-developers.com