Proxmox. Репликация виртуальных машин и контейнеров

Материал из Wiki
Версия от 23:40, 21 января 2022; Cless (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску


Описание

Имеется

  • 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