Мы установили Proxmox VE 8.2 на оба хоста. Важный момент: установка выполнялась на новые диски — мы добавили в каждый сервер по 2× NVMe SSD 480 ГБ для Proxmox и ZFS metadata, а существующие SAS-диски использовались для хранилища VM.
Установка Proxmox VE с ISO на каждый хост:
# После установки — обновление до актуальной версии
apt update && apt full-upgrade -y
# Удаление enterprise-репозитория (если нет подписки)
rm /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-subscription.list
apt update
Создание ZFS-пула из SAS-дисков для хранения виртуальных машин:
# На каждом хосте: 8× 1.2 ТБ SAS в RAID-10 (mirror + stripe)
# Сначала удаляем RAID-конфигурацию контроллера (переводим в JBOD)
# Далее создаём ZFS mirror vdevs:
zpool create -f vmpool \
mirror /dev/sda /dev/sdb \
mirror /dev/sdc /dev/sdd \
mirror /dev/sde /dev/sdf \
mirror /dev/sdg /dev/sdh
# Настройка ZFS для виртуализации
zfs set compression=lz4 vmpool
zfs set atime=off vmpool
zfs set recordsize=64K vmpool # Оптимально для VM-дисков
# Добавление ZFS SLOG (write cache) на NVMe
zpool add vmpool log mirror /dev/nvme0n1p3 /dev/nvme1n1p3
# Добавление ZFS L2ARC (read cache) на NVMe
zpool add vmpool cache /dev/nvme0n1p4
# Проверка
zpool status vmpool
# NAME STATE READ WRITE CKSUM
# vmpool ONLINE 0 0 0
# mirror-0 ONLINE 0 0 0
# sda ONLINE 0 0 0
# sdb ONLINE 0 0 0
# mirror-1 ONLINE 0 0 0
# ...
# log
# mirror-4 ONLINE 0 0 0
# cache
# nvme0n1p4 ONLINE 0 0 0
ZFS дал нам два преимущества перед аппаратным RAID: встроенные снапшоты (бесплатные «моментальные бэкапы» перед миграцией каждой VM) и сжатие данных lz4, которое экономило 20–30% дискового пространства.
Важный нюанс: для перехода с аппаратного RAID на ZFS необходимо перевести контроллер из RAID-режима в режим JBOD (Just a Bunch Of Disks). На контроллерах Dell PERC это делается через BIOS контроллера (Ctrl+R при загрузке) или через утилиту perccli. ZFS самостоятельно управляет избыточностью, и наличие аппаратного RAID «между» ZFS и дисками не только не помогает, но и вредит — скрывает реальное состояние дисков от ZFS и мешает самовосстановлению.
Объединили два хоста в кластер:
# На первом хосте — создание кластера
pvecm create shitpolis-cluster
# На втором хосте — присоединение
pvecm add 10.0.1.1 # IP первого хоста
# Password: (вводим root-пароль первого хоста)
# Проверка кластера
pvecm status
# Cluster information
# ~~~~~~~~~~~~~~~~~~~
# Name: shitpolis-cluster
# Config Version: 2
# Transport: knet
# Secure: on
# Quorum information
# ~~~~~~~~~~~~~~~~~~
# Date: ...
# Quorum provider: corosync_votequorum
# Nodes: 2
# Node ID: 1 pve1 Online
# Node ID: 2 pve2 Online
Сетевая конфигурация на каждом хосте:
# /etc/network/interfaces (pve1)
auto lo
iface lo inet loopback
# Management network
auto eno1
iface eno1 inet manual
auto vmbr0
iface vmbr0 inet static
address 10.0.1.1/24
gateway 10.0.1.254
bridge-ports eno1
bridge-stp off
bridge-fd 0
# VM traffic (VLAN-aware bridge)
auto eno2
iface eno2 inet manual
auto vmbr1
iface vmbr1 inet manual
bridge-ports eno2
bridge-stp off
bridge-fd 0
bridge-vlan-aware yes
bridge-vids 2-4094
# Corosync / migration (dedicated 10G link)
auto eno3
iface eno3 inet static
address 10.10.1.1/24
Выделенный интерфейс 10 Гбит/с для corosync и live migration — это критически важно. Без него миграция VM между хостами занимала бы минуты вместо секунд.
Для VLAN-aware bridge мы настроили теги VLAN, соответствующие сетевой сегментации ЩитПолис:
- VLAN 10 — серверы приложений (1С, CRM)
- VLAN 20 — базы данных (изолированный сегмент)
- VLAN 30 — веб-сервисы (DMZ)
- VLAN 40 — инфраструктура (AD, DNS, DHCP)
- VLAN 50 — мониторинг
- VLAN 100 — management
Каждая VM при импорте получала соответствующий VLAN-тег через параметр tag=XX в конфигурации сетевого интерфейса.