Pull to refresh

Xenserver 6.2 установка на soft raid vs HP ProLiant DL160 Gen8

Reading time9 min
Views11K
Доброго времени суток.
Хотелось бы рассказать Вам свою историю поднятия Xen`а на HP ProLiant DL160 Gen8. Как оказалось, лень подробно изучать спецификацию железа которое ты закупаешь и загодя проверять совместимость с планируемым софтом — сыграли со мной довольно злую шутку. При заказе железа, я глянул на характеристики сервера убедился что raid контроллер в нем присутствует, увы как оказалось сервер оборудован RAID-контроллером Smart Array B120i SATA, который по сути своей является софтовым и нативно не поддерживается и не видится инсталлятором Xen. Эта статья о том как сделать все максимально грамотно оказавшись в подобной ситуации.



Небольшое отступление, для экономии времени можно пропустить.
Несколько лет использую для работы такую замечательную вещь как XCP 1.6, крутится на 3х физических хостах около 16 серверов, и около десятка тестовых машин для программистов и админов.Начальство вняло мольбам и соблаговолило закупить еще несколько железячек. Среди них — было и два HP DL160 gen 8. Естественно на них тоже будут подняты хосты для виртуальных машин. К моему великому сожалению XCP остановился на версии 1.6. зато XEN 6.2 стал абсолютно «бесплатным». Значит ставить будем его. Качаем образ, проверяем контрольную сумму, перекачиваем образ опять проверяем контрольную сумму, плюем на все закидываем на закачку не фтп а торрент и в нем перекачиваем все полностью. Записываем образ на флешку. Настраиваем на сервере рейд, устанавливаем загрузку с рейд контроллера, и единоразовую загрузку с флешки. Начинается установка и вот они первые трудности — инссталятор видит диски по рознь, а не как единый рейд массив. Гуглим, бьем в бубен, меняем виды рейда, результат тот же. Гугл говорит о том что вроде как на сайте Citrix есть дрова под этот рейд контроллер для Centos`а, скачиваем дистриб Centos 7, пытаемся скормить ему дрова — рейд по прежнему не видится. Находим статью о том как из консоли во время инсталляции Centos создавать софт рейды. Переделываем статью под себя ставим, и сталкиваемся с новой проблемой, Centos 7 это круто, даже слишком круто для нашего ксена. В общем дальнейшее гугление и несколько дней практического шаманства и родили вот эту статью.


Итак у нас есть следующие исходные данные:
HP ProLiant DL160 Gen 8
4 жестких диска по 1Tb
Флешка 16Gb(была и на 8Gb0 но как оказалось инсталлу этого маловато)
Необходимо создать 3 рейд массива — md0 и md1 по 4Гб типа raid 1. все остальнео место будет занимать md2 типа raid 10. Первоначально пробовал для все массивов использовать raid 10 — но почему-то xen не грузится с 10 raid`a, в инете встречал информацию что проблемы с загрузкой были только у raid 5. Поэтому конфигурация массивов будет именно такой.
Первоначально задача показалась не очень сложной и следуя инструкциям (ссылки №4-8) все было замечательно до тех пор пока мы не добираемся до этапа загрузки со 2/3 жесткого диска, и вот тут сервер дарит нам массу эмоций так как выбрать конкретное устройство для загрузки нельзя(т.е. если у вас несколько флешек с разными системами или несколько винтов с разными ОС то грузится будет ТОЛЬКО с первой в очереди. никаких вариантов для решения данной проблемы найдено не было. Поэтому был выбран другой путь — поставить систему на флешку а уже потом загрузившись с флешки произвести все необходимые нам действия по конфигурации рейдов и переносу и настройке хост системы. Как я уже сказал — выбрать какую именно флешку использовать для загрузки БИОС нам не дает, а доступ в серверную 24/7 не всегда возможен.И вот тут на помощь нам приходит ILO 4 — нет он не помогает нам выбирать устройтсва для загрузки (максимум удобно выбрать порядок загрузки и назначить конкретный тип устройства для следующей перегрузки, ну и эту самую перегрузку произвести) за-то он дает возможность примонтировать любой образ к виртуальному CD/DVD-ROM и загрузится с него.
Итак последовательность действий такова Монтируем образ через iLO, устанавливаем систему на флешку, грузимся с флешки, конфигурируем рейд и переносим систему на него, допиливаем напильничком — профит.

Этап 1


Во время загрузки xen нажимаем F2 и в появившейся строке-приглашении пишем команду:
shell

Загрузится необходимый набор библиотек и драйверов и появится приглашение
bash-3.2# 

Во многих гайдах рекомендуют для определения нужного нам устройства использовать команду:
cat /proc/partitions

Ее выдача не удобна в данном случае, глаза от циферок разбегаются, посему я воспользуюсь вот такой:
 fdisk -l | grep /dev/sd

Согласно выдаче видно что флешка у нас это /dev/sde Проведем небольшую подготовительную работу.
Используя
fdisk /dev/sd*

удаляем все разделы на всех дисках (в результате многократных экспериментов создавалось много разных конфигураций — сейчас они нам не к чему поэтому удаляем их смело (не забыть удалить суперблоки созданных нами ранее рейдов)
Для запуска процесса установки воспользуемся вот такой командой:
/opt/xensource/installer/init

После окончания установки нам предложат удалить все устройства и перегрузится, соглашаемся и попадаем в запущенный нами ранее шелл.
В нем выполняем следующие действия:
mkdir /tmp/sda 
mount -t ext3 /dev/sde1 /tmp/sda 
chmod -R 664 /sys/block 
cp -R /sys/block /tmp/sda/sys/ 

# Возникающие ошибки к нам отношения не имеют — все так и задумано
chroot /tmp/sda 
cd /boot 
ls -a 

# Команда ls покажет нам содержимое каталога
mv initrd-***xen.img initrd-***xen.img.old 
mkinitrd --with-usb initrd-***xen.img ***xen

# Вместо *** вставляем значения, которое нам показала предыдущая команда в каталоге (автодополнение по tab работает):
Должно получиться вот так:
mv initrd-2.6.32.43-0.4.1.xs1.8.0.835.170778xen.img initrd-2.6.32.43-0.4.1.xs1.8.0.835.170778xen.img.old
mkinitrd –with-usb initrd-2.6.32.43-0.4.1.xs1.8.0.835.170778xen.img 2.6.32.43-0.4.1.xs1.8.0.835.170778xen

выходим из chroot`a:
exit

синхронимся
sync

перегружаемся!
reboot


Этап 2


Здесь у нас два варианта или используя iLO 4 установить в разделе Virtual media / Boot order — One-Time Boot Status — USB Storage Device или при загрузке сервера нажать F11 и в выпадающем меню выбрать пункт 3. Оба действия в принципе равнозначны, единственное что нельзя воспользоваться настройкой через iLO если сервре уже находится в перегрузке (т.е. сначала залезли в настройки iLO и поставили однократную загрузку с USB, а уж потом набрали в консоли reboot и нажали клавиу Enter).
Дальнейшие действия мы буем совершать в консоли которую нам предоставляет XenCenter. (как оказалось сервер Proliant DL 160 Gen8 довольно капризный, и кроме отсутствия нормально аппаратного рейда, он очень плохо себя ведет в содружестве с KVM свитчом в части передачи изоражения, все дергается и искажается — глаза очень быстро начинают болеть) Для этого дождемся загрузки свежеустановленного ксена и подключим его к нашему XenCentr`у — введем с соответствующие поля IP нашего сервера и пароль для учетной записи root. В качестве еще одного плюса работы через XenCentr хочется добавить возможность копировать и вставлять из буфера что значительно ускорит нашу работу по дальнейшей настройке рейдов.

Перейдем на вкладку Console и нажмем Enter.

Итак для начала посмотрим что у нас с порядком устройств:
fdisk -l | grep /dev/sd

Как видим флешка у нас стала теперь именоваться /dev/sda
Команда
cat /proc/partitions

показывает что на флешке у нас 2 раздела, а команда
sgdisk -p /dev/sda

дает более удобочитаемую ( для меня) информацию по этим разделам.
Стираем таблицу разделов на всех жестки дисках дисках:
sgdisk --zap-all /dev/sdb
sgdisk --zap-all /dev/sdc
sgdisk --zap-all /dev/sdd
sgdisk --zap-all /dev/sde

Устанавливаем туда GPT таблицу разделов:
sgdisk --mbrtogpt --clear /dev/sdb
sgdisk --mbrtogpt --clear /dev/sdc
sgdisk --mbrtogpt --clear /dev/sdd
sgdisk --mbrtogpt --clear /dev/sde

Создаём таблицу разделов, идентичную таблице первого диска (внимание на цифры, ставим идентичные для соответствующего раздела на исходном диске с установленной системой):
sgdisk --new=1:2048:8388641 /dev/sdb
sgdisk --new=2:8390656:16777249 /dev/sdb
sgdisk --new=3:16779264:$(expr $(sgdisk -p /dev/sdb | awk '/Disk \// {print($3)}') - 34) /dev/sdb

Здесь хочу обратить ваше внимание вот на что, так как мы устанавливаем на флешку только систему и не настраиваем локальное хранилище то размер 3 диска надо подбирать в зависимости от размера вашего диска. В некоторых инструкциях встречается упоминание о том, что надо отдавать не весь диск а чуть чуть меньше (я так понимаю в конце диска хранится резервная копия GPT вот под нее и оставялем место).
Необходимо заменить идентификаторы разделов на fd00 идентификатор раздела содержащего raid.
sgdisk --typecode=1:fd00 /dev/sdb
sgdisk --typecode=2:fd00 /dev/sdb 
sgdisk --typecode=3:fd00 /dev/sdb

Копируем созданные разделы на остальные диски
sgdisk -R /dev/sdc /dev/sdb
sgdisk -R /dev/sde /dev/sdb
sgdisk -R /dev/sdd /dev/sdb

В одном из руководств были комментарии о том что могут возникнуть проблемы если все диски будут иметь одинаковый UUID избавляемся от потенциальной головной боли в будущем.
sgdisk -G /dev/sdb
sgdisk -G /dev/sdc
sgdisk -G /dev/sdd
sgdisk -G /dev/sde

Ставим флаги загрузочного раздела
sgdisk /dev/sdb --attributes=1:set:2
sgdisk /dev/sdc --attributes=1:set:2
sgdisk /dev/sdd --attributes=1:set:2
sgdisk /dev/sde --attributes=1:set:2

В связи с тем что диски до этого были подопытными и для того что бы избежать проблем в дальнейшем выполним вот такие команды что бы убедиться в отсутствии суперблоков от предыдущих рейдов
mdadm --examine /dev/sdb
mdadm --examine /dev/sdb1
mdadm --examine /dev/sdb2
mdadm --examine /dev/sdc
mdadm --examine /dev/sdc1
mdadm --examine /dev/sdc2
mdadm --examine /dev/sdd
mdadm --examine /dev/sdd1
mdadm --examine /dev/sdd2
mdadm --examine /dev/sde
mdadm --examine /dev/sde1
mdadm --examine /dev/sde2

И если хоть на одном из них будут найдены остатки рейда то необходимо выполнить следующие операции:
mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb2
mdadm --zero-superblock /dev/sdc1
mdadm --zero-superblock /dev/sdc2
mdadm --zero-superblock /dev/sdd1
mdadm --zero-superblock /dev/sdd2
mdadm --zero-superblock /dev/sde1
mdadm --zero-superblock /dev/sde2

Создание raid массивов.
mdadm --stop /dev/md0
mknod /dev/md0 b 9 0
mknod /dev/md1 b 9 1
mdadm --create /dev/md0 --level=1 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

На вопрос mdadm Continue creating array? уверенно отвечаем yes
Теперь создаем 2 рейд:
mdadm --create /dev/md1 --level=10 --raid-devices=4 /dev/sdb2 /dev/sdc2 /dev/sdd2 /dev/sde2

Теперь создаем 3 рейд:
mdadm --create /dev/md2 --level=10 --raid-devices=4 /dev/sdb3 /dev/sdc3 /dev/sdd3 /dev/sde3

Дальше ждем когда mdadm соберет наши разделы в полноценные рейды, для этого либо время от вермени запускаем команду
cat /proc/mdstat
либо воспользуемся вот такой вариацией — которая сама обновляет информацию о состоянии и отображает на экране в реальнмо времени
watch -n 1 cat /proc/mdstat

Если создание 2 рейдов md0 и md1 занимает пару минут, то на сборку md2 ушло примерно 3 часа… так что смело можно идти пить чай с булочками.
Создаем и монтируем файловую систему:
mkfs.ext3 /dev/md0
mount /dev/md0 /mnt 

Копируем туда root файловую систему:
cp -vxpR / /mnt

Вносим изменения в /mnt/etc/fstab – заменяем корневую фалйловую систему на /dev/md0 можно вручную с помощью nano, а можно и вот так.
sed -i 's/LABEL=[a-zA-Z\-]*\s\(.*\)/\/dev\/md0 \1/' /mnt/etc/fstab

Копируем загрузчик на все диски.
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с
dd if=/mnt/usr/share/syslinux/gptmbr.bin of=/dev/sde
dd if=/mnt/usr/share/syslinux/gptmbr.bin of=/dev/sdd

Создаем новый загрузочный образ и распаковываем его:
mkdir /mnt/root/initrd-raid
mkinitrd -v --fstab=/mnt/etc/fstab /mnt/root/initrd-raid/initrd-`uname -r`-raid.img `uname -r`
cd /mnt/root/initrd-raid
zcat initrd-`uname -r`-raid.img | cpio -i

Отредактируем файл ‘init’ – вставив строчки raidautorun:
sed -i 's/raidautorun \/dev\/md0/raidautorun \/dev\/md0\nraidautorun \/dev\/md1\nraidautorun \/dev\/md2/' init

Скопируйте новый загрузочный образ в каталог /mnt/boot и измените загрузочное меню
find . -print | cpio -o -Hnewc | gzip -c > /mnt/boot/initrd-`uname -r`-raid.img
rm /mnt/boot/initrd-2.6-xen.img
cd /mnt/boot
ln -s initrd-`uname -r`-raid.img initrd-2.6-xen.img

Замените в /mnt/boot/extlinux.conf строку “root=LABEL=root-…” на “root=/dev/md0″ во всех пунктах меню
sed -i 's/LABEL=[a-zA-Z\-]*/\/dev\/md0/' extlinux.conf

Когда все три массива синхронизируются, скопируйте настройки RAID в /etc/mdadm.conf
mdadm --detail --scan >> /etc/mdadm.conf


Работа напильником


В целом наш Xenserver установлен и настроен, остается вытащить флешку, указать загрузку с жесткого идска и перегрузить машинку. После чего добавить одну единственную командочку для создания на md2 нашего локального хранилища.
xe sr-create content-type=user type=lvm device-config:device=/dev/md2 shared=false name-label="Local storage"

А для того что бы можно было чуть-чуть спокойнее спать, добавляем к нашему серверу функцию оповещения если что либо случается с нашими рейд массивами.
Для начала добавим в файл /etc/mdadm.conf информацию о нашей почте (куда буду приходить алярмы)
sed -i '1i MAILADDR <наш e-mail>' /etc/mdadm.conf

теперь включим сервис мониторинга за состоянием наших массивов, как оказалось все очень просто:
service mdmonitor start
chkconfig mdmonitor on

Что бы проверить что все настроено и работает, пошлем себе тестовый статус:
mdadm --monitor --test /dev/md0


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

Tags:
Hubs:
+12
Comments8

Articles