pingu @pingu read-only
Пользователь
22 августа 2008 в 23:54

Администрирование → Домашний сервер: виртуализация на основе Xen

Волей случая, пришлось обновить домашний сервер, в новом сервере оказался процессор core 2 duo и прилично памяти (3 гигабайта). Т.к. обычно сервер использовался в качестве файлопомойки, раутера и музыкального сервера, решил его чем-нибудь занять, чтобы не простаивали ресурсы, благо их теперь достаточно много. Решил настроить довольно популярную в последнее время технологию виртуализации, чтобы было возможно проводит различные опыты с настройкой и собирать пакеты в различных дистрибутивах/системах.

Технологии и системы

Для начала, рассмотрим существующие технологии виртуализации:
  1. OpenVZ
    Технология заключается в выполнении различных систем с разными настройками и корневой системой под одним ядром. Данная технология часто используется при предоставлении услуги VDS/VPS. Т.к. ядро по сути одно и тоже, потеря производительности минимальна, но выбор систем ограничивается дистрибутивами linux'а с одним ядром. Существует платный вариант данной системы с большим количеством функций: Virtuozzo.
  2. Xen
    В основе лежит технология паравиртуализации. Вкратце: гостевая система специально подготавливается для работы с Xen, и соответственно получается довольно небольшая потеря производительности. В качестве гостевой системы может выступать Linux (ядро гостевой системы может отличатся от ядра основной системы), FreeBSD, NetBSD, OpenBSD, OpenSolaris, Plan 9 и другие. Также возможен запуск практически любой системе через технологии виртуализации Intel/AMD, но нужен процессор с поддержкой данных архитектур. Мой сервер, в отличии от ноутбука как оказалось не поддерживает данные технологии, по этому данный метод виртуализации расcматриваться не будет.
  3. VirtualBOX/VMWare/Qemu и подобные системы эмуляции.
    Данные системы обеспечивают эмуляцию, ценой потери производительности, по этому они рассматриваться не будут.
Xen является наиболее оптимальным вариантом, т.к. имеет возможность виртуализации достаточно большого количества ОС при минимальной потери производительности.

Установка и настройка

Все действия проводились на домашнем сервере с ubuntu-server, для других дистрибутивов возможно придется немного изменить действия.Первоначально нужно установить ядро и необходимый набор утилит:
apt-get install linux-headers-2.6.24-19-xen linux-image-2.6.24-19-xen \
linux-ubuntu-modules-2.6.24-19-xen xen-hypervisor-3.2 xen-tools
Перезагружаемся в новое ядро и устанавливаем xen-utils-3.2:
apt-get install xen-utils-3.2
Важно: если до установки xen-3.2 вы пытались установить xen-3.1, необходимо удалить все пакеты содержащие упоминания xen3.1, после становить xen-hypervisor-3.2, и перезагрузится, т.к. xen-hypervisor вносит некоторые правки для загрузки ядра. Если попытаться установить xen-utils-3.2 до перезагрузки, выйдет ошибка, т.к. xend не сможет загрузится на ядре для этого не предназначенном. Те же симптомы будут при попытки установить enomalism (web интерфейс для управления xen), т.к. он тянет за собой xen3.1

Xen + Nvidia

Так получилось, что у меня видео-карта от Nvidia, и на данном сервере планируется запустить медиацентр, соответственно приходится использовать пропиетарные драйвера. Изначально попробовал установить через envyng (связка скриптов для удобной установки пропиетарных драйверов видео-карт в ubuntu), но ядро запаниковало. При попытке удалить драйвер и собрать руками возникла неприятная вещь: перезагружаясь в ядро, dkms заново устанавливал драйвер. Пришлось удалить драйвер на всех ядрах (dkms remove -m nvidia -v 173.14.12 --all) и ставить руками. При установки не envy драйверов, устанавливаеться старая версия (9x.xx.xx), с которой возможны проблемы. Нужно сразу сказать, что стандартный драйвер ругается на xen ядро, и устанавливатся отказывается. Небольшой рецепт чтобы это обойти:Т.к. драйверу необходимы права root'а для установки, а при sudo не используются переменные текущего пользователя, то все команды нужно выполнять от рута. В связи с тем, что в ubuntu нет пароля у рута, и неизвестно как скажется на системе его установка, приходится использовать небольшое ухищрение чтобы получить консоль с правами суперпользователя: sudo su или sudo bash(zsh, csh, etc)
# export IGNORE_XEN_PRESENCE=1
# chmod a+x NVIDIA-Linux-x86-173.14.12-pkg2.run
# ./NVIDIA-Linux-x86-173.14.12-pkg2.run </i>
После завершения установки необходимо выйти из консоли суперпользователя: exitВнимание: данный метод установки не рекомендован и является довольно плохой практикой, в связи с тем что будет довольно сложно в будущем удалить данный драйвер, но т.к. иного способа нет, а создавать и поддерживать пакет для этих целей, который возможно будет конфликтовать с пакетами в репозитории довольно проблематично, я использовал этот способ. Вы можете собрать пакет с драйверами.

Создание и использование образов

В xen можно использовать как готовые образы для виртуальных машин, так и создавать свои. Большой архив готовых образов есть на jailtime.org. Мы же будем создавать свой образ, с помощью xen-utils.Образы создаются с помощью команды xen-create-image.Создадим образ с debian etch 64-bit:
xen-create-image -hostname=имя-машины -size=10Gb -swap=512Mb -ide -ip=192.168.0.100 
-netmask=255.255.255.0 -gateway=192.168.0.1 -force -dir=/xen -memory=128Mb -arch=amd64 -dist=etch 
-passwd
Важно: основная система должна быть 64-битная, чтобы была возможность создавать 64-битные гостевые системы.Опции:
  • hostname: хостнейм системы, а также имя образа
  • size: размер диска образа
  • swap: размер swap файла для образа
  • ide: использовать ide драйвер для диска
  • ip: ip адрес образа
  • netmask: маска сети образа
  • gateway: ip адрес маршрутизатора (в данном случае ip основной системы)
  • force: переписывает уже созданные образы
  • dir: директория в которой будет содержатся образ
  • memory: размер памяти выделяемый для системы
  • arch: архитектура системы (amd64, i386, etc)
  • dist: дистрибутив который Вы хотите установить
  • passwd: запрашивать пароль суперпользователя для образа
запускаем машину на основе созданного образа:
xm create /etc/xen/имя-машины.cfg
Т.к. мы используем xen3.2 скорей всего вывалится сообщение об ошибке:
Error: Device 769 (vbd) could not be connected. losetup /dev/loop0 
/xen/domains/имя-машины/swap.img failed
Это связанно с тем, что xen-tools3.2 в конфигурационном файле использует пути до файлов дисков через file:/, тогда как этот параметр удален из Xen3.2. Чтобы данной ошибки не было, необходимо в конфигурационном файле /etc/xen/имя-машины.cfg в секции disk заменить пути с file:/xen/...на tap:aio:/xen/...Также необходимо настроить поддержку сети на основной системе, для этого в файлу /etc/network/interfaces нужно добавить к внутреннему интерфейсу следующие параметры:
up ip addr 192.168.0.100/28 dev eth0
Теперь у нас есть виртуальная машина, к которой можно присоединиться по сети, с любого компьютера.В случае если машина загрузилась, но что-то пошло не так, всегда можно зайти в локальную консоль с помощью команды: xm console имя_машиныДля автозагрузки виртуальной машины при старте системы необходимо сделать симлинк с конфигурационного файла машины в /etc/xen/auto:
ln -s /etc/xen/имя-машины.cfg /etc/xen/auto/

Основные команды для управления виртуальными машинами:

  • xm console — вызывает первый терминал виртуальной машины
  • xm create — запускает виртуальную машину на основе конфигурационного файла
  • xm pause — временно останавливает виртуальную машину
  • xm unpause — запускает виртуальную машину после остановки
  • xm save — сохраняет состояние виртуальной машины
  • xm restore — востанавливает состояние виртуальной машины
  • xm reboot — перезагружает виртуальную машину
  • xm shutdown — выключает виртуальную машину
  • xentop — показывает текущую загрузку всех виртуальных машин
  • xm list — список запущенных виртуальных машин
  • xm dmesg — показывает dmesg виртуальной машины
  • xm delete — удаляет виртуальную машину
  • xm destroy — принудительно удаляет виртуальную машину
Вот собственно и все. Позже возможно напишу про развертывание Xen на production-сервере с использование LVM.

Другие статьи из этой серии: медиацентр, прокси для SIP
Кросс-пост с моего блога
pingu @pingu
карма
1,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Администрирование

Комментарии (70)

  • +5
    Стоит ли писать менее подробно, или наоборот более подробно?
    • +7
      Да вроде и так неплохо написано. Но если можно поподробней, то почему бы и нет. Эта тема, имхо, не задумана под лёгкость, так что облегчать-то точно незачем :)
      • 0
        в принципе можно было еще как минимум описать команды для управления виртуальными машинами, но их описание можно прочитать в xm help, и я не стал из-за них раздувать статью. Но например про sudo su и sudo bash довольно простая вещь, и скорей всего её знает как минимум большинство, стоит ли описывать такие простые вещи?
        • +1
          Такие простые-то нет, конечно. Основные манипуляции с виртуальными машинами можно и описать :)
          • +1
            Добавил про простые манипуляции с виртуальными машинами.
        • +2
          По-моему наоборот, для sudo su и sudo bash нужно иметь богатую фантазию, так как есть sudo -i
          :)
          • 0
            спасибо, не знал.
  • +1
    > Важно: гостевая система должна быть 64-битная, чтобы была возможность создавать 64-битные гостевые системы.

    Видимо описочка? Речь идет про хост-систему? ;-)
    • +1
      спасибо, исправил.
  • 0
    Собственно вопрос, стоит ли освещать настройку уже на production-сервере с LVM и прочим?
    • +1
      Да, опишите пожалуйста. Купил сервер, а с софтом толком не разобрался еще. Сервер достаточно мощный — дуал Оптерон 2Ггц, оперативы пока правда гиг всего, но буду наращивать. Знакомые советуют ставить виртуализацию, но у меня пока в этом совсем нет опыта. Ваша статья оказалась кстати. Если опишите как настроить все на продакшене, буду премного благодарен.
      • +1
        Если у вас типовые задачи и среды гомогенные, то лучше использовать OpenVZ.
        • +1
          Честно говоря, я пока в этом не особо разбираюсь. Основная задача — это веб-сервер. Возможно еще будет что-то под Яву, но пока это не точно.
          К тому же я пока не особо понимаю разницу между Ксеном и остальными системами. Пока на первом месте стоит хорошее соотношение между удобством настройки, использования + быстродействие.
          • +1
            Имеются ввиду что у вас используется в качестве платформы Linux. К примеру сопровождать систему с большим количеством сервисов может быть затруднительно. Соответсвенно можно при помощи OpenVZ разделить эти сервисы по отдельным контейнерам и сопровождать их отдельно.
  • +1
    Я правильно понимаю, что при установки XEN, процессор должен поддержить аппаратрую виртуализацию, или это не обязательно? (например Athlon64 +3500 Venice)
    • 0
      У меня аппаратную виртуализацию не поддерживает например. Она нужна только для запуска ОС не заточенных под xen: windows, os/2, и т.д. Все заточенные под xen ОС работают прекрасно без технологий аппаратной виртуализации: Linux(практически все дистрибутивы), FreeBSD, NetBSD, OpenBSD, OpenSolaris, Plan 9 и т.д.
    • +1
      Требуется только в случае если ОС domU немодифицирована. В случае если можно осуществить модификацию ОС, то аппаратная виртуализация не требуется.
  • +2
    Я наслышан о том, что Xen позволяет гостевой ОСи использовать железо напрямую, например, видеокарту. Так ли это на самом деле? Возможно ли, например, под Xen на линуксе поставить винду и сделать так, чтобы DirectX использовал аппаратное ускорение видеокарты?
    • +2
      Только unix like системы( и то не все). Хотя где то проходила новосить, что ребята из Xen все же запустили винду, но там что то с лицензией винды фигово, и этого нельзя делать ) Или код они где то подправили, в общем не помню.
    • 0
      В Xen3.2 нельзя, т.к. винда не паравиртуализуется, а эмулируется в связи с тем, что её исходный код закрыт и внести правки необходимые для паравиртуализацие нельзя. Но буквально вчера вышел Xen3.3 в котором появилась возможность пробрасывать устройства в HVM домены (в них запускают венду), но нужна поддержка процессором технологий виртуализации и IOEMMU. Возможно кому-либо удастся использовать видеокарту таки образом. Но основная проблема в том, что все устройства кроме видеокарты (процессор, память, чипсет, и т.д.) будут эмулироватся, а соответсвенно будет большая потеря производительности.
  • +1
    стоит обратить внимание на kvm — оверхэд только в IO, и с VirtIO в госте его почти нет.
    • +1
      kvm умеет работать только с аппаратной виртуализацией.
  • +1
    присоедениться — поправьте
    • НЛО прилетело и опубликовало эту надпись здесь
    • 0
      поправил.
  • +2
    Из практики:
    1 При установке гостевой ос в файл будет падение производительности дисковой подсистемы в 5-10 раз.
    2 Разницы между установкой на голый раздел и в уже размеченную ФС(LVM раздел) не заметно. Вариант с LVM естественно удобнее.
    3 В вариантах из пункта 2 скорость записи падает незначительно. Скорость чтения падает на 10-30 процентов. Или наоборот, чтение остается на уровне, а запись падает. Забыл :), записей под рукой нет. В общем имейте ввиду. Тестировал на аппаратном raid-5 и на софтовом. На двух разных системах от разных производителей — scsi и sas.
    4 Производительность процессора — разницы не заметил. Я тестировал в основоном случай одной гостевой системы и двух. Для большего количества гостей возможны серъезные потери.
    5 Сеть работает отлично.

    В общем самое слабое место — это дисковая подсистема. Я ставил на гостевую субд :) Вердикт: можно работать с бд, тем более с зеркалом. Если приложения не предъявляет особых требований к дисковой подсистеме, то сомневаться вообще не стоит.
    Dom-0 ничем не отличается от «чистой» системы в плане производительности.
    • +1
      У меня установлена Ubuntu в файл фиксированого размера гостем под VirtualBox в Windows. При этом скорость чтения падает от силы в полтора раза (hdparm -t /dev/sda выдает около 77 МБайт/сек при максимуме для моего диска в 110-120 МБайт/сек). Так что у меня вызывают большие сомнения высказывания о десятикратной потере производительности дисковой подсистемы при установке ОС в файл.
      • +1
        Не думаю, что стоит полагаться на результаты hdparm. Эта утилита настройки, а не бенчмарк. Последовательное чтение вероятно и не будет сильно отличаться.
        • +1
          Посоветуйте нормальный бенчмарк для Ubuntu, результаты оглашу.
          С другой стороны, я понимаю, что при использовании файла как харда гостя негативную роль отыграть может фрагментация. Но насколько серьезную — пока вопрос.
          • +1
            lbs.sourceforge.net/
          • +1
            Мне нравится bonnie++
            Размер файлов для теста установите минимум в два раза больше оперативки.
            www.coker.com.au/bonnie++/
            • +1
              Вот результаты bonnie++. Размер 1 ГБайт, оперативки 384 МБайт:
              Version 1.03b ------Sequential Output------ --Sequential Input- --Random-
              -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
              Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP
              ubuntu 1G 31836 90 39790 13 38056 9 34857 85 123609 8 312.4 5
              ------Sequential Create------ --------Random Create--------
              -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP
              16 28493 38 +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++
              ubuntu,1G,31836,90,39790,13,38056,9,34857,85,123609,8,312.4,5,16,28493,38,+++++,+++,+++++,+++,+++++,+++,+++++,+++,+++++,+++
  • НЛО прилетело и опубликовало эту надпись здесь
    • +1
      не «пара», просто виртуализацию.
  • –1
    «Xen:… данный метод виртуализации расССССматриваться не будет.»
    И тут же начинаете расписывать, как настроить Xen? :)

    И ещё: рАутер???
    • –10
      в англоязычных странах router(маршрутизатор) читается именно как рАутер.
      • +1
        Мы в англоязычной стране?!
      • +2
        Правильное британское произношение — ['ruːtə], американское — ['routər]. Источники: Oxford Dictionary и Oxford American Dictionary.
      • +1
        в русском, мы, как правило, транслитерируем английские название, поэтому получается «роутер»
    • 0
      ошибку поправил. там имелся ввиду метод виртуализации HVM, основанный на аппаратных технологиях виртуализации. По поводу раутера можно долго спорить, но маршрутизатор довольно длинное и некрасивое слово, по этому предпочитаю использовать раутер, благо он довольно прочно вошел в обиход.
      • +2
        Но про HVM в топике нет ни слова. Зато ясно и четко написано, что Xen вы рассматривать не будете. :)
  • +1
    Респект за хороший выбор серверной ОС(а точнее за отсутствие необоснованного фанатизма, чем многие болеют)
    • +1
      Впринципе, все линуксы одинаковы, и особого отличия нет. Для меня главным критерием является стабильность и качество сборки пакетов. К сожалению дебиан не стал заводится на моём чипсете, а засовывать своё ядро и поддерживать его не хотелось, по этому выбор пал на убунту. По сути тот же дебиан, только пакеты новее. Что порадовало в убунте — после установки в системе нет иксов и прочих вещей, которые не всегда нужны на сервере.
      • –3
        Centos 5.2 — вот пример мега минимал инстала.
  • +2
    А зачем это может понадобиться на домашнем сервере? Просто разводить зверинец из ОС для экспериментов или учёбы?
    • +2
      как минимум можно настроить копию production-сервера, чтобы тестировать на чистом сервере свои программы. Плюс тестировать программы на различных операционных системах — freebsd, netbsd, opensolaris и т.д. Также например, если захочется посмотреть какую-либо ОС, не обязательно ставить её на отдельный диск или запускать через не особо быструю технологию эмуляции. Да и просто создать инфраструктуру изолированных серверов, на одной машине с возможностью легкого включения/выключения.
      • +1
        Домашние оси без поддержки 3Д как-то очень теряют в привлекательности. Уж лучше знакомитья по LiveCD
  • +2
    OpenVZ мне кажется для этого больше подходит, по крайней мере для продакшн-серверов. Для зоопарка, да, ксен лучше, а для стабильности и производительности — только OpenVZ.
    • –3
      Я бы не сказал что OpenVZ верх стабильности, тот же Virtuozzo получше будет. Но во-первых везде одно ядро, во-вторых иногда бывают некоторые проблемы. Xen по производительности практически не отстает от openvz, где-то возможно даже превосходит.
      • +1
        Не будем забывать, что Virtuozzo платен, в отличие от OVZ. Я например, для себя никаких таких уж плюсов Virtuozzo перед OVZ для себя не нашел. С OVZ легче работать, чем с ксеном, по крайней мере для меня.
        • 0
          Дело привычки на самом деле. Большой плюс Xen, что он поддерживается в Amazon EC2. OpenVZ же поддерживается большинством VDS/VPS хостингов. Но, как мне кажется Xen больше похож на промышленный стандарт, благодаря поддержке различных систем.
    • +1
      Кто сказал, что Xen нестабилен или имеет плохие показатели поизводительности?
  • +2
    У меня стоит джента, а последнее ядро xen только 2.6.21, в оверлее xen нет последних ядер. Пытался поставить его месяца 4 назад (в хендбуке хорошо все документировано), но потом узнал что у меня нет аппаратной виртуализации :)
    • +1
      У меня аппаратной виртуализации тоже нет. Но без неё прекрасно работают системы заточенные под Xen. а по поводу дженты — насколько я знаю Xen включен в последних ядрах, и нужно лишь перекомпилить ядро, плюс поставить нужный софт.
      • +1
        В дженту у меня не получилось Xen поднять, конфликт с драйверами nVidia. И ядра не самые последние, да.
        • 0
          Со старыми есть проблемы, да. На новых всё в порядке.
  • +1
    На сколько я понимаю, на Xen будет проблема со скоростью дисков при большом количестве VPS на нём.
    С OpenVZ будет в этом плане лучше, но лучше использовать всё равно SAS.
    • –3
      Если использовать LVM, потеря скорости будет не больше чем у OpenVZ
      • +1
        Надо бы потестировать. У меня OVZ на SATA 7200, 3 или 4 VE, если в одной из них начать распаковку архива, то можно заметить тормоза.
  • +1
    Что-то написали, что вариант с xen рассматриваться не будет, а потом пишете про его установку и настройку.
    • 0
      Я имел ввиду что не будет рассматриватся вариант с аппаратной виртуализацией.
  • +2
    Отличная статья! Ждём продолжения.
  • +2
    угу Xen везде и повсюду юзаем =) единственный гемор всегда с сеть =)
    уважаемы просветите пожалуйста про медиаСервер? это что такое?
  • +1
    Когда передо мной стоял такой выбор — я решил организовывать все сие дело на openVZ
  • 0
    «VirtualBOX/VMWare/Qemu и подобные системы эмуляции.»
    Что в этом списке делают VMWare(наверное имелись ввиду продукты Workstation, Server и ESX сервер) и VirtualBox? Это платформы обеспечивающие full-virtualization основным механизмом которых является патч кода гостевой системы «на лету», что даёт минимальный проигрыш в производительности(по CPU ~ 97% от изначальной у VMWare). Как раз для домашних нужд подойдут более простые и бесплатные VMWare Server и VirtualBOX(который кстати является частью проекта SUN xVM). VMWare Tools так же решат проблему производительности систем ввода/вывода(если диск виртуальной машины представлен файлом, то потери всё равно будут колоссальными).
    Настройка же Xen займёт достаточно времени. Xen в общем, для тех, кто понимает ;). Из своего опыта могу лишь сказать что Xen удобен тем, что являясь бесплатным позволяет использовать широкий спектр технологий(к примеру, iSCSI), в отличие от VMWare Server или VMWare Workstation.
    Кстати VMWare iESX (бывший ESX 3i) так же поддерживает паравиртуализацию.

    Ну и напоследок, для тех кто решил виртуализировать Windows на Xen существует проект проект GPLPV — набор паравиртуальных драйверов, которые позволят избавиться от медленной эмуляции IOEMU(сеть, диск и прочий I/O).
  • 0
    А можно ли получить доступ к гостевой системе не зная пароля к ней, а имея рутовый доступ к хост-системе? Интересует на сколько защищены мои данные на VPS/VDS хостинге (диск зашифрован TrueCrypt).
  • 0
    Все отлично, только у меня почему-то при трех domU с дебианом, dom0 yа убунте валится в оops при любой активности выше среднего, начиная от md5sum, и бактрекер убунтовский завален реквестами на баг типа этого.
  • 0
    А разные патчи kernel'а совместимы между собой? Мне нужно ядро одновременно для виртуализации и L7 шейпинга пропатчить…

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