Proxmox. Репликация виртуальных машин и контейнеров: различия между версиями
Cless (обсуждение | вклад) (Новая страница: «Категория:Proxmox __ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__») |
Cless (обсуждение | вклад) |
||
| Строка 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