Raspberry Pi Zero как QDevice: кворум для кластера Proxmox из двух узлов

Кластер 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.

Порядок действий из статьи:

  1. Установить на Raspberry Pi Zero систему DietPi.
  2. Поставить пакет арбитра командой sudo apt install corosync-qnetd — на устаревшей плате он установился без ошибок совместимости за несколько секунд.
  3. На обоих узлах PVE в Shell выполнить apt install corosync-qdevice.
  4. На одном из узлов запустить 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