Статьи Виртуализация глазами администратора

Discussion in 'Статьи' started by freelsd, 11 Sep 2009.

  1. freelsd

    freelsd Elder - Старейшина

    Joined:
    25 Oct 2007
    Messages:
    108
    Likes Received:
    25
    Reputations:
    10
    Словарик:
    оверселлинг - когда продаётся больше ресурсов, нежели реально возможно предоставить, по очень грубым подсчетам, в настоящее время хостерами продано в 10 раз больше ресурсов нежели имеется аппаратной мощности
    домен - читай операционная система
    гипервизор - система запуска всех доменов
    dom0 - основной домен
    domU - гостевые домены


    Привет. В этой статье я бы хотел сделать небольшое how-to если Вы хотите сделать профессиональную систему виртуализации. Хотелось бы поделиться опытом, так как русской документации(АКТУАЛЬНОЙ!) на эту тему очень и очень немного и приходилось по крупицам собирать с рассылки [email protected]. Если Вы планируете профессионально этим заниматься, обязательно подпишитесь.
    Xen -- это монитор виртуальных машин (VMM, Virtual Machine Monitor) или гипервизор (hypervisor) с поддержкой паравиртуализации (para-virtualization) для процессоров x86 архитектуры, распространяющийся с открытым исходным кодом (opensource). Xen может организовать совместное безопасное исполнение нескольких виртуальных машин на одной физической системе с производительностью близкой к непосредственной (native).

    Виртуализация будет сделана на базе xen, что обеспечивает максимальную эффективность использования ресурсов, проверено моим опытом. Xen обладает функциональностью ПО корпоративного уровня.

    Плюсы:
    Минусы:
    В первую очередь важно знать, что работа может производиться в HVM режиме и в режиме паравиртуализации. HVM режим должен поддерживаться процессором, запуск некоторых систем(Windows, FreeBSD) возможен только в HVM режиме. Паравиртуализация - это запуск системы с измененным ядром. Загрузка системы xen отличается от обычной: запускается XEN - гипервизор, который стартует основную систему (сравните, обычно система загружается сама первой а затем только стартуются прикладные программы). Далее после старта основной системы можно запускать гостевые домены. Я испробовал Suse, CentOS, Debian и отдал предпочтение Debian Lenny в качестве хост системы.
    Самый простой вариант - запуск в режиме паравиртуализации:
    Устанавливаем необходимые пакеты:

    # aptitude install xen-tools libc6-xen

    Все остальное подтянется автоматически по зависимостям.

    Ставим XEN ядро:

    # aptitude install xen-linux-system-2.6.26-1-xen-686

    Все нормально установилось из репозитариев, перезагружаемся с новым ядром.

    Далее в файле /etc/xen/xend-config.sxp нужно раскомментировать строку network-script network-bridge, чтобы мы могли гостевым системам выдавать ip адреса из нашей локальной сети.

    Создавать образы гостевой системы мы будем с помощью утилиты xen-tools. Сначала настроим ее. Для этого нужно поправить /etc/xen-tools/xen-tools.conf примерно так:

    dir = /home/xen # Каталог, куда будут помещены созданные образы
    install-method = debootstrap # построить систему, с помощью утилиты debootstrap
    size = 8Gb # Размер образа
    memory = 512Mb # Сколько оперативной памяти выделяем
    swap = 512Mb # Размер swap файла
    fs = ext3 # Какую файловую систему создавать
    dist = lenny # Какой дистрибутив устанавливать
    image = sparse # Делает размер образа таким, сколько места реально занято
    kernel = /boot/vmlinuz-`uname -r` # Использовать ядро основной системы
    initrd = /boot/initrd.img-`uname -r` # Использовать initrd основной системы
    mirror = http://mirror.yandex.ru/debian/ # С какого зеркала debootstrap будет брать пакеты
    ext3_options = noatime,nodiratime,errors=remount-ro # Опции монтирования файловой системы
    serial_device = hvc0 # Чтобы можно было попасть в консоль гостевой системы с основной

    Создаем каталоги, куда будут помещаться созданные образы:

    # mkdir /home/xen
    # mkdir /home/xen/domains

    Создаем образ виртуальной машины:

    # xen-create-image --hostname=guest1 --ip=10.32.0.136 --netmask=255.255.252.0 --gateway=10.32.0.1 --passwd --role udev

    Утилита xen-tools создаст нам образ гостевой системы на базе Debian lenny с указанными в командной строке сетевыми настройками, спросит пароль для root и создаст конфигурационный файл виртуальной машины. Нам его нужно подправить, так как по крайней мере в XEN версии 3.2 существует ошибка синхронизации времени гостевой системы с основной. Из-за этого в определенных случаях виртуальная машина прекращает работать, выдавая на консоль что-то вроде такого:

    [134923.954606] clocksource/0: Time went backwards: delta=-6917269595673126078 shadow=134923109294656 offset=845310074
    [134928.952308] printk: 1154382 messages suppressed.
    [134928.952323] clocksource/0: Time went backwards: delta=-6917269590675409336 shadow=134928109321066 offset=842999953

    Наш конфиг /etc/xen/guest1.cfg должен выглядеть примерно так:

    kernel = '/boot/vmlinuz-2.6.26-1-xen-686'
    ramdisk = '/boot/initrd.img-2.6.26-1-xen-686'
    memory = '512'
    vcpus = 2
    extra = 'clocksource=jiffies' #Именно это передаем ядру, во избежание проблемы с clocksource
    root = '/dev/sda1 ro'
    disk = [
    'file:/home/xen/domains/guest1/disk.img,sda1,w',
    'file:/home/xen/domains/guest1/swap.img,sda2,w',
    ]
    name = 'guest1'
    vif = [ 'ip=10.32.0.136,mac=00:16:3E:A3:69:9C' ]
    on_poweroff = 'destroy'
    on_reboot = 'restart'
    on_crash = 'restart'

    В документации по XEN сказано, что для увеличения производительности дисковой подсистемы виртуальных машин, использующих не физические разделы, а образы – вместо «file:/» использовать «tap:aio:/», но у меня это так и не заработало, даже после плясок с бубном. tap:aio использует драйвер blktap вместо loop, что снимает ограничение на количество одновременно смонтированных устройств, работающих через loopback. Но можно увеличить установленное по умолчанию значение, добавив в в /etc/modules: loop max_loop=255

    Теперь настала пора запустить нашу виртуальную машину:

    # xm create -c /etc/xen/guest1.cfg

    Опция -c означает, что после запуска виртуальной машины произойдет переключение на ее консоль. Если загрузка прошла успешно, логинимся, и добавляем в конфигурационный файл опций ядра параметр xen.independent_wallclock=1, который обозначает, что не нужно брать системное время от основной системы. После этого, вышеуказанная ошибка синхронизации времени нас беспокоить не будет. Правда придется синхронизировать время например через ntp, но я думаю что это не проблема.

    # echo "xen.independent_wallclock=1" >> /etc/sysctl.conf

    Чтобы выйти снова в основную систему, нажимаем CTRL+]

    Вот краткий перечень наиболее часто используемых команд:

    xm list - посмотреть список запущенных виртуальных машин
    xm console guest1 - подключиться к консоли гостевой системы
    CTRL+] - отключиться от консоли
    xm create /etc/xen/guest1.cfg - запустить вирт. машину (xm cr /etc/xen/guest1.cfg также возможно использовать)
    xm shutdown -H guest1 - остановить вирт. машину
    xm destroy guest1 - принудительно "вырубить" вирт. машину
    xm top - системный монитор, покажет нагрузку всех вирт. машин
    xm help - посмотреть список остальных команд

    Чтобы виртуальная машина стартовала автоматически, нужно добавить симлинк на нее в /etc/xen/auto/:

    # ln -s /etc/xen/guest1.cfg /etc/xen/auto/guest1.cfg

    На этом базовая настройка завершена – можно пользоваться.



    Для увеличения производительности виртуальных машин, лучше всего использовать не файлы с образами систем, а отдавать системам разделы жесткого диска, либо отдельные физические диски. Удобнее всего для этих целей подойдет LVM (Logical Volume Manager):
    Перед использованием диска или раздела в качестве физического тома необходимо его инициализировать:
    Для целого диска:
    %# pvcreate /dev/hdb

    Для создания группы томов используется команда 'vgcreate'
    %# vgcreate vg01 /dev/hda1 /dev/hdb1

    Для того, чтобы создать логический том "guest1-root ", размером 20000Мб, выполните команду:
    %# lvcreate -L20000 -nguest1-root vg01
    Для свапа:
    %# lvcreate -L1024 -nguest1-swap vg01
    Партиции можно менять, делать что угодно - подробнее http://xgu.ru/wiki/LVM

    Предположим, что мы выделили для виртуальной машины два логических тома, /dev/vg01/guest1-root для корня и /dev/vg01/guest1-swap для свопа. Перенести виртуальную машину из образа на физический раздел можно так:

    # dd if=/home/xen/domains/guest1/disk.img of=/dev/vg01/guest1-root bs=64k

    Если размер тома больше, чем размер образа, то делаем ресайз файловой системы:

    # e2fsck -f /dev/vg01/guest1-root
    # resize2fs /dev/vg01/guest1-root

    Создаем свап:

    # mkswap /dev/vg01/guest1-swap

    И исправляем конфигурацию дисков в /etc/xen/guest1.cfg

    disk = [
    'phy:/dev/vg01/guest1-root,sda1,w',
    'phy:/dev/vg01/guest1-swap,sda2,w',
    ]

    Запускаем вирт. машину. Теперь она расположена на физических разделах. С использованием LVM, мы можем удобно изменять размер дисков вирт. машин, делать снапшоты для бекапа и многое другое.

    И в заключении рассмотрим как бекапить все это хозяйство.

    Если все виртуальные машины у нас находятся в файлах, то можно просто копировать их в надежное место. Но более гибко можно выполнять бекап, если у нас используется LVM. Чтобы выполнять бекап систем без остановки вирт. машин, воспользуемся снапшотами LVM.

    На жестком диске в Volume group должно быть достаточно свободного места для выполнения снапшота. Создаем снапшот:

    # lvcreate -L1GB -s -n guest1backup /dev/vg01/guest1-root

    Можно выполнить бекап всего раздела с помощью dd:

    # dd if=/dev/vg01/guest1backup bs=64k | gzip -c > /root/guest1_backup.img.gz

    Но в этом случае будет скопирован весь раздел, включая свободное место, и размер бекапа получится очень большой, поэтому лучше всего использовать утилиту dump:

    # dump -0af- /dev/vg01/guest1backup | gzip -c > /root/guest1_backup.dump.gz

    Удаляем снапшот:

    # lvremove -f /dev/vg01/guest1backup

    Мы получили полный бекап системы, восстановить который мы сможем куда угодно с помощью утилиты restore.

    Очень удобно делать подобные бекапы с удаленной машины по ssh периодически, через cron. Для этого на основной XEN машине в /etc/sudoerc добавим возможность группе root выполнять команду dump через sudo без пароля:

    %root ALL = NOPASSWD: /sbin/dump

    Нужно добавить пользователя, под которым мы будем ходить по ssh для бекапа в группу root:

    # gpasswd -a alex root

    Теперь мы с удаленной машины можем делать бекап командой:

    # ssh [email protected] 'sudo dump -0af- /dev/vg01/guest1backup | gzip -c' | dd of=./2009-03-05.dump.gz

    В итоге бекап вирт. машины окажется у нас в текущем каталоге под именем 2009-03-05.dump.gz
    ----------------------------------------------------------------------------------------------------
    Запуск в HVM
    Описанное выше не подходит для FreeBSD и Windows. Если заинтересуется кто, напишу. FreeBSD поддерживается xen 3.3.1, который требуется установить из исходных кодов.


    Источники:
    XEN MANUAL
    LVM MANUAL
    Хорошая статья (копипаст с дополнениями)
     
    #1 freelsd, 11 Sep 2009
    Last edited: 11 Sep 2009
    7 people like this.
  2. Ex@rcist

    Ex@rcist New Member

    Joined:
    4 Sep 2009
    Messages:
    22
    Likes Received:
    3
    Reputations:
    0
    Полезная статья. + 5 Если описанное - это практика - то очень интересно было бы узнать на каком железе серв.
     
    #2 Ex@rcist, 11 Sep 2009
    Last edited by a moderator: 14 Apr 2012
  3. freelsd

    freelsd Elder - Старейшина

    Joined:
    25 Oct 2007
    Messages:
    108
    Likes Received:
    25
    Reputations:
    10
    Пробовал на самых разных машинах, самая сильная:
    4 процессора AMD с поддержкой гипертрейдинга, 40Gb памяти, 8 SATA в 10 рейде. Были проблемы с сетевой - так как в стабильных версиях debian не было поддержки, всегда есть возможность в таких случаях использовать более новое ядро для запуска, а потом откатываться на старое с установленными драйверами.

    Удобно для вынесения различных серверов на одну машину: ресурсы используются практически полностью, безопасность на уровне: к примеру если взломают mysql, web сервер останется в безопасности.
     
    #3 freelsd, 11 Sep 2009
    Last edited by a moderator: 14 Apr 2012
  4. drim

    drim Member

    Joined:
    27 Aug 2009
    Messages:
    347
    Likes Received:
    33
    Reputations:
    4
    На днях думал заморочиться с Xen, а тут как раз статья в тему
    +5
     
  5. jim0

    jim0 New Member

    Joined:
    19 Oct 2009
    Messages:
    8
    Likes Received:
    2
    Reputations:
    5
    Под винду такое бы чё-нить...
     
  6. SpangeBoB

    SpangeBoB Elder - Старейшина

    Joined:
    12 Jul 2008
    Messages:
    1,680
    Likes Received:
    393
    Reputations:
    102
    http://www.microsoft.com/windowsserver2008/en/us/hyperv-main.aspx

    И документация к нему http://www.microsoft.com/downloads/en/results.aspx?pocId=&freetext=Hyper-v%20Guide&DisplayLang=en

    Входит в состав Windows Server 2008 или распространяется,как отдельный продукт.
     
  7. ragingblizza

    ragingblizza New Member

    Joined:
    22 Aug 2011
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Уважаемые разработчики Xen и все кто интересуется Xen.
    Открылись интересные вакансии для Xen разработчиков. ЗП от 70 000.

    Информация о вакансиях по ссылкам
    http://hh.ru/vacancy/4717877
    http://hh.ru/vacancy/4739529

    Пишите на мыло [email protected]

    Спасибо за внимание. :D