Доброго времени суток.
Хотелось бы рассказать Вам свою историю поднятия Xen`а на HP ProLiant DL160 Gen8. Как оказалось, лень подробно изучать спецификацию железа которое ты закупаешь и загодя проверять совместимость с планируемым софтом — сыграли со мной довольно злую шутку. При заказе железа, я глянул на характеристики сервера убедился что raid контроллер в нем присутствует, увы как оказалось сервер оборудован RAID-контроллером Smart Array B120i SATA, который по сути своей является софтовым и нативно не поддерживается и не видится инсталлятором Xen. Эта статья о том как сделать все максимально грамотно оказавшись в подобной ситуации.
Итак у нас есть следующие исходные данные:
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/md0nraidautorun /dev/md1nraidautorun /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
Собственно вот вроде и все. На почте у нас валяется сообщение о том что с нашими рейдами все хорошо. Мои админы уже издеваются над новыми виртуальными машинками. А я с удовольствием жду Ваши комментарии к этой статье.
2 blogs.citrix.com/2009/03/12/installing-xenserver-on-an-usb-drive/
3 www.nerdnightlax.com/installing-xenserver-to-a-usb-flash-drive/
3.5 beaukey.blogspot.co.uk/2012/05/running-xenserver-from-usb-stick.html
4 wysotsky.info/?p=106&lang=ru
5 lukasz.cepowski.com/devlog/19,xenserver-mdadm-raid-10
6 www.spohelp.ru/forums/15-setevoe-vzaimodeystvie-spo-i-ppo/topics/1234-xenserver-6-2-kak-moschnoe-sredstvo-virtualizatsii-serverov
7 gist.github.com/thuandt/6999449
8 habrahabr.ru/post/179825/
9. techblog.jeppson.org/2014/10/convert-xenserver-installation-to-software-raid-1/
Автор: Nickolass