В предыдущей статье я описал какие проблемы возникают при создании кластера высокой доступности для хранилища использующего дисков в рейде.
Повторю исходные условия:
Имеем корзину с дисками (JBOD) по 5 Тб (4 диска).
Каждый диск имеет двойное проводное соединение с в двумя машинами, на которых устновлен Proxmox VE.
Таким образом мы имеем две системы (proxmox), в которых видны диски /dev/sda, /dev/sdb, /dev/sdc, /dev/sdd.
Нам нужно создать для этих дисков рейд10, чтобы при выходе одного из них не потерять данные, а просто по сообщению системы заменить сбойный диск.
Но ресурс полученный при объединеннии дисков в рейд должен быть доступен к каждому проксмоксу и в нем могут создаваться виртуальные машины, которые будут автоматически переезжать на уцелевший хост проксмокса при поломке одного из хостов.
Это и есть HA cluster.
Итак начнем.
Подготовим сначала основной диск, на котором установлен проксмокс. Это нужно сделать на обоих хостах.
Нужно сделать на основном диске отдельную партицию (первичный раздел). Размер этого раздела должен быть не меньше размер виртуальной машины для рейда + запас для разметки LVM. Минимальный размер , например Centos7.4 - 8 Gb. Поэтому если вы создатите раздел 10 - 15 Gb этого будет достаточно. Но это вы сами прикидывайте, т.к. если у вас машина с рейдом будет еще для чего-нибудь задействована, то может не хватить.
реть какой размер
И еще нужно убедиться, что при создании дополнительной партиции не пострадают данные в партиции где живет система проксмокса. Т.е. нужно посмотреть какой размер занимает сейчас проксмокс и оставлять ему этот размер с запасом.
Делается примерно так:
# fdisk /dev/sda
Command (m for help):d - удаляем последнюю партицию
Command (m for help):n - создаем новую партицию и указываем размер, который занимает проксмокс с запасом. А лучше это размер = прошлый размер последней партиции - размер создаваемой дополнительной партиции для виртуалки с рейдом (с запасом конечно).
Command (m for help): t - Указываете тип партиции Linux LVM
Command (m for help): n - создаем еще одну партицию теперь это уже для виртуалки
Command (m for help): t - Указываете тип партиции Linux LVM
Command (m for help): w - записываем изменения на диск.
Теперь у нас есть отдельный диск например /dev/sda4
Добавляем этот диск в LVM :
# pvcreate /dev/sda4
И добавляем группу drbd_pool . Фраза "drbd" должна быть обязательна для создания drbd пула.
# vgcreate drbd_pool /dev/sda4
Ну и гарантированно заполним предыдущий (обрезанный) раздел проксоксом:
# pvresize /dev/sde3
Создаем пул для хранилища drbd
# lvcreate --size 15G --name drbdthinpool --thin drbdpool
Если у вас не установлен специальный пакет для thin-provisioning, то ставим его и еще пакет для работы с drbd:
# apt-get install thin-provisioning-tools drbdmanage -y
Теперь настроим хранилище drbd на этих вновь добавленный раздел.
# drbdmanage init -q 192.168.1.1
# drbdmanage add-node -q proxmox2 192.168.1.2
# drbdmanage nodes
Здесь происходит инициализация drbd хранилища, добавление ноды второго проксмокса.
Естественно сеть между хостами проксмоксов должна быть уже настроена. Лучше иметь независимую прямую связь между хостами через отдельную сетевые карты на хостовых машинах.
Рассмотрим настройку конфигурации drbd хранилища.
После создания хранилища появляется файл /etc/drbd.d/drbdctrl.res
Добавляем в раздел net{ следующие строки:
allow-two-primaries yes;
after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;
after-sb-2pri disconnect;
После этого нужно убедиться, что раздел .drbdctl внутри drbd хранилища на обоих нодах являются primary. Если какая-то нода не является primary вы можете сделать ее такой :
# drbdadm primary .drbdctl
Не забудьте добавить drbd хранилище в конфигурацию проксмокса. Добавляем следующие строки в файл /etc/pve/storage.cfg:
drbd: drbd-hw
content rootdir,images
nodes hw1,hw2
Назвать этот ресурс можно назвать как угодно, проксмокс сам найдет нужный раздел в LVM, т.к. на одной машине он должен быть только один.
Особенности работы drbd в HA кластере расмотрим позже.
Во-первых создаем виртуальную машину на одном из проксмокс хостов.
Учтите что основной диск этой машины должен располагаться в drbd хранилище.
Добавляем в конец этого файла:
virtio1: /dev/disk/by-id/scsi-35000cca24d4f5394,backup=0,replicate=0,size=5860522584K
virtio2: /dev/disk/by-id/scsi-35000cca24d4f7534,backup=0,replicate=0,size=5860522584K
virtio3: /dev/disk/by-id/scsi-35000cca24d4f07c0,backup=0,replicate=0,size=5860522584K
virtio4: /dev/disk/by-id/scsi-35000cca24d4f08fc,backup=0,replicate=0,size=5860522584K
Обратите внимание здесь нужно прописывать именно UUID дисков. Их вы можете посмотреть в /dev/disk/by-uuid/
Это нужно чтобы когда диски будут использоваться на разных хостах проксмоксах они не перепутывались
backup=0 - означает, что проксмокс не будет складывать эти диски в бекап во время бекапирования.
replicate=0 - тоже самое касается репликации данных этих дисков между хранилищами данных о машинах.
Итак машина готова, ставим на нее любую удобную вам операционную систему.
НО! важный момент, когда будете устанавливать не используйте для разбивки диска LVM.
Это нужно чтобы системы LVM самих проксмокс хостов не конфликтовали с LVM системой машины.
Я поставил на машину Centos 7.4, поэтому дальше все описание будет для нее.
Делаем апдейд пакетов и ставим самые необходимые пакеты:
# yum update
# yum install mc mdadm targetcli
подготавливаем диски, они видны внутри виртуалки как /dev/vdb и т.д.:
# fdisk /dev/vdb
Command (m for help): n - создаем партицию.
указываем границы раздела, от первого блока до последнего чтобы использовать весь диск.
Далее не забываем:
Command (m for help): w - Записываем изменения на диск.
Партицию необходимо создавать, т.к. биосы некоторых материнских плат при загрузке могут подготавливать диски к работе и затирают разметку рейда, которая располагается в самом начале диска. Но если мы имеем таблицу разделов, то в нутри партиции (раздела) никогда ничего не произойдет.
Создаем рейд10:
# mdadm --create --verbose /dev/md0 --level=10 --raid-devices=4 /dev/vdb1 /dev/vdc1 /dev/vdd1 /dev/vde1
Теперь у нас есть один большой диск /dev/md0.
После этого рейд начинает синхронизировать блоки на диске и процесс можно наблюдать вот таким образом:
# cat /proc/mdstat
Далее запускаем targetcli и настраиваем iscsi-server
# targetcli
targetcli shell version 2.1.fb46
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
/>
Далее нужно настроить ресурс для выдачи в сеть одного iscsi диска.
Подробно процесс описывать не буду, т.к. в интернете полно подобных описаний.
В итоге мы должны получить примерно вот такое:
/> ls
o- / ......................................................................................................................... [...]
o- backstores .............................................................................................................. [...]
| o- block .................................................................................................. [Storage Objects: 1]
| | o- disk0 ........................................................................... [/dev/md0 (10.9TiB) write-thru activated]
| | o- alua ................................................................................................... [ALUA Groups: 1]
| | o- default_tg_pt_gp ....................................................................... [ALUA state: Active/optimized]
| o- fileio ................................................................................................. [Storage Objects: 0]
| o- pscsi .................................................................................................. [Storage Objects: 0]
| o- ramdisk ................................................................................................ [Storage Objects: 0]
o- iscsi ............................................................................................................ [Targets: 1]
| o- iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.87fd8bccd4d6 ....................................................... [TPGs: 1]
| o- tpg1 .................................................................................................. [gen-acls, no-auth]
| o- acls .......................................................................................................... [ACLs: 2]
| | o- iqn.1993-08.org.debian:01:952561107f8e ............................................................... [Mapped LUNs: 1]
| | | o- mapped_lun0 ................................................................................. [lun0 block/disk0 (rw)]
| | o- iqn.1993-08.org.debian:01:bb376e9bb6b ................................................................ [Mapped LUNs: 1]
| | o- mapped_lun0 ................................................................................. [lun0 block/disk0 (rw)]
| o- luns .......................................................................................................... [LUNs: 1]
| | o- lun0 ...................................................................... [block/disk0 (/dev/md0) (default_tg_pt_gp)]
| o- portals .................................................................................................... [Portals: 1]
| o- 0.0.0.0:3260 ..................................................................................................... [OK]
o- loopback ......................................................................................................... [Targets: 0]
/>
Здесь мы видим, что iscsi сервер берет локальный (для виртуалки это локальный) диск /dev/md0 и выдает его в кчестве ресурса iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.87fd8bccd4d6
Также мы видим, что к этому ресурсу разрешено подключаться машинам с идентификаторами:
iqn.1993-08.org.debian:01:952561107f8e и iqn.1993-08.org.debian:01:bb376e9bb6b
И что сервер работает на порту 3260, поэтому нужно открыть этот порт в файерволле.
# firewall-cmd --permanent --add-port=3260/tcp
# firewall-cmd --reload
И запускаем службу iscsi сервера:
# systemctl enable target
# systemctl start target
Теперь заходим в веб интерфейс проксомкса и во вкладке Datacenter -> Storage и добавляем там ISCSI ресурс.
ID - Любое имя для ресурса
Portal - Сетевое имя или IP адрес Iscsi сервера. В данном случае это адрес нашей виртуалки с рейдом.
Taget - Это адрес сетевого ресурса. В нашем случае: iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.87fd8bccd4d6
Nodes - здесь нужно указать имена только тех проксмокс хостов к которым будет подключен ресурс.
После подключения этого ресурса на хосте появляется еще один диск типа /dev/sdf
Теперь добавляем диск /dev/sdf в физические диски в LVM :
# pvcreate /dev/sdf
Далее создаем группу LVM :
# vgcreate raid10_vg /dev/sdf
Теперь в веб-интерфейсе добавляем эту группу в хранилище. Это нужно делать через конфигурацию проксмокса.
Открываем файл /etc/pve/storage.cfg и добавляем:
lvm: raid10_vg
vgname raid10_vg
content rootdir,images
nodes proxmox1, proxmox2
shared 1
Это нужно делать именно так, потому что через вебинтерфейс можно добавить только lvm группу pve, которую проксмокс создает автоматически.
Заметьте shared = 1 это обязательно, т.к. оба хоста должны видеть изменения в группе.
В веб-интерфейсе проксмокса настройка HA кластера делается весьма просто на вкладке Datacenter -> HA.
Сначала во вкладке Groups создаем группу и добавляем в нее оба хоста проксмокса
Затем переходим в основную вкладку HA и добавляем машину с рейдом и все машины у которых диски находятся на этом рейде.
Теперь рассмотрим особенности работы HA кластера с drbd и виртуальными машинами.
Проксмокс может менять статус drbd ресурсов, которые создавал сам проксмокс.
Дело в том что диск типа raw на которых живут виртуальные машины это всего лишь LVM раздел который создал проксмокс. Когда он создает такой раздел в drbd пуле , он устанавливает статус primary для этого раздела на том хосте, на котором в данный момент располагается и работает виртуальная машина этого раздела.
Но вот специальный раздел .drbdctl не изменяется проксмоксом, поэтому в момент когда один из хостов проксмокса выходи из строя, то на втором ничего не меняется в специальном разделе drbd. Если на оставшемся в живих хосте работает primary спец раздел drbd, то перезд и запуск всех машин в HA кластере проходит нормально. Но если этот хост оказался с secondary спецразделом, то машиные переезжают на живой хост и не запускаются, т.к. доступ к дискам заблокирован самим drbd. То есть secondary нода drbd ждет появления primary ноды и не дает работать с хранилищем.
Поэтому нужно следить затем чтобы на обоих нодах drbd спецраздел должен быть primary.
Вторая особенность работы HA кластера это восстановление нормальной работы после восстановления упавшего проксмокс хоста.
После того как все ноды drbd увидят друг друга,скорее всего проксмокс вообще заблокирует все созданные им ресурсы на упавшем хосте. Это выглядит как переименование файла ресурса в папке /var/lib/drbd.d/ во что-то типа raid10-iscsi-disk-1.res.old
Нужно привести имя файла к типу *.res и перегрузить drbd систему. И делается это не тривиальным способом, а именно нужно перегрузить сервис dbus:
# systemctl restart dbus
после этого ресурс появится в стаусе drbd, но будет помечен как StandAlone, это означает, что он не синхронизован с текущей актуальной версией данных на этом ресурсе.
Спецраздел .drbdctl на упавшем и восстановленном хосте скорее всего будет secondary и его можно легко перевести в состояние primary, но перед этим стоит синхронизовать все созданные проксомоксом ресурсы, чтобы данные были актуальные и чтобы не потерять наработок, которые произошли во время восстановления хоста.
Для этого сделаем следующие манипуляцие с разделом (в данном случае это раздел машины с рейдом).
На восстановленном хосте пишем:
# drbdadm disconnect raid10-iscsi-disk-1
# drbdadm connect raid10-iscsi-disk-1 --discard-my-data
на уцелевшем хосте нужно просто отцепить и опять прицепить этот ресурс:
# drbdadm disconnect raid10-iscsi-disk-1
# drbdadm connect raid10-iscsi-disk-1
НО! проследите чтобы пока данные не синхронизовались уцелевший хост должен иметь primary статус в разделе машины, а восстановленный secondary.
Хотя автоматически это и так проставляется при появлении ноды в кластере.
И последняя особенность HA кластера проксмокса - в нем нельзя специально проставить время задержки запуска машины при восстановлении ее на уцелевшем хосте проксмокса.
То есть при падении одного из хостов, через минуту HA кластер просто запускает все машины которые находятся в той группе в которой находятся и хосты проксмокса сразу безо всяких задержек.
А нам в данной ситуации важно запускать машины, которые живут в рейде на пару минут позже чем запуск самой машине с рейдом.
Но эту ситуацию можно исправить установив количество перезапусков при неудачном пуске 5 -6 раз, тогда проксмокс будет пытаться запустить машины живущие на рейде несколько раз пока запускается машина в с рейдом. Несколько не приятная ситуация, но в принципе рабочая.
Но как вы успели заметить обладает рядом недостатков.
Кроме всего перечисленного нужно еще убедиться, что скорость работы данного хранилища будет удовлетворять требованиям тех машин и сервисов, которые будут использовать данное хранилище.
Повторю исходные условия:
Имеем корзину с дисками (JBOD) по 5 Тб (4 диска).
Каждый диск имеет двойное проводное соединение с в двумя машинами, на которых устновлен Proxmox VE.
Таким образом мы имеем две системы (proxmox), в которых видны диски /dev/sda, /dev/sdb, /dev/sdc, /dev/sdd.
Нам нужно создать для этих дисков рейд10, чтобы при выходе одного из них не потерять данные, а просто по сообщению системы заменить сбойный диск.
Но ресурс полученный при объединеннии дисков в рейд должен быть доступен к каждому проксмоксу и в нем могут создаваться виртуальные машины, которые будут автоматически переезжать на уцелевший хост проксмокса при поломке одного из хостов.
Это и есть HA cluster.
Итак начнем.
Подготовка хостов с проксмоксом.
Подготовим сначала основной диск, на котором установлен проксмокс. Это нужно сделать на обоих хостах.
Нужно сделать на основном диске отдельную партицию (первичный раздел). Размер этого раздела должен быть не меньше размер виртуальной машины для рейда + запас для разметки LVM. Минимальный размер , например Centos7.4 - 8 Gb. Поэтому если вы создатите раздел 10 - 15 Gb этого будет достаточно. Но это вы сами прикидывайте, т.к. если у вас машина с рейдом будет еще для чего-нибудь задействована, то может не хватить.
реть какой размер
И еще нужно убедиться, что при создании дополнительной партиции не пострадают данные в партиции где живет система проксмокса. Т.е. нужно посмотреть какой размер занимает сейчас проксмокс и оставлять ему этот размер с запасом.
Делается примерно так:
# fdisk /dev/sda
Command (m for help):d - удаляем последнюю партицию
Command (m for help):n - создаем новую партицию и указываем размер, который занимает проксмокс с запасом. А лучше это размер = прошлый размер последней партиции - размер создаваемой дополнительной партиции для виртуалки с рейдом (с запасом конечно).
Command (m for help): t - Указываете тип партиции Linux LVM
Command (m for help): n - создаем еще одну партицию теперь это уже для виртуалки
Command (m for help): t - Указываете тип партиции Linux LVM
Command (m for help): w - записываем изменения на диск.
Теперь у нас есть отдельный диск например /dev/sda4
Добавляем этот диск в LVM :
# pvcreate /dev/sda4
И добавляем группу drbd_pool . Фраза "drbd" должна быть обязательна для создания drbd пула.
# vgcreate drbd_pool /dev/sda4
Ну и гарантированно заполним предыдущий (обрезанный) раздел проксоксом:
# pvresize /dev/sde3
DRBD
Создаем пул для хранилища drbd
# lvcreate --size 15G --name drbdthinpool --thin drbdpool
Если у вас не установлен специальный пакет для thin-provisioning, то ставим его и еще пакет для работы с drbd:
# apt-get install thin-provisioning-tools drbdmanage -y
Теперь настроим хранилище drbd на этих вновь добавленный раздел.
# drbdmanage init -q 192.168.1.1
# drbdmanage add-node -q proxmox2 192.168.1.2
# drbdmanage nodes
Здесь происходит инициализация drbd хранилища, добавление ноды второго проксмокса.
Естественно сеть между хостами проксмоксов должна быть уже настроена. Лучше иметь независимую прямую связь между хостами через отдельную сетевые карты на хостовых машинах.
Рассмотрим настройку конфигурации drbd хранилища.
После создания хранилища появляется файл /etc/drbd.d/drbdctrl.res
Добавляем в раздел net{ следующие строки:
allow-two-primaries yes;
after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;
after-sb-2pri disconnect;
После этого нужно убедиться, что раздел .drbdctl внутри drbd хранилища на обоих нодах являются primary. Если какая-то нода не является primary вы можете сделать ее такой :
# drbdadm primary .drbdctl
Не забудьте добавить drbd хранилище в конфигурацию проксмокса. Добавляем следующие строки в файл /etc/pve/storage.cfg:
drbd: drbd-hw
content rootdir,images
nodes hw1,hw2
Назвать этот ресурс можно назвать как угодно, проксмокс сам найдет нужный раздел в LVM, т.к. на одной машине он должен быть только один.
Особенности работы drbd в HA кластере расмотрим позже.
RAID10
Во-первых создаем виртуальную машину на одном из проксмокс хостов.
Учтите что основной диск этой машины должен располагаться в drbd хранилище.
Прокидываем в машину диски. Это делается через конфиги виртуальной машины.
После того как вы создали машину, то в папке /etc/pve/qemu-server/ появляется файл типа 100.conf.Добавляем в конец этого файла:
virtio1: /dev/disk/by-id/scsi-35000cca24d4f5394,backup=0,replicate=0,size=5860522584K
virtio2: /dev/disk/by-id/scsi-35000cca24d4f7534,backup=0,replicate=0,size=5860522584K
virtio3: /dev/disk/by-id/scsi-35000cca24d4f07c0,backup=0,replicate=0,size=5860522584K
virtio4: /dev/disk/by-id/scsi-35000cca24d4f08fc,backup=0,replicate=0,size=5860522584K
Обратите внимание здесь нужно прописывать именно UUID дисков. Их вы можете посмотреть в /dev/disk/by-uuid/
Это нужно чтобы когда диски будут использоваться на разных хостах проксмоксах они не перепутывались
backup=0 - означает, что проксмокс не будет складывать эти диски в бекап во время бекапирования.
replicate=0 - тоже самое касается репликации данных этих дисков между хранилищами данных о машинах.
Итак машина готова, ставим на нее любую удобную вам операционную систему.
НО! важный момент, когда будете устанавливать не используйте для разбивки диска LVM.
Это нужно чтобы системы LVM самих проксмокс хостов не конфликтовали с LVM системой машины.
Я поставил на машину Centos 7.4, поэтому дальше все описание будет для нее.
Делаем апдейд пакетов и ставим самые необходимые пакеты:
# yum update
# yum install mc mdadm targetcli
подготавливаем диски, они видны внутри виртуалки как /dev/vdb и т.д.:
# fdisk /dev/vdb
Command (m for help): n - создаем партицию.
указываем границы раздела, от первого блока до последнего чтобы использовать весь диск.
Далее не забываем:
Command (m for help): w - Записываем изменения на диск.
Партицию необходимо создавать, т.к. биосы некоторых материнских плат при загрузке могут подготавливать диски к работе и затирают разметку рейда, которая располагается в самом начале диска. Но если мы имеем таблицу разделов, то в нутри партиции (раздела) никогда ничего не произойдет.
Создаем рейд10:
# mdadm --create --verbose /dev/md0 --level=10 --raid-devices=4 /dev/vdb1 /dev/vdc1 /dev/vdd1 /dev/vde1
Теперь у нас есть один большой диск /dev/md0.
После этого рейд начинает синхронизировать блоки на диске и процесс можно наблюдать вот таким образом:
# cat /proc/mdstat
Далее запускаем targetcli и настраиваем iscsi-server
# targetcli
targetcli shell version 2.1.fb46
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
/>
Далее нужно настроить ресурс для выдачи в сеть одного iscsi диска.
Подробно процесс описывать не буду, т.к. в интернете полно подобных описаний.
В итоге мы должны получить примерно вот такое:
/> ls
o- / ......................................................................................................................... [...]
o- backstores .............................................................................................................. [...]
| o- block .................................................................................................. [Storage Objects: 1]
| | o- disk0 ........................................................................... [/dev/md0 (10.9TiB) write-thru activated]
| | o- alua ................................................................................................... [ALUA Groups: 1]
| | o- default_tg_pt_gp ....................................................................... [ALUA state: Active/optimized]
| o- fileio ................................................................................................. [Storage Objects: 0]
| o- pscsi .................................................................................................. [Storage Objects: 0]
| o- ramdisk ................................................................................................ [Storage Objects: 0]
o- iscsi ............................................................................................................ [Targets: 1]
| o- iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.87fd8bccd4d6 ....................................................... [TPGs: 1]
| o- tpg1 .................................................................................................. [gen-acls, no-auth]
| o- acls .......................................................................................................... [ACLs: 2]
| | o- iqn.1993-08.org.debian:01:952561107f8e ............................................................... [Mapped LUNs: 1]
| | | o- mapped_lun0 ................................................................................. [lun0 block/disk0 (rw)]
| | o- iqn.1993-08.org.debian:01:bb376e9bb6b ................................................................ [Mapped LUNs: 1]
| | o- mapped_lun0 ................................................................................. [lun0 block/disk0 (rw)]
| o- luns .......................................................................................................... [LUNs: 1]
| | o- lun0 ...................................................................... [block/disk0 (/dev/md0) (default_tg_pt_gp)]
| o- portals .................................................................................................... [Portals: 1]
| o- 0.0.0.0:3260 ..................................................................................................... [OK]
o- loopback ......................................................................................................... [Targets: 0]
/>
Здесь мы видим, что iscsi сервер берет локальный (для виртуалки это локальный) диск /dev/md0 и выдает его в кчестве ресурса iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.87fd8bccd4d6
Также мы видим, что к этому ресурсу разрешено подключаться машинам с идентификаторами:
iqn.1993-08.org.debian:01:952561107f8e и iqn.1993-08.org.debian:01:bb376e9bb6b
И что сервер работает на порту 3260, поэтому нужно открыть этот порт в файерволле.
# firewall-cmd --permanent --add-port=3260/tcp
# firewall-cmd --reload
И запускаем службу iscsi сервера:
# systemctl enable target
# systemctl start target
Теперь заходим в веб интерфейс проксомкса и во вкладке Datacenter -> Storage и добавляем там ISCSI ресурс.
ID - Любое имя для ресурса
Portal - Сетевое имя или IP адрес Iscsi сервера. В данном случае это адрес нашей виртуалки с рейдом.
Taget - Это адрес сетевого ресурса. В нашем случае: iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.87fd8bccd4d6
Nodes - здесь нужно указать имена только тех проксмокс хостов к которым будет подключен ресурс.
После подключения этого ресурса на хосте появляется еще один диск типа /dev/sdf
Теперь добавляем диск /dev/sdf в физические диски в LVM :
# pvcreate /dev/sdf
Далее создаем группу LVM :
# vgcreate raid10_vg /dev/sdf
Теперь в веб-интерфейсе добавляем эту группу в хранилище. Это нужно делать через конфигурацию проксмокса.
Открываем файл /etc/pve/storage.cfg и добавляем:
lvm: raid10_vg
vgname raid10_vg
content rootdir,images
nodes proxmox1, proxmox2
shared 1
Это нужно делать именно так, потому что через вебинтерфейс можно добавить только lvm группу pve, которую проксмокс создает автоматически.
Заметьте shared = 1 это обязательно, т.к. оба хоста должны видеть изменения в группе.
HA Cluster
Теперь рассмотрим как настроить кластер высокой доступности.В веб-интерфейсе проксмокса настройка HA кластера делается весьма просто на вкладке Datacenter -> HA.
Сначала во вкладке Groups создаем группу и добавляем в нее оба хоста проксмокса
Затем переходим в основную вкладку HA и добавляем машину с рейдом и все машины у которых диски находятся на этом рейде.
Теперь рассмотрим особенности работы HA кластера с drbd и виртуальными машинами.
Проксмокс может менять статус drbd ресурсов, которые создавал сам проксмокс.
Дело в том что диск типа raw на которых живут виртуальные машины это всего лишь LVM раздел который создал проксмокс. Когда он создает такой раздел в drbd пуле , он устанавливает статус primary для этого раздела на том хосте, на котором в данный момент располагается и работает виртуальная машина этого раздела.
Но вот специальный раздел .drbdctl не изменяется проксмоксом, поэтому в момент когда один из хостов проксмокса выходи из строя, то на втором ничего не меняется в специальном разделе drbd. Если на оставшемся в живих хосте работает primary спец раздел drbd, то перезд и запуск всех машин в HA кластере проходит нормально. Но если этот хост оказался с secondary спецразделом, то машиные переезжают на живой хост и не запускаются, т.к. доступ к дискам заблокирован самим drbd. То есть secondary нода drbd ждет появления primary ноды и не дает работать с хранилищем.
Поэтому нужно следить затем чтобы на обоих нодах drbd спецраздел должен быть primary.
Вторая особенность работы HA кластера это восстановление нормальной работы после восстановления упавшего проксмокс хоста.
После того как все ноды drbd увидят друг друга,скорее всего проксмокс вообще заблокирует все созданные им ресурсы на упавшем хосте. Это выглядит как переименование файла ресурса в папке /var/lib/drbd.d/ во что-то типа raid10-iscsi-disk-1.res.old
Нужно привести имя файла к типу *.res и перегрузить drbd систему. И делается это не тривиальным способом, а именно нужно перегрузить сервис dbus:
# systemctl restart dbus
после этого ресурс появится в стаусе drbd, но будет помечен как StandAlone, это означает, что он не синхронизован с текущей актуальной версией данных на этом ресурсе.
Спецраздел .drbdctl на упавшем и восстановленном хосте скорее всего будет secondary и его можно легко перевести в состояние primary, но перед этим стоит синхронизовать все созданные проксомоксом ресурсы, чтобы данные были актуальные и чтобы не потерять наработок, которые произошли во время восстановления хоста.
Для этого сделаем следующие манипуляцие с разделом (в данном случае это раздел машины с рейдом).
На восстановленном хосте пишем:
# drbdadm disconnect raid10-iscsi-disk-1
# drbdadm connect raid10-iscsi-disk-1 --discard-my-data
на уцелевшем хосте нужно просто отцепить и опять прицепить этот ресурс:
# drbdadm disconnect raid10-iscsi-disk-1
# drbdadm connect raid10-iscsi-disk-1
НО! проследите чтобы пока данные не синхронизовались уцелевший хост должен иметь primary статус в разделе машины, а восстановленный secondary.
Хотя автоматически это и так проставляется при появлении ноды в кластере.
И последняя особенность HA кластера проксмокса - в нем нельзя специально проставить время задержки запуска машины при восстановлении ее на уцелевшем хосте проксмокса.
То есть при падении одного из хостов, через минуту HA кластер просто запускает все машины которые находятся в той группе в которой находятся и хосты проксмокса сразу безо всяких задержек.
А нам в данной ситуации важно запускать машины, которые живут в рейде на пару минут позже чем запуск самой машине с рейдом.
Но эту ситуацию можно исправить установив количество перезапусков при неудачном пуске 5 -6 раз, тогда проксмокс будет пытаться запустить машины живущие на рейде несколько раз пока запускается машина в с рейдом. Несколько не приятная ситуация, но в принципе рабочая.
Вывод:
Таким образом если мы обладаем не большим бюджетом для закупки хорошего хардверного хранилища, которое само обеспечит желехный рейд на дисках и выдачу по нескольким каналам сетевого хранилища, то мы может обойтись обычной корзиной дисков. Это значительно дешевле.Но как вы успели заметить обладает рядом недостатков.
Кроме всего перечисленного нужно еще убедиться, что скорость работы данного хранилища будет удовлетворять требованиям тех машин и сервисов, которые будут использовать данное хранилище.

Комментариев нет:
Отправить комментарий