Домашний сервер: виртуализация на основе xen

Введение

Статью изначально хотел написать на тему установки Xenserver 7 на mdadm raid1. Мне всегда нравился xen именно за возможность установить его на mdadm. Это позволяло использовать гипервизор на любом железе с двумя хардами, обеспечивая простую отказоустойчивость на уровне дисков. Это удобно и бюджетно. То же самое можно сделать на kvm, но лично мне у xen больше нравится оснастка управления в виде приложения для windows. В нее можно удобно подключать множество серверов и управлять всем из одного места. Как плюс, в сравнении с kvm, проще и быстрее установить и настроить в работу, передать кому-нибудь на управление.

Собственно, черновик статьи по установке Xenserver на софтовый рейд я подготовил и протестировал. На первый взгляд все работает. Проблемы начались, когда я стал проверять отказоустойчивость и отключать один хард. Как оказалось, xenserver не может нормально загрузиться, если рейд mdadm уходит в состояние degreaded. Я был очень расстроен этим фактом и потратил непрерывно почти сутки на то, чтобы разобраться с ситуацией и попробовать решить проблему. Но у меня это не получилось. И в интернете рецепта по решению проблемы тоже не нашел, но нашел подтверждение этой проблемы.

Похоже, XenServer с версии 7 больше не поддерживает работу на mdadm. Об этом даже упомянуто в официальном FAQ:

Я проверил на версии 7.0 и 7.1. Результат один и тот же — система не загружается, если рейд развалился. Причем в интернете есть статьи, где рассказано, как перенести чистую установку xen 7 на mdadm. Похоже эти люди просто не тестировали отказ одного из дисков. Пока это не проверишь, кажется, что все в порядке. Проблема тут в том, что Xenserver 7 перешел на CentOS 7. А там много нововведений, в частности systemd. Я точно не смог определить в чем же конкретно проблема. Есть какая-то не совместимость в модулях загрузки, ядре xenserver и версии mdadm. На CentOS 7 был похожий баг в момент выхода, но он был оперативно исправлен. А на XenServer разработчики на это забили, так как поддержку mdadm и не обещали. В итоге гипервизор остался без возможности установки на mdadm. Для меня это неприемлемо, так как mdadm активно использую. Если выходит из строя любой диск, система в момент загрузки бесконечно висит с сообщением:

A Start Job is running for dev-md0.device

У меня до сих пор есть много виртуальных машин под управлением CentOS 5. Особенность этой версии в том, что для нормальной работы на XenServer на систему устанавливалось специальное ядро kernel-xen. В итоге, при переносе системы на другой гипервизор, она отказывалась работать. Необходимо серьезно поработать напильником, чтобы завести ее

Мне важно было отработать этот момент, так как в работе придется постепенно уходить от Xenserver в сторону либо Hyper-V, либо KVM. Пока еще не решил окончательно, так как на KVM у меня так и не получилось завести виртуальные машины с xen, а вот на Hyper-V удалось

Об этом и расскажу.

Восстановление загрузки linux сервера

Для того, чтобы виртуальная машина заработала на hyper-v, как я уже сказал, необходимо установить стандартное ядро. Для этого загружаемся в виртуальной машине с загрузочного диска CentOS 7 и выбираем режим Rescue a CentOS system.

Чтобы выбрать этот раздел, необходимо в главном меню выбрать Troubleshooting. Дожидаемся загрузки и выбираем первый предложенный вариант.

Сразу чрутимся в нашу восстанавливаемую систему. Первым делом надо обновить систему и установить стандартное ядро. Скорее всего через yum у вас ничего не получится, так как ссылки на репозитории centos 5 стали неактивны, после того, как 31-го марта закончилась поддержка системы. Необходимо изменить файл /etc/yum.repos.d/CentOS-Base.repo, отредактировав пути соответствующих разделов на следующие:

baseurl=http://vault.centos.org/5.11/os/$basearch/
baseurl=http://vault.centos.org/5.11/updates/$basearch/
baseurl=http://vault.centos.org/5.11/addons/$basearch/
baseurl=http://vault.centos.org/5.11/extras/$basearch/
baseurl=http://vault.centos.org/5.11/centosplus/$basearch/
baseurl=http://vault.centos.org/5.11/contrib/$basearch/

Все строки с mirrorlist надо закомментировать, а baseurl изменить на указанные. После этого надо настроить сеть и запустить обновление системы.

# yum clean all
# yum update

Теперь установим стандартное ядро linux, а от xen удалим.

# yum remove kernel-xen
# yum install kernel

Дальше обновим initrd. Чтобы не было ошибок, необходимо в файле /etc/modprobe.conf закомментировать все строки, в которых есть упоминание xen.

Теперь проверяем версию имеющихся библиотек ядра в системе.

# ls -l /lib/modules/

Берем самую свежу версию и собираем образ initrd.

# mkinitrd -v -f /boot/initrd-2.6.18-419.el5.img 2.6.18-419.el5

Редактируем конфиг загрузчика /boot/grub/grub.conf, чтобы он выбрал при загрузке именно эту версию ядра.

Параметр default=1 соответствует второй строке меню, так как отсчет идет от 0. То есть как раз будет выбрано нужное обновленное ядро. Обновляем загрузчик на диске.

# grub-install /dev/sda

Если получите ошибку:

/dev/sda does not have any corresponding BIOS drive.

Используйте такую команду:

# grub-install --recheck /dev/sda

По идее, на этом можно было бы и завершить. Мы фактически выполнили полное восстановление поломанной загрузки linux сервера. Но так как речь идет о xenserver, есть еще один нюанс. Если сейчас попробовать загрузить виртуальную машину, то все пройдет гладко почти до самого конца загрузки, а потом вылезет ошибка.

init: Id ‘co’ respawning too fast: disabled for 5 minutes

Она будет висеть бесконечно. Связана с доступом к консоли виртуальной машины на xenserver. В другом окружении, параметр должен быть изменен. Чтобы исправить ошибку, надо отредактировать файл /etc/inittab. Найти в нем строку

co:123457:respawn:/sbin/agetty xvc0 9600 vt100-nav

Закомментировать ее, а вместо нее снять комментарий со строки

1:123457:respawn:/sbin/mingetty tty1

Теперь можно перезагружать виртуалку. Она должна благополучно загрузиться. По крайней мере у меня было так.

К сожалению, указанный выше способ не смог заставить загрузиться эту же виртуальную машину на гипервизоре KVM. Не знаю почему. После выбора в загрузчике версии ядра, система просто зависает в таком положении.

И дальше ничего не происходит. Никаких ошибок при этом нет. У меня даже нет идей из-за чего это может быть и в каком направлении двигаться, чтобы запустить виртуалку. Если у кого-то есть идеи как это сделать, прошу совета. Мне бы очень хотелось перенести виртуальные машины с centos 5 на kvm. Я пробовал переносить уже восстановленные виртуалки с hyper-v на kvm, конвертировал диск с vhd в qсow2, но все без результата. Они все равно зависают точно так же, как если бы я их переносил напрямую с xenserver.

Перенос виртуальной машины с xenserver на kvm

Сам перенос виртуальной машины представляет из себя простое копирование диска с одного гипервизора на другой. Для бэкапа Xenserver я использую бесплатную версию программы Alike Free. К сожалению, ее больше нет в бесплатной редакции. Разработчики закрыли бесплатный проект, есть только триальная версия от платной. Но у меня остался и дистрибутив, и ключи для бесплатной версии. Я продолжаю ее использовать. Простая и удобная программа, которая позволяет делать инкрементные бэкапы виртуальных машин. Она же умеет выгружать бэкапы в vhd формате. Все что надо сделать для переноса виртуалки — создать такую же машину на hyper-v и в качестве диска указать перенесенный vhd образ с xenserver. Но если после этого просто запустить виртуалку, вы получите ошибку.

Error 13: invalid or unsupported executable format

Ничего удивительного в этом нет, модифицированное ядро для xen работает только на самом гипервизоре. Для работы в другой среде необходимо установить стандартное ядро linux. Вот этим я и займусь далее. Задача оказалась очень непростой, пришлось много ковыряться в различных нюансах. В первую очередь, чтобы не забыть приобретенный опыт, я и пишу эту статью. Хотя понимаю, что мало кому пригодится подобный опыт. Вряд ли найдется много людей, кто будет переносить уже снятую с поддержки систему CentOS 5 с гипервизора Xen куда-то в другое место. По-хорошему, системы надо переставлять, и я этим постепенно займусь. Но все равно необходимо иметь под рукой готовую инструкцию на случай всяких неожиданностей.

Описанный ниже способ восстановления загрузки виртуальной машины является универсальным средством для решения проблем с загрузкой linux сервера. Если у вас по какой-то причине не загружается linux сервер, сломался загрузчик или возникли проблемы после обновления ядра, рассказанные далее способы обновления и замены ядра и загрузчика могут помочь в решении этой проблемы.

Заключение

Перенос виртуальных машин хорошо работает в рамках одного гипервизора. В случае, если переносите с одного на другой, с большой долей вероятности получите некоторые проблемы. Я с этим частенько сталкиваюсь, особенно с linux и freebsd. Чаще всего начинаются проблемы с дисками и загрузчиком. То буквы дисков поменяются, приходится править fstab, то загрузчик не стартует. Иногда сеть может не работать. Везде приходится по месту разбираться и решать возникающие проблемы.

Онлайн курс Infrastructure as a code

Если у вас есть желание научиться автоматизировать свою работу, избавить себя и команду от рутины, рекомендую пройти онлайн курс Infrastructure as a code. в OTUS. Обучение длится 4 месяца.

Что даст вам этот курс:

  • Познакомитесь с Terraform.
  • Изучите систему управления конфигурацией Ansible.
  • Познакомитесь с другими системами управления конфигурацией — Chef, Puppet, SaltStack.
  • Узнаете, чем отличается изменяемая инфраструктура от неизменяемой, а также научитесь выбирать и управлять ей.
  • В заключительном модуле изучите инструменты CI/CD: это GitLab и Jenkins

Смотрите подробнее программу по .

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Техноарена
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: