OpenVZ

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
OpenVZ
OpenVZ-logo.pngвіртуалізація на рівні ОС
Розробник(и) Співтовариство, підтримується Parallels
Стабільний випуск Ядро:
2.6.18 028stab066.10

2.6.24-ovz009.1(тестове)
2.6.27-chistyakov.1 (експериментальне)
vzctl — 3.0.22-1

vzquota — 3.0.11-1
Операційна система GNU/Linux
Платформа x86, IA-64, PowerPC, SPARC
Тип віртуалізація
Ліцензія GNU GPL v.2
Сайт OpenVZ.org(англ.)

OpenVZ — це реалізація технології віртуалізації на рівні операційної системи, яка базується на ядрі Linux. OpenVZ дозволяє на одному фізичному сервері запускати безліч ізольованих копій операційної системи, званих Віртуальні Приватні Сервери (Virtual Private Servers, VPS) або Віртуальні Середовища (Virtual Environments, VE).

Оскільки OpenVZ базується на ядрі Linux, на відміну від віртуальних машин (напр. VMware) або паравіртуалізаційних технологій (напр. Xen), в ролі «гостьових» систем можуть виступати тільки різні дистрибутиви GNU/Linux. Проте віртуалізація на рівні операційної системи у OpenVZ дає кращу[1] продуктивність, масштабованість, щільність розміщення, динамічне управління ресурсами, а також легкість в адмініструванні, аніж у альтернативних рішень. Згідно з сайтом OpenVZ, накладні витрати на віртуалізацію дуже малі, і падіння продуктивності становить всього 1-3 %, у порівнянні зі звичайними Linux-системами.

OpenVZ є базовою платформою для Virtuozzoпропрієтарного продукту Parallels, Inc. OpenVZ розповсюджується на умовах ліценції GNU GPL v.2.

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
Пам'ять, що розподіляється, семафори, повідомлення.

І так далі і тому подібне …

Управління ресурсами[ред.ред. код]

Управління ресурсами в OpenVZ складається з трьох компонентів: дворівнева дискова квота, чесний планувальник процесора, і так звані юзер бінкаунтери (user beancounters). Ці ресурси можуть бути змінені під час роботи VE, перезавантаження не потрібне.

Дворівнева дискова квота[ред.ред. код]

Адміністратор OpenVZ сервера може встановити дискові квоти на VE, в термінах дискового простору і кількості айнодів (i-nodes, число яких приблизно дорівнює кількості файлів). Це перший рівень дискової квоти.

На додаток до цього, адміністратор VE (root) може використовувати звичайні утиліти усередині своєї VE для налаштувань стандартних дискових квот UNIX для користувачів і груп.

Чесний планувальник процесора[ред.ред. код]

Планувальник процесора в OpenVZ також дворівневий. На першому рівні планувальник вирішує, який VE дати квант процесорного часу, базуючись на значенні параметра cpuunits для VE. На другому рівні стандартний планувальник Linux вирішує, якому процесу у вибраному VE дати квант часу, базуючись на стандартних пріоритетах процесу в Лінуксі тощо.

Адміністратор OpenVZ сервера може встановлювати різні значення cpuunits для різних VE, і процесорний час розподілятиметься відповідно співвідношенню цих величин призначених для VE.

Також є параметр обмеження — cpulimit, встановлюючий верхній ліміт процесорного часу у відсотках, що відводиться для певної VE.

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 заморожена) — приблизно декілька секунд; важливо підкреслити, що це затримка в обслуговуванні, а не відмова в обслуговуванні.


Починаючи з версії 2.6.24, в ядро включені pid namespaces (простори імен pid, pid — ідентифікатор процесу), у наслідок чого міграція «на льоту» стає «безпечною», оскільки в цьому випадку 2 процеси в різних VE зможуть мати один і той же pid.


Оскільки всі деталі стану VE, включаючи відкриті мережеві з'єднання, зберігаються, то з погляду користувача VE процес міграції виглядає як затримка відгуку: скажімо, одна з транзакцій бази даних зайняла більше часу, аніж зазвичай, і далі робота продовжується як завжди; таким чином, користувач не помічає, що його сервер баз даних працює вже на іншому сервері.

Ця можливість робить реальними такі сценарії, як апгрейд сервера без необхідності його перезавантаження: наприклад, якщо Вашій СУБД потрібно більше пам'яті або могутніший процесор, Ви купуєте новий могутніший сервер та мігруєте VE зі СУБД на нього, а потім збільшуєте ліміти на цю VE. Якщо Вам потрібно додати оперативної пам'яті у сервер, Ви мігруєте все VE з цього сервера на іншій, вимикаєте сервер, встановлюєте додаткову пам'ять, запускаєте сервер і мігруєте все VE назад.

Відмінні риси OpenVZ[ред.ред. код]

Масштабованість[ред.ред. код]

З огляду на те, що OpenVZ використовує одне ядро для всіх VE, система є такою ж масштабованою, як і звичайне ядро Linux 2.6, тобто підтримує до 64-ти процесорів та до 64-ти ТБ оперативної пам'яті. Єдине віртуальне середовище може бути розширене до розмірів всього фізичного сервера, тобто використовувати весь доступний процесорний час та пам'ять.

Можна використовувати OpenVZ з єдиним віртуальним середовищем на сервері. Цей підхід дозволяє VE повністю використовувати усі апаратні ресурси сервера з практично «рідною» продуктивністю, і користуватися додатковими перевагами: незалежність VE від «заліза», підсистему управління ресурсами, «живу» міграцію.

Щільність[ред.ред. код]

Щільність OpenVZ на машині з 768 МБ (¾ ҐБ) ОЗУ

OpenVZ здатна розміщувати сотні віртуальних середовищ на сучасному апаратному забезпеченні. Основними обмежуючими чинниками є обсяг ОЗП і швидкість процесора.

Цей графік показує залежність часу відгуку веб-серверів VE до кількості VE на машині.[Джерело?] Вимірювання були зроблені на машині з 768 МБ (¾ ҐБ) ОЗП; на кожній VE був запущений звичайний набір процесів: init, syslogd, crond, sshd та веб-сервер Apache. Демони Apache віддавали статичні сторінки, які закачувалися утилітою http_load, і при цьому вимірювався час першого відгуку. Як можна бачити, при збільшенні кількості VE час відгуку стає більше — це відбувається зважаючи на брак оперативної пам'яті і сильного своппінгу.

У даному сценарії можливо запустити до 120 таких VE на машині з ¾ ҐБ ОЗП. Оскільки при збільшенні обсягу оперативної пам'яті щільність зростає практично лінійно, можна екстраполювати, що на машині з 2 ҐБ пам'яті можливо запустити приблизно 320 таких VE, за умови збереження хорошої продуктивності.

Масове управління[ред.ред. код]

Власник фізичного сервера з OpenVZ (root) може бачити всі процеси і файли всіх VE. Ця особливість робить можливим масове управління, на відміну від інших технологій віртуалізації (напр. VMware чи Xen), де віртуальні сервера є окремою сутністю, якою неможливо безпосередньо керувати з хост-системи.

Приклади використання[ред.ред. код]

Ці приклади використання підходять до усіх віртуалізаційних технологій. Проте, унікальність технології віртуалізації на рівні ОС полягає в тому, що Вам не потрібно багато «платити» за віртуалізацію (напр. втратою у продуктивності і т. п.), що робить згадувані нижче сценарії ще привабливішими.

Безпека
Використовуйте окремі VE для кожного мережевого сервісу (напр. таких, як веб-сервер, поштовий сервер, DNS сервер тощо). У випадку, якщо хакер знаходить і використовує уразливість в одному з застосунків, щоб потрапити на Вашу систему, все, що він зможе поламати, це той самий сервіс з уразливістю — решта усіх сервісів знаходиться в окремих ізольованих VE, до яких він не має доступу.
Консолідація серверів
У наш час більшість серверів недовикористовуються (простоюють). Використовуючи OpenVZ, такі сервера можуть бути консолідовані (об'єднані) шляхом їх перенесення всередину віртуальних середовищ. Таким чином, Ви збільшите завантаження серверів, зменшите займане ними місце (за рахунок скорочення кількості машин), і навіть зможете заощадити на електриці.
Хостинг
Схоже, що віртуалізація на рівні ОС — це єдиний тип віртуалізації, який можуть собі дозволити хостинг-компанії, щоб продавати дешеві (наприклад, за ціною $5…15 у місяць) віртуальні середовища для своїх клієнтів. Відмітьте при цьому, що ці дешеві VE мають повний рутовий доступ, а значить, власник VE може перевстановити усе, що завгодно, і навіть використовувати такі можливості, як власний брандмауер.
Розробка і тестування ПЗ
Зазвичай розробникам та тестувальникам програмного забезпечення під GNU/Linux потрібний доступ до безлічі різних дистрибутивів, і у них часто виникає необхідність перевстановлення дистрибутивів з нуля. Використовуючи OpenVZ, вони можуть отримати все це на одному сервері, без необхідності перезавантажень і з «рідною» продуктивністю. Нову «машину» можна створити за хвилину. Клонування VE теж дуже просто — потрібно всього лише скопіювати файли VE, а також її конфігураційний файл.
Освіта
Кожен студент може отримати VE з рутовим доступом. Можна грати з різними дистрибутивами GNU/Linux. Нова VE створюється всього за хвилину. Не потрібна велика кількість залізяччя.

Аналогічні технології[ред.ред. код]

Інші реалізації технології віртуалізації на рівні операційної системи: LXC, Linux-VServer, FreeBSD Jails, Solaris Containers, VDSmanager

Недоліки[ред.ред. код]

З недоліків можна відзначити

Обмеженість у виборі «гостьової» ОС
В ролі «гостьової» системи, можуть виступати лише різні дистрибутиви Linux.
Відсутність виділеного розділу та окремих лімітів для свопінгу
Усі контейнери використовують один і той же своп-розділ. Свопінг обмежений лише побічно (параметром privvmpages, який по суті включає ОЗП та своп).

Див. також[ред.ред. код]

Виноски[ред.ред. код]

Джерела[ред.ред. код]