четверг, 18 сентября 2014 г.

Подключение жёстких дисков из одного Xen-сервера на другой

Вводная: Есть два однотипных сервера. На обоих установлен XenServer 6.2. Сервера не в пуле. В качестве сторейджов используется локальное хранилище (HDD установленные в сам сервер). После смерти одного из серверов, необходимо поднять работу виртуальных серверов на работающем.

Решение: 

1. Корректно гасим рабочий.

2. Берём жёсткие диски из умершего сервера и вставляем в рабочий (в данной статье не рассматривается вопрос рейда, если он у вас есть, то обязательно проверьте, что он корректно определился). Включаем сервер. 

3. После загрузки системы проверяем, что диск подключился
fdisk -l

4. Далее вводим команду
pvdisplay

5. Смотрим на поле VG Name — VG_XenStorage-12660091-343d-2107-5dea-bb021055c07c
(Нам нужна подстрока после «VG_XenStorage-» у вас будет ДРУГОЙ UUID)

xe sr-introduce uuid=12660091-343d-2107-5dea-bb021055c07c type=lvm name-label="Local storage REPAIR" content-type=user

Выйдет uuid подключенного сторейджа — 12660091-343d-2107-5dea-bb021055c07c. Обычно он равен номеру VG Name, но не всегда. Лучше проверить.

6. ll -l /dev/disk/by-id

Выйдет список дисков. Нам нужен третий (первый сам ксен, второй его резервная копия — третий диск с нужными нам образами)

7.  xe host-list
запоминаем UUID

8. xe pbd-create host-uuid=f53d07d5-335a-434b-93ff-1a66faec9c7a sr-uuid=12660091-343d-2107-5dea-bb021055c07c device-config:device=/dev/disk/by-id/scsi-360050760580b2b901ba7bdcb10981ed2-part3

Выйдет UUID - 45593530-bbae-c903-12e4-96bda77bc514

9. xe pbd-plug uuid=45593530-bbae-c903-12e4-96bda77bc514

10. Проверяем, что сторейдж корректно подключился и у него в списке есть диски виртуальных машин.


Можно переходить к созданию виртуальных машин и после создания сделать Attach к образам.

PS: В результате скорость восстановления работоспособности существенно возрастает. По сути теперь она равна скорости 1. Выключить 2. Переставить диски. 3. Загрузиться. 4. Прописать сторейдж и виртуалки. На тестах у нас уходило по 7-9 минут до загрузки (но надо учитывать, что это спокойная обстановка тестирования, плюс я был возле сервера).

PS2: Данная инструкция больше вредна чем полезна, так как делается всё не совсем корректно с точки зрения архитектуры. И надо точно понимать, что вы делаете. Более правильным был бы подход с установкой дисковой полки и настройки high availability-cluster. Тогда бы он делал это всё автоматически. Но пару моментов -
а) Дисковой полки не было
б) В случае использовании дисковой полки нужно ставить их парой в зеркале, что удорожает существенно, иначе выход из строя полки убивает нам всю работу (плюс считаем цену на нормальные FC-коммутаторы и сетевые) 
в) есть варианты с использованием DRBD, но при тестах скорость работы и дисковых операций падали ОЧЕНЬ существенно

PS3: Надо не забывать, что на обоих серверах нужно оставлять некоторое количество памяти и пространства в сторейджах для создания виртуальных машин после переноса. И если память вы сможете переопределить (при выключенных виртуалках), то с пространством на жёстких всё несколько сложнее и дольше.

PS4: Вообще (если у вас ни какой-нибудь хитрый рейд) можно подключить диски "на горячую" (к примеру через rescan-scsi-bus.sh или что-то подобное). И далее идти с первого пункта. Что сэкономит нам некоторое количество времени на выключение-включение.

PS5: Есть мнение, что если у вас есть только два сервера, то можно проделать данные операции ДО возникновения проблем на каждом сервере, и затем просто игнорировать варнинги в логе о "неподключающемся" сторейдже. И в случае проблем, надо будет просто "выключить, переставить диски, включить". Но я данный вопрос не тестировал.