Proxmox VE 8.2: разворачиваем кластер на трёх нодах за вечер
Пятница, шесть вечера. Тимлид пишет в Slack: «К понедельнику нужен отказоустойчивый кластер для dev-стенда. Бюджет — 135 тысяч. Виртуалки, сеть, шаред-сторадж. Удачи». Знакомо? Мне — да, причём не в первый раз. В этой статье покажу, как я за выходные поднял Proxmox VE 8.2 кластер на трёх б/у серверах и получил инфраструктуру, которая не уступает решениям за миллион.
Почему Proxmox, а не VMware
Давайте начистоту. После того как Broadcom купил VMware и убил бесплатный ESXi, выбор гипервизора для небольших команд сильно сузился. Варианты:
- VMware vSphere — от $4,500/год за Essentials Plus. За кластер из трёх нод — считайте сами
- Microsoft Hyper-V — бесплатный Hyper-V Server больше не развивается
- Proxmox VE — open source, бесплатен, подписка опциональна (от €110/год за сокет)
Proxmox — это KVM + LXC + веб-интерфейс + кластеризация + Ceph из коробки. Не нужен vCenter, не нужен отдельный сервер управления. Всё работает на самих нодах.
Железо: Dell PowerEdge R630 с Авито
Три одинаковых сервера, каждый обошёлся в 45 000 ₽:
- CPU: 2× Intel Xeon E5−2680 v4 (14 ядер, 2.4 ГГц) — итого 28 ядер / 56 потоков на ноду
- RAM: 128 ГБ DDR4 ECC (16× 8 ГБ)
- Диски: 2× 480 ГБ SSD SATA (система + Ceph OSD) + 2× 1.2 ТБ SAS 10K (Ceph OSD)
- Сеть: 4× 1GbE встроенных + двухпортовая Intel X520 10GbE SFP+
- RAID-контроллер: PERC H730 Mini (переключён в HBA-режим для Ceph)
- iDRAC 8 Enterprise — удалённое управление, KVM-over-IP
Итого: 84 ядра, 168 потоков, 384 ГБ RAM, ~10 ТБ сырого дискового пространства за 135 тысяч рублей. Попробуйте получить такое в облаке за те же деньги.
Установка Proxmox VE 8.2
Скачиваем ISO с proxmox.com/downloads, записываем на флешку через dd или Rufus. Установка графическая, занимает 5 минут на ноду. Единственный нюанс — выбираем ZFS (RAID1) на два SSD для системы.
После установки первым делом отключаем enterprise-репозиторий и подключаем бесплатный:
# Отключаем enterprise-репозиторий (нет подписки)
sed -i 's/^deb/# deb/' /etc/apt/sources.list.d/pve-enterprise.list
# Подключаем no-subscription репо
echo "deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-no-sub.list
# Обновляемся
apt update && apt full-upgrade -y
Также убираем назойливое предупреждение о подписке в веб-интерфейсе:
sed -Ezi.bak "s/(Ext\.Msg\.show\(\{\s+title: gettext\('No valid sub)/void\(\{ \/\/\1/g" \
/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
systemctl restart pveproxy
Сеть: разделяем трафик
Критически важно разделить трафик виртуальных машин и внутрикластерный трафик Corosync. Я использовал встроенные 1GbE для управления и VM, а 10GbE — для Ceph и Corosync.
Конфиг /etc/network/interfaces на первой ноде:
auto lo
iface lo inet loopback
# Management + VM traffic (1GbE)
auto eno1
iface eno1 inet manual
auto vmbr0
iface vmbr0 inet static
address 192.168.1.51/24
gateway 192.168.1.1
bridge-ports eno1
bridge-stp off
bridge-fd 0
# Ceph + Corosync (10GbE)
auto ens2f0
iface ens2f0 inet static
address 10.10.10.51/24
mtu 9000
На остальных нодах — аналогично, меняем последний октет: .52 и .53. Обратите внимание на MTU 9000 (jumbo frames) — это даёт ощутимый прирост производительности Ceph.
Создаём кластер
На первой ноде (pve1):
# Создаём кластер с выделенной сетью для Corosync
pvecm create lab-cluster --link0 10.10.10.51
На второй и третьей нодах:
# Присоединяемся к кластеру
pvecm add 192.168.1.51 --link0 10.10.10.52 # на pve2
pvecm add 192.168.1.51 --link0 10.10.10.53 # на pve3
Проверяем кворум:
pvecm status
# Ожидаемый вывод:
# Membership information
# ~~~~~~~~~~~~~~~~~~~~~~
# Nodeid Votes Name
# 1 1 pve1 (local)
# 2 1 pve2
# 3 1 pve3
Три ноды — это минимум для кворума. При падении одной ноды кластер продолжает работать. Две ноды из трёх = большинство.
Хранилище: Ceph
Почему Ceph, а не NFS/iSCSI? Потому что Ceph — это распределённое хранилище без единой точки отказа. Данные реплицируются между нодами. Нода умерла — данные всё ещё доступны.
Устанавливаем Ceph прямо из интерфейса Proxmox (или через CLI):
# Устанавливаем Ceph (на каждой ноде)
pveceph install --repository no-subscription
# Инициализируем (только на первой ноде)
pveceph init --network 10.10.10.0/24
# Создаём мониторы (на каждой ноде)
pveceph mon create
# Создаём менеджеры (на каждой ноде)
pveceph mgr create
Теперь добавляем OSD (Object Storage Daemon) — по сути, подключаем диски к Ceph. На каждой ноде:
# SSD OSD (быстрый пул для VM-дисков)
pveceph osd create /dev/sdc
# HDD OSD (медленный пул для бэкапов)
pveceph osd create /dev/sdd
pveceph osd create /dev/sde
Создаём пулы:
# Быстрый пул на SSD (size=3 — тройная репликация)
pveceph pool create ssd-pool --size 3 --min_size 2 --crush_rule ssd-rule
# Медленный пул на HDD
pveceph pool create hdd-pool --size 3 --min_size 2 --crush_rule hdd-rule
После настройки в веб-интерфейсе Proxmox появляются два хранилища: ssd-pool для дисков VM и hdd-pool для бэкапов и ISO-образов.
Грабли: три проблемы, на которые я наступил
1. Ceph OSD не стартуют после ребута
Проблема была в PERC H730 — по умолчанию он работает в RAID-режиме и кэширует записи. Ceph требует прямой доступ к дискам. Решение: переключить контроллер в HBA-режим (Pass-Through) через iDRAC или утилиту perccli:
/opt/MegaRAID/perccli/perccli64 /c0 set jbod=on
/opt/MegaRAID/perccli/perccli64 /c0/e32/s2 set good force
2. Corosync теряет кворум при сетевых микросбоях
Дефолтный таймаут Corosync — 1 секунда. При кратковременных задержках на сети нода объявляется мёртвой. Увеличиваем таймаут в /etc/pve/corosync.conf:
totem {
token: 5000
token_retransmits_before_loss_const: 10
}
3. Live migration падает с ошибкой «migration timed out»
У VM с 32 ГБ RAM миграция по 1GbE занимала слишком долго. Решение — переключить миграцию на 10GbE интерфейс. В /etc/pve/datacenter.cfg:
migration: secure,network=10.10.10.0/24
Результат
Что мы получили за 135 000 ₽ и одни выходные:
- 84 ядра / 168 потоков — хватит на десятки VM
- 384 ГБ RAM — можно выделять по 8−16 ГБ на VM без оглядки
- ~3.3 ТБ быстрого SSD-хранилища с тройной репликацией
- ~7.2 ТБ HDD-хранилища для бэкапов
- Отказоустойчивость — любая нода может упасть, сервисы продолжат работать
- Live migration — перенос VM между нодами без даунтайма
- HA — автоматический перезапуск VM на живых нодах при падении
Для сравнения: аналогичные ресурсы в Yandex Cloud (84 vCPU, 384 ГБ RAM, 3 ТБ SSD) обойдутся примерно в 800 000 ₽/мес. Наш кластер окупается за 5 дней.
В понедельник тимлид получил полностью рабочий dev-стенд с 12 виртуалками, мониторингом через Grafana и автоматическими бэкапами на HDD-пул. Proxmox — это тот случай, когда open source реально работает лучше коммерческих решений.
Полностью поддерживаю выбор Proxmox. Мы на работе ещё в 2023 году начали миграцию с ESXi, когда Broadcom только анонсировал покупку. Перевели 40+ VM без единого инцидента. Единственное — если планируете Windows-виртуалки, обязательно ставьте VirtIO-драйверы, иначе сеть и диски будут работать через эмуляцию и просядет производительность раза в три.
Про Corosync-таймауты хочу добавить — мы столкнулись с тем, что при
token: 1000(дефолт) кластер начинал «дёргаться» при бэкапах больших VM, потому что Ceph забивал сеть. Подняли до token: 10 000 иconsensus: 12000. С тех пор ни одного ложного срабатывания за полгода. Но это уже зависит от качества вашей 10GbE-сети.Да, token: 5000 — это компромисс. Если сеть стабильная, можно и 10 000 поставить. Главное — не забыть, что увеличение таймаута означает более медленное обнаружение реально упавшей ноды. На 10 секундах HA начнёт перезапускать VM через ~15 сек после падения, а не через ~5.