Proxmox. Репликация виртуальных машин и контейнеров: различия между версиями

Материал из Wiki
Перейти к навигации Перейти к поиску
(Новая страница: «Категория:Proxmox __ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__»)
 
 
Строка 1: Строка 1:
[[Категория:Proxmox]]
[[Категория: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 ===
<blockquote>Здесь будет машина-оригинал</blockquote>Создадим раздел 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 ===
<blockquote>Здесь будет машина-реплика</blockquote>Создадим раздел 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)<blockquote>(ОБЯЗАТЕЛЬНО С РАСПОЛОЖЕНИЕМ ВИРТУАЛЬНЫХ ДИСКОВ НА ХРАНИЛИЩЕ '''zfsdata''')</blockquote>Настраиваем репликацию 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 контейнер, для него тоже настроим репликацию аналогичным образом
<code>root@pve1:~# zfs list</code>
...
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
<code>root@pve2:~# zfs list</code>
...
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''' хранятся отдельно от дисков по следующим путям:<blockquote>(их мы будем использовать для восстановления реплик при отказе основного хоста pve1)</blockquote>
/etc/pve/nodes/pve1/qemu-server/100.conf
/etc/pve/nodes/pve1/lxc/101.conf
== Восстановление ВМ ==
=== pve2 ===
При падении '''pve1''' необходимо на '''pve2''' выполнить команду переноса конфига
<code>root@pve2:~# mv /etc/pve/nodes/pve1/qemu-server/100.conf /etc/pve/nodes/pve2/qemu-server/</code>
Собственно, готово
Конфиг на '''pve2''' подтянет реплику виртуального диска (это датасет-zfs-клон) на '''pve2'''
Машина '''100''' исчезнет в веб-интерфейсе на '''pve1''' и появится на '''pve2''', остается её запустить
Конфиги на '''pve1''' и '''pve2''' (при условии что они в кластере) в директории '''/etc/pve/nodes/pve{1,2}''' синхронятся
То есть если мы сделаем:
<code>root@pve2:~# mv /etc/pve/nodes/pve1/qemu-server/100.conf /etc/pve/nodes/pve2/qemu-server/</code>
на '''pve2''', то на '''pve1''' также конфиг появится в '''/etc/pve/nodes/pve2/qemu-server/100.conf'''
При этом в настройках репликации '''ВМ 100''' мы увидим что Target поменялся с '''pve2''' на '''pve1'''
То есть после восстановления '''ВМ 100''', она начала реплицироваться обратно на '''pve1'''.
Если мы проведем обратные действия и восстановим '''ВМ 100''' на '''pve1''',
то она снова автоматически начнет реплицироваться на '''pve2'''

Текущая версия на 23:40, 21 января 2022


Описание

Имеется

  • 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