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

от автора

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" 

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

ссылка на оригинал статьи http://habrahabr.ru/post/179825/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *