Proxmox. Репликация виртуальных машин и контейнеров
Описание
Имеется
- Proxmox Cluster1 с хостами pve1 и pve2
- На каждом из двух хостов имеются диски /dev/sda (НЕобязательно с одинаковым объемом)
Задача
- Создать ВМ winxp на pve1, настроить репликацию на pve2
HINTS
- Репликация работает ТОЛЬКО на разделах ZFS (используя технологию клонирования ZFS разделов)
- На обоих хостах в кластере должен быть раздел ZFS с одинаковым именем (объем НЕобязательно должен быть одинаковым)
- При создании ВМ и КТ на разделе ZFS создаются новые Датасеты ZFS для каждой ВМ или КТ (в том числе для каждого снэпшота (это по сути новый виртуальный диск)), то есть, по сути, реплика ВМ - это Датасет-клон ZFS на хосте с репликами
- При восстановлении ВМ на другом хосте необходимо переместить файл настроек ВМ (/etc/pve/nodes/pve1/qemu-server/100.conf) по другому пути (см. восстановление ВМ в этом мануале), и этот конфиг будет использовать Датасет виртуального диска на другом хосте
Репликация ВМ
pve1
Здесь будет машина-оригинал
Создадим раздел ZFS
Datacenter - pve1 - Disks - ZFS - Create ZFS
Name: zfsdata Add storage: V RAID Level: Single Disk Device: /dev/sda
В итоге появится новое хранилище с типом ZFS
На нем мы можем создавать ВМ и контейнеры
Datacenter - Storage
zfsdata | ZFS | Disk image, Container
pve2
Здесь будет машина-реплика
Создадим раздел ZFS
Datacenter - pve1 - Disks - ZFS - Create ZFS
Name: zfsdata # ОБЯЗАТЕЛЬНО С ТАКИМ ЖЕ ИМЕНЕМ КАК И НА pve1! Add storage: - # ОБЯЗАТЕЛЬНО УБРАТЬ ГАЛКУ, ИНАЧЕ СИСТЕМА РУГНЕТСЯ НА НАЛИЧИЕ ТАКОГО ПУЛА ZFS RAID Level: Single Disk Device: /dev/sda
Хранилище так и осталось одно
Datacenter - Storage
zfsdata | ZFS | Disk image, Container
pve1
Настроим отображение zfsdata на обоих хостах pve1 и pve2
Datacenter - Storage - zfsdata - Edit
Nodes: All (No restrictions)
Таким образом хранилище zfsdata появится на обоих хостах pve1 и pve2
Каждое будет отображаться на своем хосте со своим физическим объемом (например pve1 320гб, а pve2 500гб)
создаем ВМ winxp (ID 100)
(ОБЯЗАТЕЛЬНО С РАСПОЛОЖЕНИЕМ ВИРТУАЛЬНЫХ ДИСКОВ НА ХРАНИЛИЩЕ zfsdata)
Настраиваем репликацию winxp с pve1 на pve2
Datacenter - pve1 - 100 (winxp) - Replication - Add
VM ID: 100 Target: pve2 Schedule: */30 # запускать инкрементальную репликацию каждые 30 минут Enabled: V
Для каждого виртуального диска, а также снэпшотов, будут создаваться отдельные Dataset на zfsdata
"zfsdata/subvol-101-disk-0" - это созданный на zfsdata контейнер, для него тоже настроим репликацию аналогичным образом
root@pve1:~# zfs list
... NAME USED AVAIL REFER MOUNTPOINT zfsdata 11.4G 277G 96K /zfsdata zfsdata/subvol-101-disk-0 289M 7.72G 289M /zfsdata/subvol-101-disk-0 zfsdata/vm-100-disk-0 9.33G 896G 1.04G - // основной диск winxp zfsdata/vm-100-state-test 1.83G 889G 298M - // первый и пока единственный снэпшот winxp ...
pve2
Теперь по расписанию будут синхрониться виртуальные диски виртуальной машины winxp на раздел zfsdata
Для каждого виртуального диска, а также снэпшотов, будут содаваться отдельные Dataset на zfsdata
root@pve2:~# zfs list
... NAME USED AVAIL REFER MOUNTPOINT zfsdata 11.4G 888G 96K /zfsdata zfsdata/subvol-101-disk-0 289M 7.72G 289M /zfsdata/subvol-101-disk-0 // ещё одна реплика с pve1 на pve2, только не ВМ, а контейнера zfsdata/vm-100-disk-0 9.33G 896G 1.04G - // основной диск winxp zfsdata/vm-100-state-test 1.83G 889G 298M - // первый и пока единственный снэпшот winxp ...
Настройки ВМ и контейнера на pve2 хранятся отдельно от дисков по следующим путям:
(их мы будем использовать для восстановления реплик при отказе основного хоста pve1)
/etc/pve/nodes/pve1/qemu-server/100.conf
/etc/pve/nodes/pve1/lxc/101.conf
Восстановление ВМ
pve2
При падении pve1 необходимо на pve2 выполнить команду переноса конфига
root@pve2:~# mv /etc/pve/nodes/pve1/qemu-server/100.conf /etc/pve/nodes/pve2/qemu-server/
Собственно, готово
Конфиг на pve2 подтянет реплику виртуального диска (это датасет-zfs-клон) на pve2
Машина 100 исчезнет в веб-интерфейсе на pve1 и появится на pve2, остается её запустить
Конфиги на pve1 и pve2 (при условии что они в кластере) в директории /etc/pve/nodes/pve{1,2} синхронятся
То есть если мы сделаем:
root@pve2:~# mv /etc/pve/nodes/pve1/qemu-server/100.conf /etc/pve/nodes/pve2/qemu-server/
на pve2, то на pve1 также конфиг появится в /etc/pve/nodes/pve2/qemu-server/100.conf
При этом в настройках репликации ВМ 100 мы увидим что Target поменялся с pve2 на pve1
То есть после восстановления ВМ 100, она начала реплицироваться обратно на pve1.
Если мы проведем обратные действия и восстановим ВМ 100 на pve1,
то она снова автоматически начнет реплицироваться на pve2