Установка Citrix XenServer на програмный RAID

в 1:47, , рубрики: citrix xenserver, raid, storage, виртуализация, установка, метки: , , , ,

Citrix Xen Server при том что основан на дистрибутиве Linux в процессе установки не позволяет управлять размерами разделов и конфигурацией жестких дисков под устанавливаемую систему. По умолчанию при установке он спрашивает только диск на который требуется установка с автоматической разметкой дискового пространства под свои нужды. В процессе установки на выбранном диске создается 3 primary раздела. Два по 4Гб и один на все оставшееся место. (Кстати, может кто подскажет, для чего нужен второй раздел на 4Гб? Предполагаю, что на случай обновлений, восстановлений системы там лежит копия первого раздела с установленной системой, но точной информации не нашел.)

Столкнувшись с необходимостью поднять Xen Server на трех дисках задумался об обеспечении хоть какой то сохранности данных. Итак схема итогового массива примет следующий вид:
Схема массива на трех дисках
Далее как это реализуется.

Установка системы.

Для начала ставим систему на первый диск. Установку проходить по шагам не будем, потому как материалов об этом хватает в сети более чем. Единственно хочу отметить что при установке надо отказаться от подключения хранилища виртуальных машин. Для этого
экран Virtual Machine Storage
на экране Virtual Machine Storage надо в первой строке снять галочку. Хранилище подключим после создания массива. А если создать его сейчас огребем лишнюю головную боль по последующему его переносу.

Конфигурация массива.

Создание разделов на втором и третьем диске.

После установки системы и загрузки переходим в консоль и начинаем создавать массив. Для начала теория. Мы на работающей системе сидим на первом диске. Создаем битый массив на двух оставшихся дисках. Делаем копию работающей системы на созданном массиве. Перезагружаемся с битого массива. Подключаем изначальный диск к массиву и ждем восстановления целостности массива. После этого создаем хранилище для виртуальных машин. И так, приступим.
Загрузившись в систему смотрим структуру диска созданного установщиком.

sgdisk -p /dev/sda

Вывод будет представлять что то подобное:

Disk /dev/sda: 5860533168 sectors, 2.7 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): 77D7DEB8-2759-490F-9BA9-7269A5F9247C
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 5860533134
Partitions will be aligned on 2048-sector boundaries
Total free space is 6042 sectors (3.0 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         8388641   4.0 GiB     0700  
   2         8390656        16777249   4.0 GiB     0700
   3        16779264      5860533134   2.7 TiB     8E00

Нам важны цифры стартового и конечного секторов.

Стираем таблицу разделов на втором и третьем диске:

sgdisk --zap-all /dev/sdb
sgdisk --zap-all /dev/sdc

Устанавливаем туда GPT таблицу разделов:

sgdisk --mbrtogpt --clear /dev/sdb
sgdisk --mbrtogpt --clear /dev/sdc

Создаём таблицу разделов, идентичную таблице первого диска (внимание на цифры, ставим идентичные для соответствующего раздела на исходном диске с установленной системой):

sgdisk --new=1:2048:8388641 /dev/sdb
sgdisk --new=2:8390656:16777249 /dev/sdb
sgdisk --new=3:16779264:5860533134 /dev/sdb

sgdisk --new=2:8390656:16777249 /dev/sdc
sgdisk --new=1:2048:8388641 /dev/sdc
sgdisk --new=3:16779264:5860533134 /dev/sdc

А вот идентификаторы разделов надо заменить. Я делал идентичные исходному диску и убил много время на фикс проблемы что система не хотела запускаться с массива. fd00 идентификатор раздела с raid

sgdisk --typecode=1:fd00 /dev/sdb
sgdisk --typecode=2:fd00 /dev/sdb
sgdisk --typecode=3:fd00 /dev/sdb

sgdisk --typecode=1:fd00 /dev/sdc
sgdisk --typecode=2:fd00 /dev/sdc
sgdisk --typecode=3:fd00 /dev/sdc

Ставим флаги загрузочного раздела

sgdisk /dev/sda --attributes=1:set:2
sgdisk /dev/sdb --attributes=1:set:2
sgdisk /dev/sdc --attributes=1:set:2
Создание raid массивов.

mdadm --stop /dev/md0
mknod /dev/md0 b 9 0
mknod /dev/md1 b 9 1
mknod /dev/md2 b 9 2
mdadm --create /dev/md0 --level=1 --raid-devices=3 missing /dev/sdb1 /dev/sdc1
mdadm --create /dev/md1 --level=1 --raid-devices=3 missing /dev/sdb2 /dev/sdc2
mdadm --create /dev/md2 --level=5 --raid-devices=3 missing /dev/sdb3 /dev/sdc3
mdadm --grow /dev/md0 -b internal
mdadm --grow /dev/md1 -b internal
mdadm --grow /dev/md2 -b internal

В данном случае особое внимание уделю только строкам mdadm --create. Как можно догадаться --level тип массива. На первых двух разделах создаем зеркало. Третьи разделы объединяем в RAID 5. --raid-devices кол-во устройств входящих в массив. missing означает массив в деградированном состоянии и в конце разделы входящие в массив через пробел. Естественно два из трех. Разделы на диске sda добавим в массив после.

Копируем рабочую систему на созданный массив.

Создаем и монтируем файловую систему.

mkfs.ext3 /dev/md0
mount /dev/md0 /mnt 

Копируем.

cp -vxpR / /mnt 

Заменяем в файле /mnt/etc/fstab имя корня файловой системы на /dev/md0. Просто отредактируйте конфигурационный файл.

Копируем загрузчик на второй и третий диск.

mount --bind /dev /mnt/dev
mount -t sysfs none /mnt/sys
mount -t proc none /mnt/proc
chroot /mnt
/sbin/extlinux --raid --install /boot
exit
dd if=/mnt/usr/share/syslinux/gptmbr.bin of=/dev/sdb
dd if=/mnt/usr/share/syslinux/gptmbr.bin of=/dev/sdс

Генерируем новый образ системы.

chroot /mnt
mkinitrd -v -f --theme=/usr/share/splash --without-multipath /boot/initrd-`uname -r`.img `uname -r`
exit

Исправляем конфиг загрузки. Для этого открываем в текстовом редакторе файл /mnt/boot/extlinux.conf и заменяем (root=LABEL=xxx) на root=/dev/md0.

От монтируем все разделы подключенные ранее и перезагружаем систему. Загружаемся теперь не с первого диска, а с любого другого входящего в битый массив.

Добавление первого диска в массив.

Меняем тип разделов и добавляем разделы первого диска к нашему массиву.

sgdisk --typecode=1:fd00 /dev/sda1
sgdisk --typecode=2:fd00 /dev/sda2
sgdisk --typecode=3:fd00 /dev/sda3
mdadm -a /dev/md0 /dev/sda1
mdadm -a /dev/md1 /dev/sda2
mdadm -a /dev/md2 /dev/sda3

После этого автоматически запустится ребилд массива. В зависимости от объема дисков может занять довольно продолжительное время. Наблюдать за состоянием и временем до окончания можно просматривая файл /proc/mdstat Для постоянного мониторинга:

watch -n 1 cat /proc/mdstat 

Можно попробовать увеличить скорость ребилда. Гугл вдает много страниц на эту тему. Глубоко не копаясь по этой статье я просто увеличил величину stripe_cache_size и успокоился.

Создание хранилища данных.

Собственно одной командой на устройстве /dev/md2 создается хранилище.

xe sr-create content-type=user type=lvm device-config:device=/dev/md2 shared=false name-label="Local storage"

Все. Система готова к использованию. В итоге мы имеем систему поверх программного массива, не привязанное к конкретному аппаратному контроллеру. Массив можно переместить в другой сервер и быстро поднять работающую систему. Думаю надо будет прописать только новые сетевые карты в системе. Надеюсь тем кто дочитал до конца пригодится подобное руководство.

Автор: Lector15

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js