Журнал LinuxFormat - перейти на главную

LXF130:OpenVZ

Материал из Linuxformat
Версия от 14:29, 18 апреля 2011; Crazy Rebel (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск
Hardcore Linux Проверьте себя на крутом проекте для продвинутых пользователей

Содержание

OpenVZ: Ас виртуализации

Избегаете виртуализации изза нагрузки на процессор? Маянк Шарма покажет невероятно быстрый способ, даже без специального оборудования.

Программное обеспечение для виртуализации бывает всевозможных форм и размеров. То, что предназначено для пользователей настольных систем, такое как VMware Workstation и Sun VirtualBox, снабжено легким в использовании графическим интерфейсом, но за это приходится платить производительностью. Более продвинутое, типа KVM и Xen, быстрее, но требует специальных процессоров с расширением для виртуализации. Ну, а еще есть OpenVZ.

Свободное от компьютерного жаргона определение OpenVZ дать достаточно сложно. С его помощью вы запускаете множество установок операционных систем внутри множества изолированных областей, известных как контейнеры. Это подобно механизму Jails из FreeBSD и технологии Solaris Zones.

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

Главное отличие OpenVZ от других решений виртуализации заключается в скорости. OpenVZ работает на системном уровне, что делает его весьма энергичным – на загрузку уходит секунд пять, а приложения запускаются вообще мгновенно. Расплатой за скорость является невозможность запускать внутри контейнеров ничего, кроме Linux. Мы не можем помочь вам найти причину для запуска Linux внутри Linux, но вот подскажем, как заставить его работать с OpenVZ.

Прежде чем начать, прочитайте врезку про требования к аппаратным узлам (это то, что в OpenVZ зовется хостом), где говорится о настройке хоста.

Так как OpenVZ работает на уровне операционной системы [его обычно называют уровнем ядра, – прим. пер.], то он нуждается в слиянии с ядром. Мы сделаем это всего одной командой. Заберите двоичный RPMпакет ядра OpenVZ с http://wiki.openvz.org/Download/kernel. Там имеются три ветви, различающиеся по стабильности. Сайт рекомендует ветвь RHEL5. Каждая ветвь содержит перечень ядер; выбрать нужно то, что подходит к вашему оборудованию. Там есть различные ядра для мультипроцессорных хостов (узлов) и для машин с более чем 4 ГБ ОЗУ. Все ядра доступны в версиях и для 32битных, и для 64битных процессоров. Чтобы выбрать правильное ядро, тщательно изучите информацию на странице загрузки. Допустим, вам требуется типовое, суперстабильное ядро RHEL4 – установите его командой

rpm ivh ovzkernel2.6.9023stab051.3.i686.rpm

Когда ядро установится, оно заодно модифицирует ваш Grub для загрузки в ядро OpenVZ. Но это потребует некоторой доводки, поэтому откройте конфигурационный файл Grub (обычно /boot/grub/grub.conf) и поищите загружающую ядро запись со словом stab.

Давайте его загрузим

Так как эта строка загружает ядро OpenVZ, для ясности измените заголовок на OpenVZ. Также удалите лишние загрузочные параметры ядра, чтобы строки выглядели примерно так:

title OpenVZ (2.6.9023stab051.3)
root (hd0,0)
kernel /vmlinuz 2.6.9023stab051.3 ro root=/dev/sda5
initrd /initrd2.6.9023stab051.3.img

Убедитесь, что эта запись выбрана для загрузки по умолчанию.

Следующим шагом нужно поправить файл /etc/sysctl.conf для установки некоторых параметров ядра для OpenVZ. Для этого нужно всего лишь добавить в файл следующие строки:

net.ipv4.ip_forward = 1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.conf.all.rp_filter = 1
kernel.sysrq = 1
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0

OpenVZ не очень дружит с SELinux, поэтому обеспечьте, чтобы у вас в /etc/sysconfig/selinux стояло SELINUX=disabled.

Наконец, скачайте два инструмента OpenVZVzctl и Vzquota (опять же, оба зависят от вашего оборудования) с http://wiki.openvz.org/Download/utils и установите их с помощью:

rpm ivh vzctl*.rpm vzquota*.rpm

Теперь перезагрузите свой аппаратный узел, что должно активировать службу OpenVZ и привести все «в движение».

Готовые контейнеры

Контейнер в OpenVZ – почти то же, что виртуальная машина в VirtualBox. По существу, это полноценная Linuxсистема. Вы можете либо пройти через процесс создания своего собственного контейнера, либо взять готовый с сайта OpenVZ (http://wiki.openvz.org/Download/template/precreated). Существуют и созданные пользователями контейнеры, и все вместе они покрывают основные популярные дистрибутивы. Контейнеры избавлены от таких крайностей, как X, и составляют лишь часть от реального размера дистрибутива.

Скачав шаблон, поместите его в директорию /vz/template/cache на аппаратном узле. Теперь трансформируем этот контейнер в рабочую Linuxмашину, известную как Virtual Private Server [Виртуальный частный сервер] или VPS. Каждый VPS имеет уникальный IDOpenVZ резервирует ID от 0 до 100. Хорошей идеей будет использовать в качестве ID последнюю цифру IPадреса, который вы выдадите VPS. Держа это в голове, создадим VPS с 32битным шаблоном Debian3.1:

# vzctl create 150 ostemplate debian3.1x86 config vps.basic
Creating container private area (debian3.1x86)
Performing postcreate actions
Container private area was created

У всех VPS есть личное пространство и параметры настройки на основе эталонного файла конфигурации. Личное пространство, созданное из шаблона – это директория, содержащая файлы, которые относятся к VPS. Оно монтируется как /vz/root/<vpsid>/ на аппаратном узле и предоставляет пользователям VPS полноценное дерево файловой системы Linux. Примеры конфигурационных файлов находится в директории /etc/sysconfig/vz-scripts. Файл vps.basic содержит параметры управления ресурсами, подходящие для большинства VPS. Пробудите VPS с помощью:


# vzctl start 150
Starting container ...
Container is mounted
Setting CPU units: 1000
Configure meminfo: 65536
Container start in progress...

Независимо от вашего оборудования, это займет не более пяти секунд – вдумайтесь: за столь короткое время запустится полноценная Linuxсистема. Видел бы это VirtualBox! Давайте исследуем наше новое творение чуть подробнее, набрав

#vzlist a
CTID NPROC STATUS IP_ADDR HOSTNAME
150   8   running             

Эта команда показывает список всех VPS на аппаратном узле, их текущее состояние, сетевую информацию и число запущенных процессов. Вы можете проверить последнее с помощью

# vzctl exec 150 ps
PID TTY TIME CMD
1 ? 00:00:00 init
20362 ? 00:00:00 syslogd
20371 ? 00:00:00 sshd
20388 ? 00:00:00 xinetd
20468 ? 00:00:00 cron
20473 ? 00:00:00 apache2
21505 ? 00:00:00 sendmailmta
21510 ? 00:00:00 ps

Ключ exec запускает любую команду в заданном VPS. Вы можете также использовать vzctl для установки пароля пользователя:


# vzctl set 150 --userpasswd root:нечто_длинное

Теперь можно войти в VPS через SSH от имени root и администрировать его как обычный самостоятельный Linux-компьютер.

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

# vzctl enter 150
entered into CT 150
localhost:/#

А теперь напрягитесь чуть больше и создайте пользователя, как если бы вы были в обычной командной строке Linux:

:/# useradd bodhi
:/# passwd bodhi
:/# mkdir /home/bodhi
:/# chown bodhi /home/bodhi

Для выхода наберите

:/# exit
logout
exited from CT 150

Наигравшись, обеспечьте автозапуск VPS после перезагрузки аппаратного узла:

# vzctl set 150 --onboot yes --save

Параметр --save делает настройки постоянными. Не добавляйте его, если вы экспериментируете с настройками. Для удаления VPS, предварительно убедившись, что он не запущен, используйте

# vzctl stop 150
Stopping container ...
Container was stopped
Container is unmounted
# vzctl destroy 150
Destroying container private area: /vz/private/150
Container private area was destroyed

Конфигурационный файл VPS не уничтожается, но к его имени добавляется .destroyed, например: /etc/sysconfig/vz-scripts/150.conf.destroyed. Вы можете удалить его вручную.

Сеть и ПО

Теперь перейдем к реальным задачам, таким как сеть и установка приложений. Как любая машина, VPS нуждается в IP-адресе, чтобы быть доступным в сети. Для простоты мы будем использовать Network Address Translation (NAT). Вы можете также установить пакет bridge-utils на аппаратный узел и настроить мост. Хорошей новостью насчет OpenVZ будет то, что он позволяет назначать и удалять сетевые настройки даже при работающем VPS.

Первым делом проверьте, что у вас на аппаратном узле включена трансляция IP-пакетов, набрав

# cat /proc/sys/net/ipv4/ip_forward 
1

Оставаясь на аппаратном узле, включите NAT:

# iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o eth0 -j SNAT --to 192.168.2.3

Чтобы заставить эту команду работать с вашей сетью, вам нужно модифицировать только три вещи. Сперва замените 10.0.0.0/8 на диапазон частных IP-адресов, которые вы хотите дать VPS. Далее, замените eth0 на ваше сетевое устройство и 192.168.2.3 на IP аппаратного узла. Когда закончите, задайте IP-адрес для вашего VPS с помощью


# vzctl set 150 --ipadd 10.1.1.150 --save
Adding IP address(es): 10.1.1.150
Saved parameters for CT 150
Затем задайте DNS:
# vzctl set 150 --nameserver 208.67.222.222 --save
File resolv.conf was modified
Saved parameters for CT 150

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

Запустив сеть, приступим к загрузке приложений в ваш VPS. Эта процедура не отличается от обычных дистрибутивов Linux – потребуется только настройка менеджера пакетов. Так как наш VPS «крутит» Debian, это будет почтенный apt-get. Отредактируйте файл /etc/apt/sources.list внутри VPS, как если бы это был Linux на обычной машине, и добавьте или удалите репозитории. Затем извлеките все, что вам нужно, из репозиториев с помощью apt-get install.

Запуск графических приложений все же требует больше кунг-фу командной строки, чем простое использование apt-get. Давайте попробуем сделать это с Iceweasel. Сперва убедимся, что в конфигурационном файле sshd (обычно это /etc/ssh/sshd_config) включен X-проброс внутри VPS:

X11Forwarding yes

Также нужно обеспечить установку в VPS пакета xauth. Если его нет, добавьте его из локального репозитория. Наконец, перезапустите SSH-сервис:

:/# /etc/init.d/ssh restart

Теперь вернитесь назад на аппаратный узел подключитесь к VPS через SSH:

# ssh -2 -c blowfish -X bodhi@10.1.1.150

Тут вас попросят ввести пароль пользователя. После успешной аутентификации, просто запустите приложение, подивившись на скорость:

$ iceweasel

Управляем ресурсами

Большая разница между OpenVZ и другими известными решениями для виртуализации заключается в том, что VPS могут масштабироваться для потребления всех ресурсов аппаратного узла. Чтобы ограничить это, можно задать жесткие лимиты на использование ресурсов – дискового пространства, памяти или нагрузки на процессор. Существует несколько способов изменения настроек контейнера. Один использует команду vzctl, второй заключается в правке конфигурационного файла. Для нашего Debian-контейнера им будет /etc/sysconfig/vz-scripts/150.conf.

Давайте ограничим использование процессора нашим контейнером. OpenVZ учитывает потребление CPU в процентах от полной мощности аппаратного узла. Эта мощность рассчитывается на основе специального алгоритма OpenVZ. Вы можете проверить величину полной мощности вашего аппаратного узла, выполнив:

#vzcpucheck
Current CPU utilization: 2000
Power of the node: 103730

Чтобы выделить 10 % процессора контейнеру, сперва вычислим значение мощности (103,730 * 0.1) – округленно, это даст нам 1500 единиц. Также нам необходимо задать максимальное превышение, чтобы убедиться, что контейнер не вызовет перегрузки процессора. Ограничим контейнер 20 % от полного использования, набрав следующее:



# vzctl set 150 cpuunits 1500 cpulimit 20 save
Setting CPU limit: 20
Setting CPU units: 1500
Saved parameters for CT 150

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

# vzctl exec 150 df h
Filesystem Size Used Avail Use% Mounted on
simfs 1.0G 625M 400M 62% /
tmpfs 187M 0 187M 0% /dev/shm

В зависимости от применения вашего VPS, изначальных 1 ГБ может не хватить. Прежде чем увеличить его до 5 ГБ, уясним две вещи. Первая – как и настройки CPU, дисковое пространство сразу целиком не выделяется. Вместо этого задается предел, до которого может расти контейнер. Вторая – необходимо задать максимальный лимит (например, 6 ГБ), что даст вам буфер в 1 ГБ. Такое свободное пространство позволяет добавить VPS места без фатальных ошибок диска. Итак, чтобы увеличить диск до 5 ГБ с максимальным лимитом в 6 ГБ, используйте

# vzctl set 150 diskspace 5G:6G save
Saved parameters for CT 150

Существуют и другие вещи, на которые можно повлиять. Взгляните на конфигурационный файл контейнера, а также на manстраницу Vzctl, чтобы найти параметры, с которыми вы можете поиграть.

Графический интерфейс

Если вы любитель пощелкать мышью, не отворачивайтесь от нашего урока изза всех этих командных строк: у OpenVZ есть графический webинтерфейс, называемый WebVZ. С его помощью можно создавать контейнеры, перемещать их с одного аппаратного узла на другой, модифицировать настройки, конфигурировать сеть, следить за ресурсами и делать много чего еще.

WebVZ требует Ruby on Rails, поэтому вам нужно разжиться ruby и rubygem через менеджер пакетов или установив их из исходных кодов. Gems – это менеджер пакетов Ruby, и вы можете привлечь его для установки Rails простой командой gems install rails. Помните, что это надо делать на аппаратном узле, а не внутри VPS.

WebVZ также требует базу данных SQLite и ее библиотеки разработчика. Обратитесь к менеджеру пакетов аппаратного узла и установите пакет libsqlite3-dev, который также добавит менеджер базы данных. Для подключения его к Ruby, используйте менеджер пакетов Gem для установки коннектора SQLite:

gem install sqlite3ruby

Когда все будет подготовлено, заберите последний tar-архив WebVZ с https://github.com/shuaibzahda/webvz/tree и распакуйте его в какую-либо директорию. Запустите сервер WEBrick, управляющий страницами WebVZ:

$ cd webvz
$ ruby script/server
=> Booting WEBrick
=> Rails 2.3.4 application starting on http://0.0.0.0:3000
=> Call with d to detach
=> CtrlC to shutdown server
[20091118 20:00:19] INFO WEBrick 1.3.1
[20091118 20:00:19] INFO ruby 1.8.7 (20090612) [i686 linux]
[20091118 20:00:19] INFO WEBrick::HTTPServer#start:
pid=23235 port=3000

Вывод сообщает, что сервер запущен на localhost и доступен на порту 3000. Открыв браузер, укажите ему http://localhost:3000. Имя пользователя и пароль по умолчанию – admin и admin123.

Все, кто содержат собственные сайты или запускают сервер файлообмена между домом и работой, должны пересесть на OpenVZ – это намного быстрее и безопаснее. Вот вам и достаточное основание для запуска Linux внутри Linux.


Live CD OpenVZ

Хотите избежать утомительного процесса подготовки аппаратного узла и оснащения его подходящим ядром? Тогда раздобудьте LiveCD OpenVZ. Это идеал для оценки возможностей платформы виртуализации OpenVZ. Есть два вида LiveCD – один базируется на Knoppix 5.1.1, а другой на CentOS 4.4. Вы можете скачать их с http://wiki.openvz.org/Download_live_CD.

LiveCD предлагают различные ядра OpenVZ, включая серию 2.9 на основе RHEL 4, серию ядра 2.18 на основе RHEL 5, новое ядро 2.20 и т.п. Также присутствуют три готовых контейнера для создания минимальных VPS на основе 32-битной версии CentOS 4, Fedora Core 5 и Debian 3.1. Они заодно укомплектованы Vzctl и Vzquota.

С помощью LiveCD вы можете полностью исследовать OpenVZ – от создания контейнеров до управления их ресурсами. А вот чего вы не сможете сделать – это установить LiveCD на жесткий диск; вдобавок на нем катастрофически мало места для развертывания GUI WebVZ.

Идеи по аппаратным узлам

Как и с остальными программами виртуализации, надежность и отказоустойчивость аппаратуры, на которой запускаются виртуальные машины, являются критическими параметрами. Сбой аппаратного узла перечеркнет все преимущества OpenVZ. На производственных машинах хорошей идеей будет использовать для хранения данных VPS RAIDмассив.

Хотя OpenVZ не имеет никаких специфических требований к аппаратуре и прекрасно себя чувствует на Celeron с 256 МБ ОЗУ, лучше найти машину помощнее, чтобы удовлетворить потребности сервисов в запущенных контейнерах.

Устанавливая дистрибутив Linux на аппаратный узел, убедитесь, что он стабилен и имеет промышленный уровень. Мы использовали CentOS 4 с суперстабильным ядром RHEL 4, но CentOS 5 с ядром RHEL 5 – тоже хорошее решение. Разбивая жесткий диск аппаратного узла при установке, желательно создать отдельный раздел /vz для размещения шаблонов и VPS отдельно от основного корня. Наконец, документация OpenVZ рекомендует использовать для этого раздела файловую систему ext3.

Персональные инструменты
купить
подписаться
Яндекс.Метрика