Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР 135, МАРТ 2010 г.

Обзор панелей управления виртуальными серверами

Сергей «grinder» Яремчук (grinder@synack.ru)

Любая серверная технология должна априори поддерживать возможность удаленного управления, без этого она не будет интересна широкому кругу пользователей, а значит, не получит признания. И системы виртуализации, которые становятся все популярнее, только подтверждают это правило. В статье рассмотрим решения, при помощи которых можно удаленно управлять виртуальными машинами.

Ядерный OpenVZ

Для начала разберем типичную ситуацию: есть мощный сервер, и есть желание заработать, продажей места под хостинг. Самым простым и дешевым вариантом "нарезать" физический сервер на виртуальные является использование OpenVZ (OpenVZ.org) – расширения к ядру Linux, реализующего концепцию виртуальной среды (Virtual Environments, VE). Виртуализация производится на уровне экземпляров ОС, при этом одно ядро используется для всех VE (ядро обеспечивает виртуализацию, изоляцию, управление ресурсами и сохранение текущего состояния каждого виртуального частного сервера). Минус OpenVZ очевиден: в качестве гостевых операционных систем можно использовать только дистрибутивы Linux. Но зато улучшается масштабируемость (поддерживается до 4096 процессоров и до 64 Гб оперативной памяти), упрощается управление, а накладные расходы не превышают 1-3%. Все процессы разделены и полностью изолированы друг от друга, каждый выполняется в своем адресном пространстве, виртуальное сетевое устройство (venet) позволяет иметь свой IP и правила маршрутизации. Именно поэтому OpenVZ так популярен в системах хостинга: клиент получает любое количество выделенных виртуальных серверов со своими приложениями, которые внешне выглядят как отдельные сервера, но построены на основе одной аппаратной платформы.

Рассмотрим установку OpenVZ в Ubuntu/Debian. Основная система должна быть 64-битной, так как в этом случае имеется возможность использования 64-битных шаблонов ОС. А ряд ограничений 32-битных ОС (например, максимальный объем ОЗУ в 4 Гб) лимитирует нас по количеству серверов и возможности дальнейшего расширения. Документация Ubuntu рекомендует использовать для хранения образов виртуальных машин систему управления дисковым пространством LVM, что позволит выполнять процедуру резервного копирования с нулевым временем простоя (Zero Downtime Backup) и избежать проблем при подключении новых дисков.
Первым делом нужно отключить систему защиты SELinux или AppArmor. Проверяем текущее состояние:

$ dmesg | grep SELinux
SELinux: Disabled at boot.

$ dmesg | grep -i AppArmor
AppArmor: AppArmor initialized
AppArmor: AppArmor Filesystem Enabled

Останавливаем работу AppArmor и удаляем его за ненадобностью:

$ sudo/etc/init.d/apparmor stop
$ sudo update-rc.d -f apparmor remove
$ sudo apt-get remove apparmor apparmor-utils

Отключить SELinux можно разными способами. Например, указать параметр "selinux=0" в параметрах ядра, в настройках загрузчика menu.lst: "kernel .... selinux=0", либо в /etc/sysconfig/selinux установкой "selinux=disabled". Отключить немедленно можно командой:

$ sudo setenforce 0

Ubunt'овское ядро, используемое по умолчанию, не поддерживает OpenVZ, но в официальном репозитарии уже имеется для этого все необходимое. Кроме того, можно скачать последнюю версию ядра с сайта OpenVZ и собрать ядро самостоятельно. Разработчики OpenVZ предлагают RPM пакеты для RHEL и репозитарий для Ubuntu 8.04 LTS. Чтобы его подключить, в файл /etc/apt/sources.list следует добавить строчку:

deb http://download.openvz.org/ubuntu hardy experimental

Обновляем список пакетов и смотрим, что нам могут предложить:

$ sudo apt-get update
$ sudo apt-cache search openvz

Ставим самое последнее ядро вместе с утилитами управления:

$ sudo apt-get install linux-openvz vzctl vzquota

Теперь необходимо изменить некоторые системные настройки, для этого правим /etc/sysctl.conf:

$ sudo nano /etc/sysctl.conf

# Включаем форвардинг, отключаем ARP прокси
net.ipv4.conf.default.forwarding=1
net.ipv4.conf.default.proxy_arp=1
net.ipv4.ip_forward=1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0
# Включаем магические SysRq клавиши (подробнее об использовании SysRq читай в статье "Секреты горячего администрирования" из X_03_2008)
kernel.sysrq = 1

Сохраняем изменения и применяем их:

$ sudo sysctl -p

Если VM будут использовать диапазон IP-адресов, отличный от реальной системы, то в конфиге OpenVZ параметру NEIGHBOUR_DEVS присваиваем значение all:

$ sudo nano /etc/vz/vz.conf

NEIGHBOUR_DEVS=all

Проверяем наличие записи о новом ядре в конфиге загрузчика (она вносится автоматически при установке пакета):

$ grep openvz /boot/grub/menu.lst

Следующий шаг необязательный, но желательный: многие утилиты OpenVZ по умолчанию используют в качестве домашнего каталог /vz. Поэтому создадим символическую ссылку, чтобы избежать возможных проблем:

$ sudo ln -s /var/lib/vz /vz

После перезагрузки с новым ядром скачиваем в /vz/template/cache шаблоны систем, которые будем использовать для виртуализации (полный список смотри на wiki.openvz.org/Download/template/precreated). Например Ubuntu:

$ wget -c http://download.openvz.org/template/precreated/contrib/ubuntu-8.04.2-i386-minimal.tar.gz
$ sudo cp -v ubuntu-8.04.2-i386-minimal.tar.gz /vz/template/cache

Внутри архива содержится минимальная система. Она не локализована, но это можно исправить уже в процессе использования. При массовом же развертывании лучше локализовать VM в контейнере, из которого и создать новый шаблон. В интернете можно найти сторонние сборки для OpenVZ, например modernadmin.com/downloads/?d=ostemplates/xen.

Разборки с WebVZ

Панель WebVZ (webvz.sf.net) – достаточно легкий и простой в использовании инструмент для управления OpenVZ, написанный на Ruby. Имеет встроенный веб-сервер (Webrick), для хранения данных используется БД SQLite. При помощи WebVZ можно:

  • управлять контейнерами OpenVZ (создавать, запускать, останавливать, удалять);
  • переносить контейнеры в другой Host Node;
  • создавать и управлять файлами конфигурации OpenVZ, назначать IP-адреса;
  • управлять шаблонами - копировать, создавать, удалять;
  • управлять работой OpenVZ;
  • создавать резервные копии и восстанавливать работу VM;
  • управлять доступом;
  • получать отчеты по работе контейнеров.

И – многое другое. Одним словом, все, что обычно приходилось делать при помощи консольных команд или самописных скриптов.
Процесс инсталляции WebVZ не сложнее установки любого веб-приложения. Управление консолью производится через 8887 и 8888 порты, поэтому их следует открыть в firewall.

Для начала нам понадобятся все необходимые компоненты Ruby и SQLite. Пакеты для установки Rails (rubyonrails.org) уже есть в репозитарии, но они обычно запаздывают. Так, на момент написания этих строк в репозитарии находилась версия 2.0.2, тогда как для работы текущей версии WebVZ требуется Rails 2.3.2 (последняя 2.3.5, но нужна именно 2.3.2, хотя это требование легко обойти). В Ubuntu имеется специальный проект Ubuntu on Rails Team (launchpad.net/~ubuntu-on-rails), предлагающий обновленные пакеты для разработчиков Ruby. Подключаем поддерживаемый ими репозитарий, прописав в source.list:

deb http://ppa.launchpad.net/ubuntu-on-rails/ppa/ubuntu hardy main
deb-src http://ppa.launchpad.net/ubuntu-on-rails/ppa/ubuntu hardy m
ain

Добавляем ключ, чтобы APT не ругался:

$ sudo apt-key adv --keyserver keyserver.ubuntu.com
--recv-keys B6C6326781C0BE11

Теперь ставим компоненты:

$ sudo apt-get install ruby rubygems libsqlite3-ruby
sqlite3 irb libopenssl-ruby libreadline-ruby rdoc

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

$ sudo gem update --system

Если после этого команда «gem install» не сработает, надо установить rubygems при помощи архива с исходными текстами:

$ wget -c http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz
$ tar xzvf rubygems-1.3.5.tgz
$ cd rubygems-1.3.5
$ sudo ruby setup.rb
$ sudo ln -s /usr/bin/gem1.8 /usr/bin/gem

Теперь можно ставить Rails. Как уже говорилось, WebVZ требует версию 2.3.2, которую можно установить командой:

$ sudo gem install -v=2.3.2 rails

Если не использовать "-v=2.3.2", будет инсталлирована последняя актуальная версия, с которой WebVZ откажется запускаться, но проблема решается правкой переменной RAILS_GEM_VERSION в файле config/environment.rb. У меня при:

$ rails -v
Rails 2.3.5

WebVZ работал стабильно и без проблем. Теперь настала очередь WebVZ. В последнее время архивов разработчики не предлагают, поэтому будем ставить из Git. Добавим нужные пакеты:

$ sudo apt-get install git-core

Создаем локальную копию репозитария WebVZ:

$ git-clone git://github.com/shuaibzahda/webvz.git

Переносим каталог webvz в более подходящее место, например в /var. Установка не требуется, просто переходим внутрь каталога и запускаем:

$ cd webvz/
$ sudo ruby script/server
=> Booting WEBrick
=> Rails 2.3.5 application starting on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2010-01-29 14:08:01] INFO WEBrick 1.3.1
[2010-01-29 14:08:01] INFO ruby 1.8.6 (2007-09-24) [i486-linux]
[2010-01-29 14:08:01] INFO WEBrick::HTTPServer#start: pid=6365 port=3000

Консоль закрывать нельзя, это потушит серверный процесс, кроме того, в процессе обращения к WebVZ сюда будут выводиться логи. Впоследствии, когда все будет работать нормально, добавим в вызов параметр '-d':

$ sudo ruby script/server -d
=> Booting WEBrick
=> Rails 2.3.5 application starting on http://0.0.0.0:3000

И создадим простенький скрипт /etc/init.d/webvz:

cd /usr/local/webvz/ && /usr/bin/ruby -d script/server
exit 0

Запускаем браузер и пробуем подключиться к указанному порту: http://192.168.1.200:3000/. Регистрируемся, используя логин "admin" и пароль "admin123". Основные настройки WebVZ производятся в пяти вкладках – Containers, OS-Templates, Configuration files, OpenVZ (старт и останов) и Users. Для пользователя с правами клиента доступны только Containers и Personalize (для смены персональной информации). В каждой вкладке находятся еще 3-4 дополнительных подпункта.

Начнем с Users, в которой создаются, удаляются, активируются и отключаются учетные записи. По умолчанию здесь уже имеется пользователь admin, выбираем его и для смены пароля нажимаем "Change Password". Новые учетные записи создаются достаточно просто, при этом пользователь может получить права администратора (Administration) или клиента (Client).

В OS-Templates находим список установленных шаблонов для OpenVZ. Используя гиперссылки, можно удалить шаблон, скопировать его на удаленный сервер, пересобрать шаблон из контейнера, здесь же доступна ссылка на другие шаблоны на сайте OpenVZ.

Чтобы создать новый контейнер, выбираем Containers?New Container и заполняем предложенную форму, указав или выбрав при помощи раскрывающего списка владельца, ОС, файл настроек, ID, имя, IP-адрес, имя узла, DNS-сервер и пароль root. После нажатия кнопки Create получим данные о созданном контейнере. Все достаточно просто и не требует какой-либо подготовки. Выбрав контейнер, его можно отредактировать, удалить, перезагрузить, создать резервную копию и произвести миграцию.

Если теперь перейти в OS-Templates?Re-Create Template, получим возможность пересобрать шаблон из контейнера.

Панель управления HyperVM

HyperVM (lxcenter.org) – популярная панель управления фермой как физических, так и виртуальных серверов (VPS/VDS). Продуманный интерфейс, построенный с применением веб-технологий, позволяет создавать виртуальные машины даже неискушенному пользователю. Несмотря на то, что HyperVM сделает за тебя достаточно много работы, потратить некоторое время на его изучение и привыкнуть к особенностям панели все-таки придется. В настоящее время поддерживаются две технологии виртуализации – OpenVZ и Xen. В панели нет ограничений по единовременно используемым технологиями и платформам, их можно использовать в любой комбинации.

Для удобства конфигурирования применяются системы планирования использования ресурсов (Resource Plan), в которых указываются предустановки: количество VPS, дисковая квота, гарантированное ОЗУ, трафик и так далее. Интерфейс един как для Xen, так и для OpenVZ, большая часть параметров касается обеих технологий, но нужно быть внимательным, так как встречаются настройки "OpenVZ Only" и "Xen Only".

Среди дополнительных возможностей панели HyperVM – управление сертификатами, настройками SSH, ввод команд оболочки, вывод списков сервисов и процессов с возможностью останавливать любые из них, отчеты по работе виртуальных машин. Внешний вид можно изменить при помощи скинов и цветовых схем, для быстрых каналов можно активировать поддержку Ajax.

В качестве меры безопасности предлагается указать диапазоны разрешенных IP-адресов, с которых можно подключаться к панели, и блокируемые айпишники.

Некоторое время исходные коды HyperVM были закрыты, но после взлома серверов хостинг-провайдера Vaserv (июнь 2009) LxLabs поменяла лицензию на AGPL-3.0, а исходный код стал доступен в SVN репозитарии и в виде архивов.

Установка проста, но поддерживаются только RHEL-based дистрибутивы (рекомендуется CentOS). В других системах можно даже не стараться, получим ошибку: "This Operating System is Currently Not supported".

Скачиваем установочный скрипт и отправляем его на выполнение (в качестве параметра virtualization-type указывается тип виртуализации – xen/openvz/NONE):

$ wget -c http://download.lxcenter.org/download/hypervm/production/hypervm-install-master.sh
$ sudo sh ./hypervm-install-master.sh --virtualization-type=openvz

Вот и вся установка. Если планируется развернуть целый кластер, то hypervm-install-master.sh используем на первом сервере, в остальных случаях – hypervm-install-slave.sh.

Инструменты для управления Hyper-V

В последнее время Microsoft активно продвигает технологию Hyper-V, которая доступна в виде роли в Windows 2008 всех версий, или отдельного продукта Microsoft Hyper-V Server 2008 (он, кстати, является бесплатным). Hyper-V был детальным образом "проработан" в статье "Гиперактивная виртуальность" (X_02_2009), поэтому не отвлекаемся на пение дифирамбов и описание возможностей, а сразу переходим к рассмотрению инструментов, упрощающих его настройку.

Для локального и удаленного управления настройками Hyper-V предлагается достаточно много утилит, взять хотя бы для примера комплект "Hyper-V Tools", позволяющий управлять Hyper-V удаленно, или диспетчер Hyper-V (Hyper-V Manager). Последний может устанавливаться на другом компьютере, работающем под управлением Win2k8 и выше, вне зависимости от наличия на нем роли Hyper-V. При этом сам сервер, которым мы будем управлять, может быть развернут как в полном варианте, так и в сокращенном (Server Core). Пользователям Vista предлагается диспетчер для Hyper-V (support.microsoft.com/kb/952627 с обновлением support.microsoft.com/kb/970203). Подобный инструмент для Win7 не поставляется отдельно, он включен в комплект Remote Server Administration Tools for Windows 7 (RSAT), куда входит еще ряд консолей, позволяющих настроить, помимо Hyper-V, сервисы Active Directory, DHCP, DNS, файловый, RDP, а также компоненты BitLocker, GPO, Network Load Balancing и т.д. Ссылку для закачки RSAT for Win7 не даю, ее очень просто найти через гугл.

Для удаленного управления не забываем разрешить нужные соединения в настройках Windows Firewall:

> netsh advfirewall firewall set rule group="Windows Management Instrumentation (WMI)" new enable=yes

Также необходимо предоставить пользователю право на удаленный запуск DCOM запросов в консоли DCOMcnfg.exe.

В промышленной среде настройка удаленного доступа для большого количества пользователей с разными правами и возможностями превращается в довольно-таки нетривиальную задачу. Упростить все настройки, необходимые для удаленного управления Hyper-V, призван сценарий HVRemote (Hyper-V Remote Management Configuration Utility, code.msdn.microsoft.com/HVRemote). С его помощью можно добавить или удалить учетную запись, рабочую группу и домен, открыть нужные порты в WF и диагностировать проблемы.
Например, чтобы делегировать право пользователю, достаточно дать команду:

> cscript hvremote /add:synackuser

Удалить также просто:

> cscript hvremote /remove:synackuser

Чтобы установить на клиенте исключение для MMC в Windows Firewall, набираем:

> cscript hvremote.wsf /mmc:enable

Вывести и проверить текущую конфигурацию можно следующим образом:

> cscript hvremote.wsf /show /target:computername

Среди других доступных инструментов следует отметить Hyper-V Powershell Snap in (powershellhyperv.codeplex.com) – небольшую программу, предназначенную для управления доступом и настройками удаленного Hyper-V сервера. В настоящее время разработчиками предлагаются лишь исходные тексты, и для его сборки потребуется Visual Studio. Библиотека PowerShell management Library for Hyper-V (pshyperv.codeplex.com) содержит около 80 дополнительных PowerShell-команд, позволяющих добавлять, удалять, настраивать VM, управлять виртуальным оборудованиям, работать с VHD-файлами и получать информацию о текущем состоянии VM.

Веб-интерфейс управления Hyper-V Web Manager (HVWM, hvwm.codeplex.com), представляющий собой надстройку к провайдеру Virtualization WMI, в настоящее время находится в начальной стадии развития и позволяет лишь просмотреть список доступных VM, но уже сейчас проекту сулят большое будущее.

Небольшая утилита HyperV_Mon (www.tmurgent.com/tools.aspx) выдаст информацию о загруженности компонентов VM в более удобной форме, чем обычный диспетчер задач ОС. И хотя HyperV_Mon не предназначен для повседневного мониторинга, он позволяет разобраться с тем, что происходит в VM.

Компания Citrix Systems порадовала системных администраторов и IT-специалистов, выпустив бесплатный продукт Citrix Essentials for Hyper-V Express Edition (deliver.citrix.com/go/citrix/ehvexpress). С его помощью можно довольно просто управлять двумя хостами Hyper-V, которые подключены к единому Fibre Channel или iSCSI хранилищу.

И, наконец, самым мощным решением является диспетчер виртуальных компьютеров SCVMM 2008 (System Center Virtual Machine Manager, microsoft.com/systemcenter/virtualmachinemanager), он дает возможность управлять физической и виртуальной инфраструктурой, причем не только Hyper-V, но и Microsoft Virtual Server 2005, а также VMware ESX/ESXi, переносить физические в виртуальную среду и многое другое.

Заключение

Инструменты удаленного управления позволяют на порядок упростить настройку любого количества виртуальных машин не только подготовленному администратору, но и пользователю, обладающему весьма поверхностными знаниями об используемых технологиях. Очевидно, рынок решений виртуализации сегодня насыщен как никогда, и победит тот хостер, который предоставляет клиентам больше удобных инструментов.

Live Migration

Физические сервера нуждаются в обслуживании, обновлении ПО или замене аппаратных компонентов. В обычной ситуации, один сервер – одна ОС, проблема его временной остановки достаточно тривиальна, и отключение на пару минут может пройти незамеченным. А, что делать, если одновременно работающих виртуальных серверов насчитывается не один десяток? Их остановка может сильно ударить по репутации компании. Вот здесь на помощь приходит технология переноса виртуальных машин между узлами кластера в реальном времени без их остановки – Live Migration. Такая технология присутствует в продуктах практически всех игроков – Hyper-V, XenEnterprise, VMware (называется VMotion). При этом время переключения достаточно мало (около 60–300 мс), клиенты даже не замечают, что VM находится уже на другом сервере, а все TCP-соединения сохраняются.

Процесс выглядит достаточно просто: состояние VM описывается набором файлов, которые доступны в общем хранилище как исходному, так и целевому серверу. В процессе инициализации через сеть переносятся лишь данные о точном состоянии VM, в частности памяти. Хотя относительно небольшой размер информации переносится практически мгновенно, некоторые ячейки памяти успевают измениться, поэтому процесс повторяется несколько раз до полной синхронизации. Так как сетевые интерфейсы VM виртуализированы, идентификаторы сохраняются, и подключения не разрываются.

Proxmox Virtual Environment

Proxmox VE (http://pve.proxmox.com/wiki/Main_Page) – специализированный Linux дистрибутив для развертывания виртуальных серверов на базе OpenVZ и KVM. Сразу после установки пользователь получает полностью готовую систему виртуальных серверов промышленного уровня с управлением через web-интерфейс и поддержкой кластеризации, включая возможность миграции виртуальных окружений с одного узла на другой без остановки работы.

  • Текущая версия – 1.5
  • Лицензия – GPLv2
  • Размер инсталляционного ISO-образа – 327 Мб

Этот дистрибутив ты найдешь на прилагаемом к журналу DVD-диске.

Vtonf

Vtonf (http://sourceforge.net/projects/vtonf) – свободно распространяемая веб-панель для управления виртуальными частными серверами на базе OpenVZ. С ее помощью легко создавать и управлять виртуальными машинами. На данный момент Vtonf доступна для RedHat, Fedora и CentOS.

INFO

  • OpenVZ – средство для создания изолированных виртуальных серверов.
  • При использовании OpenVZ основными ограничивающими факторами являются скорость процессора и объем оперативной памяти.
  • Помимо ограниченности в выборе гостевой операционки (только Linux-дистрибутивы), у OpenVZ есть еще один минус: все контейнеры используют общий дисковый кэш и общий раздел подкачки.
  • Оснастка Authorization Manager (AzMan.msc) предназначена для более точного делегирования полномочий на управление VM в среде Hyper-V.
  • Microsoft включит возможности управления Hyper-V в комплексное средство управления инфраструктурой среднего и малого бизнеса System Center Essentials 2010 (SCE).

WWW

VIDEO

На прилагаемом к журналу диске ты найдешь видеоролик, в котором показан процесс установки OpenVZ + WebVZ на Ubuntu Linux.

Содержание
ttfb: 12.171983718872 ms