OpenVZ
OpenVZ |
- Разработчик:
- Сообществo, поддерживается SWsoft
- Текущая версия:
- 3.0
- Дата выхода текущей версии:
- 2006
OpenVZ — это реализация технологии виртуализации на уровне операционной системы, которая базируется на ядре Linux. OpenVZ позволяет на одном физическом сервере запускать множество изолированных копий операционной системы, называемых Виртуальные Частные Серверы (Virtual Private Servers, VPS) или Виртуальные Среды (Virtual Environments, VE).
Особенности[править | править код]
По сравнению с виртуальными машинами (напр. VMware) или паравиртуализационными технологиями (напр. Xen), OpenVZ предоставляет наименьшую гибкость в выборе операционной системы: и «хозяйская», и «гостевая» системы — Линукс (хотя разные дистрибутивы Линукса прекрасно сосуществуют в разных VE). Однако, виртуализация на уровне операционной системы в OpenVZ даёт лучшую производительность, масштабируемость, плотность размещения, динамическое управление ресурсами, а также лёгкость в администрировании, чем у альтернативных решений. Согласно сайту OpenVZ, накладные расходы на виртуализацию очень малы, и падение производительности составляет всего 1-3 %, по сравнению с обычными Линукс-системами.
OpenVZ является базовой платформой для Virtuozzo — проприетарного продукта SWsoft, Inc. OpenVZ распространяется на условиях лиценции GNU GPL.
OpenVZ состоит из модифицированного ядра Linux и пользовательских утилит.
Ядро[править | править код]
Ядро OpenVZ — это модифицированное ядро Linux, добавляющее концепцию виртуальной среды (VE). Ядро обеспечивает виртуализацию, изоляцию, управление ресурсами и чекпоинтинг (сохранение текущего состояния VE).
Виртуализация и изоляция[править | править код]
Каждая VE — это отдельная сущность, и с точки зрения владельца VE она выглядит практически как обычный физический сервер. Каждая VE имеет свои собственные:
- Файлы
- Системные библиотеки, приложения, виртуализованные ФС /proc и /sys, виртуализованные блокировки и т. п.
- Пользователи и группы
- Свои собственные пользователи и группы, включая root.
- Дерево процессов
- VE видит только свои собственные процессы (начиная с init). Идентификаторы процессов (PID) также виртуализованы, поэтому PID программы init — 1, как и должно быть.
- Сеть
- Виртуальное сетевое устройство (venet), позволяющая VE иметь свои собственные адреса IP, а также наборы правил маршрутизации и файрволла (netfilter/iptables).
- Устройства
- При необходимости администратор OpenVZ сервера может дать VE доступ к реальным устройствам, напр. сетевым адаптерам, портам, разделам диска и т. д.
- Объекты IPC
- Разделяемая память, семафоры, сообщения.
И так далее и тому подобное…
Управление ресурсами[править | править код]
Так как все VE работают поверх одного ядра, управление ресурсами чрезвычайно важно. Фактически, каждая VE должна оставаться в означенных пределах и ни коим образом не мешать другим VE — именно это и обеспечивает подсистема управления ресурсами.
Управление ресурсами в OpenVZ состоит из трёх компонентов: двухуровневая дисковая квота, честный планировщик процессора, и так называемые юзер бинкаунтеры (user beancounters). Обратите внимание, что все эти ресурсы могут быть изменены во время работы VE, перезагрузка не требуется. Скажем, если вам необходимо дать одной из VE меньше памяти, вы просто меняете соответствующий параметр на лету. В других технологиях виртуализации, например виртуальных машинах или с гипервизором, это достаточно сложно, либо невозможно.
Двухуровневая дисковая квота[править | править код]
Администратор OpenVZ сервера может установить дисковые квоты на VE, в терминах дискового пространства и количества айнодов (i-nodes, число которых примерно равно количеству файлов). Это первый уровень дисковой квоты.
В дополнение к этому, администратор VE (root) может использовать обычные утилиты внутри своей VE для настроек стандартных дисковых квот UNIX для пользователей и групп.
Если вам нужно дать VE больше дискового пространства, вы просто увеличиваете квоту. Нет необходимости изменять размеры разделов или образов диска.
Честный планировщик процессора[править | править код]
Планировщик процессора в OpenVZ также двухуровневый. На первом уровне планировщик решает, какой VE дать квант процессорного времени, базируясь на значении параметра cpuunits
для VE. На втором уровне стандартный планировщик Linux решает, какому процессу в выбранном VE дать квант времени, базируясь на стандартных приоритетах процесса в Линуксе и т. п.
Администратор OpenVZ сервера может устанавливать различные значения cpuunits
для разных VE, и процессорное время будет распределяться между VE соответственно выставленным значениям.
Также имеется функциональность ограничения процессорного времени, то есть установить, что эта VE, например, ограничена 10 % процессора.
User Beancounters[править | править код]
User Beancounters — это набор счётчиков, ограничений и гарантий на каждое VE. Имеется набор из примерно 20 параметров, которые тщательно выбраны для того, чтобы покрыть все аспекты работы VE так, чтобы никакая VE не могла злоупотребить каким-либо ресурсом, который ограничен для всего сервера, и таким образом помешать другим VE.
Ресурсы, которые считаются и контролируются — это в основном оперативная память и различные объекты в ядре, например, разделяемые сегменты памяти IPC, сетевые буферы и т. п. Каждый ресурс можно посмотреть в файле /proc/user_beancounters — для него есть пять значений: текущее использование, максимальное использование (за всё время жизни VE), барьер, лимит и счётчик отказов. Смысл барьера и лимита зависит от параметра; вкратце, о них можно думать как о мягком лимите и жёстком лимите. Если какой-либо ресурс пытается превысить лимит, его счётчик отказов увеличивается — таким образом, владелец VE может видеть, что происходит, путём чтения файла /proc/user_beancounters в своём VE.
Чекпоинтинг и миграция на лету[править | править код]
Функциональность миграции «на лету» и чекпоинтинга была выпущена для OpenVZ в середине апреля 2006. Она позволяет переносить VE с одного физического сервера на другой без необходимости останавливать/перезапускать VE. Этот процесс называется чекпоинтинг: VE «замораживается» и её полное состояние сохраняется в файл на диске. Далее этот файл можно перенести на другую машину и там «разморозить» (восстановить) VE. Задержка этого процесса (время, когда VE заморожена) — примерно несколько секунд; важно подчеркнуть, что это задержка в обслуживании, а не отказ в обслуживании.
Так как все детали состояния VE, включая открытые сетевые соединения, сохраняются, то с точки зрения пользователя VE процесс миграции выглядит как задержка в ответе: скажем, одна из транзакций базы данных заняла больше времени, чем обычно, и далее работа продолжается как обычно; таким образом, пользователь не замечает, что его сервер баз данных работает уже на другом сервере.
Эта возможность делает реальными такие сценарии, как апгрейд вашего сервера без какой-либо необходимости его перезагрузки: к примеру, если вашей СУБД нужно больше памяти или более мощный процессор, вы покупаете новый более мощный сервер и мигрируете VE с СУБД на него, а потом увеличиваете лимиты на эту VE. Если вам нужно добавить оперативной памяти в сервер, вы мигрируете все VE с этого сервера на другой, выключаете сервер, устанавливаете дополнительную память, запускаете сервер и мигрируете все VE обратно.
Пользовательские утилиты[править | править код]
OpenVZ поставляется с утилитами командной строки для управления VE (vzctl), а также с утилитами для управлением пакетами в VE (vzpkg).
vzctl[править | править код]
Это простая для пользователя утилита для управления VE. Ниже даны примеры команд vzctl.
- vzctl create VEID [--ostemplate <name>] [--config <name>]
- Эта команда создаёт новую виртуальную среду (VE) с цифровым идентификатом, равным VEID, базирующуюся на указанном (дистрибутиве Linux) и имеющую ресурсы, указанные в заданном конфигурационном файле. Обе опции --ostemplate и --config являются необязательными, умолчания для них есть в глобальном конфигурационном файле OpenVZ.
- vzctl start VEID
- Запускает данную VE. Запуск обозначает создание контекста виртуальной среды в ядре, установка всех параметров управления ресурсами, и запуск VEшного /sbin/init в этом контексте.
- vzctl stop VEID
- Останавливает данную VE. VE может также быть остановлена (или перезагружена) своим владельцем (рутом) с помощью стандартных команд Юникс /sbin/halt и /sbin/reboot.
- vzctl exec VEID <command>
- Выполняет данную команду в данном VE. Например, чтобы увидеть список процессов в VE 102, запустите vzctl exec 102 ps ax.
- vzctl enter VEID
- Открывает командную строку VE (запускает командный интерпретатор shell). Это полезно, например, если ssh демон не работает, вы не можете попасть в VE обычным способом (через ssh), и хотите это починить.
- vzctl set VEID --parameter <value> […] [--save]
- Устанавливает параметр(ы) для VE. Есть много различных параметров. К примеру, чтобы добавить VE адрес IP, запустите vzctl set VEID --ipadd x.x.x.x --save. Чтобы установить дисковую квоту на VE, запустите vzctl set VEID --diskspace soft:hard --save. Чтобы установить ограничение (барьер и лимит) памяти ядра, которое используется для VE , запустите vzctl set VEID --kmemsize barrier:limit --save.
Темплейты и vzpkg[править | править код]
Темплейты — это заранее созданные образы, которые используются для создания новой VE. В общем, темплейт — это просто набор пакетов, а кеш темплейта (template cache) — это tar-архив chroot-среды, в которую поставлены эти пакеты. Во время операции vzctl create этот tar-архив распаковывается. Таким образом, использование кеша темплейта позволяет создавать новую VE за секунды.
vzpkg — это набор утилит для создания и работы с кешами темплейтов. В настоящий момент vzpkg поддерживает rpm и yum-репозитории. Упрощённо, чтобы создать темплейт дистрибутива, скажем, Fedora Core 5, вам надо указать набор yum-репозиториев с пакетами из этого дистрибутива, и собственно имена пакетов, которые вы хотите иметь в VE. В дополнение, могут быть использованы пре- и пост-инсталляционные скрипты для дополнительных оптимизаций кеша темплейта. Все вышеперечисленные данные (ссылки на репозитории, списки пакетов, скрипты, GPG ключи и т. д.) составляют так называемые метаданные темплейта. При наличии метаданных, кеш темплейта создаётся автоматически, вам просто нужно запустить утилиту vzpkgcache. Она скачает и проинсталлирует все пакеты из списка во временную VE, и упакует результат в виде кеша темплейта.
Можно также создавать и кеши темплейтов для дистрибутивов, не основанных на RPM, хотя это делается более «вручную». Например, эта статья даёт детальные инструкции по созданию кеша темплейта для Debian.
В настоящее время (июнь 2006) доступны следующие кеши темплейтов (также известные как «заранее созданные» (precreated) темплейты):
- Fedora Core 3
- Fedora Core 4
- Fedora Core 5
- CentOS 4 (4.3)
- Gentoo 2006.0 (20060317)
- openSUSE 10
Отличительные черты OpenVZ[править | править код]
Масштабируемость[править | править код]
Ввиду того, что OpenVZ использует одно ядро для всех VE, система является столь же масштабируемой, как обычное ядро Linux 2.6, то есть поддерживает до 64 процессоров и до 64 ГБ оперативной памяти. Единственная виртуальная среда может быть расширена до размеров всего физического сервера, то есть использовать все доступные процессоры и память.
Действительно, некоторые люди используют OpenVZ с единственной виртуальной средой на сервере. На первый взгляд это достаточно странно, но принимая во внимание то, что эта VE может полностью использовать все аппаратные ресурсы сервера с практически «родной» производительностью, а вдобавок вы получаете такие преимущества, как независимость VE от железа, подсистему управления ресурсами, а также живую миграцию, становится понятно, что это очевидный выбор во многих случаях.
Плотность[править | править код]
OpenVZ способна размещать сотни виртуальных сред на современном железе. Основными ограничивающими факторами являются объём ОЗУ и скорость процессора.
Данный график показывает зависимость времени отзыва веб-серверов VE к количеству VE на машине. Измерения были сделаны на машине с 768 МБ (¾ ГБ) ОЗУ; на каждой VE был запущен обычный набор процессов: init, syslogd, crond, sshd и веб-сервер Apache. Демоны Apache отдавали статические страницы, которые закачивались утилитой http_load, и при этом измерялось время первого отзыва. Как можно видеть, при увеличении количества VE время отзыва становится больше — это происходит ввиду нехватки оперативной памяти и сильного своппинга.
В данном сценарии возможно запустить до 120 таких VE на машине с ¾ ГБ ОЗУ. Так как при увеличении объёма оперативной памяти плотность возрастает практически линейно, можно экстраполировать, что на машине с 2 GB памяти возможно запустить примерно 320 таких VE, при условии сохранения хорошей производительности.
Массовое управление[править | править код]
Владелец физического сервера с OpenVZ (root) может видеть все процессы и файлы всех VE. Эта особенность делает возможным массовое управление. Представьте себе, что VMware или Xen используются для консолидации серверов: для того, чтобы установить обновление в ваши 10 виртуальных серверов, необходимо зайти на каждый из них и запустить процесс обновления — та же самая процедура, которую бы вам пришлось проделать при наличии десяти физических серверов.
В случае с OpenVZ, вы можете запустить на «хозяйской» системе небольшой скрипт, который обновит все (или некоторые) VE сразу, «одним махом».
Примеры использования[править | править код]
Эти примеры использования подходят ко всем виртуализационным технологиям. Однако, уникальность технологии виртуализации на уровне ОС заключается в том, что вам не нужно много «платить» за виртуализацию (напр. потерей в производительности и т.п.), что делает нижлежащие сценарии ещё более привлекательными.
- Безопасность
- Используйте отдельные VE для каждого сетевого сервиса (напр. таких, как веб-сервер, почтовый сервер, DNS сервер и т.д). В случае, если хакер находит и использует уязвимость в одном из приложений, чтобы попасть на вашу систему, всё, что он сможет поломать, это тот самый сервис с уязвимостью — все остальные сервисы находятся в отдельных изолированных VE, к которым он не имеет доступа.
- Консолидация серверов
- В наше время большинство серверов недоиспользуются (простаивают). Используя OpenVZ, такие сервера могут быть консолидированы (объединены) путём их переноса внутрь виртуальных сред. Таким образом, вы увеличите загрузку серверов, уменьшите занимаемое ими место (за счёт сокращения количества машин), и даже сможете сэкономить на электричестве.
- Хостинг
- Похоже, что виртуализация на уровне ОС — это единственный тип виртуализации, который могут себе позволить хостинг-компании, чтобы продавать дешёвые (например, по цене $5…15 в месяц) виртуальные среды для своих клиентов. Заметьте при этом, что эти дешёвые VE имеют полный рутовый доступ, а значит, владелец VE может переннсталлировать всё, что угодно, и даже использовать такие возможности, как собственный брандмауэр.
- Разработка и тестирование ПО
- Обычно разработчикам и тестировщикам программного обеспечения под Линукс требуется доступ к куче различных дистрибутивов, и у них часто возникает необходимость переинсталляции дистрибутивов с нуля. Используя OpenVZ, они могут получить всё это на одном сервере, без необходимости перезагрузок и с «родной» производительностью. Новую «машину» можно создать за минуту. Клонирование VE тоже очень просто — нужно всего лишь скопировать файлы VE, а также его конфигурационный файл.
- Образование
- Каждый студент может получить VE с рутовым доступом. Можно играть с разными дистрибутивами Линукса. Новая VE создаётся всего за минуту. Не требуется большое количества железа.
Аналогичные технологии[править | править код]
Другие реализации технологии виртуализации на уровне операционной системы: Linux-VServer, FreeBSD Jails, Solaris Containers, VDSmanager
- Требуется дальнейший перевод статьи: en:OpenVZ#Future development
См. также[править | править код]
[править | править код]
- Официальный сайт OpenVZ
- Сайт загрузки OpenVZ
- Форум OpenVZ
- Система слежения за багами OpenVZ (Bugzilla)
- Репозиторий исходных кодов OpenVZ (GIT)
- Блог OpenVZ (на английском)
- Сравнение различных технологий виртуализации (на английском)
- Руководство по созданию виртуальных выделенных серверов на базе Virtuozzo