Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

OpenVZ ( Open Virtuozzo ) - это технология виртуализации на уровне операционной системы для Linux . Это позволяет физическому серверу запускать несколько изолированных экземпляров операционной системы, называемых контейнерами, виртуальными частными серверами (VPS) или виртуальными средами (VE). OpenVZ похож на контейнеры Solaris и LXC .

OpenVZ по сравнению с другими технологиями виртуализации [ править ]

В то время как технологии виртуализации, такие как VMware , Xen и KVM, обеспечивают полную виртуализацию и могут работать с несколькими операционными системами и разными версиями ядра, OpenVZ использует одно ядро ​​Linux и, следовательно, может работать только с Linux. Все контейнеры OpenVZ имеют одинаковую архитектуру и версию ядра. Это может быть недостатком в ситуациях, когда гостям требуются версии ядра, отличные от версии хоста. Однако, поскольку у него нет накладных расходов, как у настоящего гипервизора , он очень быстрый и эффективный. [1]

Распределение памяти с помощью OpenVZ является мягким в том смысле, что память, не используемая в одной виртуальной среде, может использоваться другими или для кэширования диска . В то время как старые версии OpenVZ использовали общую файловую систему (где каждая виртуальная среда - это просто каталог файлов, который изолирован с помощью chroot ), текущие версии OpenVZ позволяют каждому контейнеру иметь свою собственную файловую систему. [2]

Ядро [ править ]

Ядро OpenVZ - это ядро Linux , модифицированное для добавления поддержки контейнеров OpenVZ. Модифицированное ядро ​​обеспечивает виртуализацию, изоляцию, управление ресурсами и создание контрольных точек . Начиная с vzctl 4.0, OpenVZ может работать с непропатченными ядрами Linux 3.x с ограниченным набором функций. [3]

Виртуализация и изоляция [ править ]

Каждый контейнер представляет собой отдельный объект и ведет себя в основном как физический сервер. У каждого свои:

Файлы
Системные библиотеки , приложения , виртуализированные /procи /sysвиртуализированные замки и т. Д.
Пользователи и группы
У каждого контейнера есть собственный пользователь root , а также другие пользователи и группы .
Дерево процессов
Контейнер видит только свои собственные процессы (начиная с init ). PID виртуализированы, так что init PID равен 1, как и должно быть.
Сеть
Виртуальное сетевое устройство , которое позволяет контейнеру иметь свои собственные IP-адреса , а также набор netfilter ( iptables) и правил маршрутизации .
Устройства
При необходимости любому контейнеру можно предоставить доступ к реальным устройствам, таким как сетевые интерфейсы , последовательные порты , разделы диска и т. Д.
Объекты IPC
Общая память , семафоры , сообщения .

Управление ресурсами [ править ]

Управление ресурсами OpenVZ состоит из четырех компонентов: двухуровневой дисковой квоты, справедливого планировщика ЦП, планировщика дискового ввода-вывода и счетчиков пользовательских компонентов (см. Ниже). Эти ресурсы могут быть изменены во время контейнера времени выполнения , устраняя необходимость в перезагрузке .

Двухуровневая дисковая квота [ править ]

Каждый контейнер может иметь свои дисковые квоты , измеряемые в единицах дисковых блоков и inode (примерно количество файлов). Внутри контейнера можно использовать стандартные инструменты для установки дисковых квот UNIX для пользователей и групп .

Планировщик ЦП [ править ]

Планировщик ЦП в OpenVZ - это двухуровневая реализация стратегии справедливого распределения .

На первом уровне планировщик решает, какому контейнеру следует выделить временной отрезок ЦП, на основе значений cpuunits для каждого контейнера . На втором уровне стандартный планировщик Linux решает, какой процесс запускать в этом контейнере, используя стандартные приоритеты процессов Linux.

Можно установить разные значения для ЦП в каждом контейнере. Реальное время процессора будет распределяться пропорционально этим значениям.

В дополнение к вышесказанному OpenVZ предоставляет [4] способа:

  • установить строгие ограничения ЦП, например 10% от общего времени ЦП ( --cpulimit);
  • ограничить количество ядер ЦП, доступных для container ( --cpus);
  • привязать контейнер к определенному набору процессоров ( --cpumask).

Планировщик ввода / вывода [ править ]

Подобно планировщика CPU описано выше, планировщик ввода / вывода в OpenVZ также два уровня, используя Йенс Аксбо «с CFQ планировщик ввода / вывода на его втором уровне.

Каждому контейнеру назначается приоритет ввода-вывода, а планировщик распределяет доступную полосу пропускания ввода-вывода в соответствии с назначенными приоритетами. Таким образом, ни один контейнер не может заполнить канал ввода-вывода.

Счетчики пользовательских объектов [ править ]

User Beancounters - это набор счетчиков, ограничений и гарантий для каждого контейнера, предназначенный для предотвращения монополизации системных ресурсов одним контейнером. В современных ядрах OpenVZ (RHEL6 основе 042stab *) есть два основных параметра ( баран и замены , иначе physpages и swappages ), и другие не являются обязательными. [5]

Другие ресурсы - это в основном память и различные объекты в ядре, такие как сегменты разделяемой памяти межпроцессного взаимодействия и сетевые буферы. Каждый ресурс можно увидеть в / proc / user_beancounters, и с ним связано пять значений: текущее использование, максимальное использование (на время существования контейнера), барьер, ограничение и счетчик отказов. Значение барьера и предела зависит от параметра; Короче говоря, их можно рассматривать как мягкие и жесткие ограничения. Если какой-либо ресурс достигает предела, счетчик отказов для него увеличивается. Это позволяет владельцу обнаруживать проблемы, отслеживая / proc / user_beancounters в контейнере.

Контрольные точки и живая миграция [ править ]

Функция живой миграции и контрольных точек была выпущена для OpenVZ в середине апреля 2006 года. Это позволяет перемещать контейнер с одного физического сервера на другой, не закрывая контейнер. Этот процесс известен как контрольная точка: контейнер замораживается, и все его состояние сохраняется в файл на диске. Затем этот файл можно перенести на другую машину, и там можно будет разморозить (восстановить) контейнер; задержка составляет примерно несколько секунд. Поскольку состояние обычно сохраняется полностью, эта пауза может показаться обычной вычислительной задержкой.

Ограничения [ править ]

По умолчанию OpenVZ ограничивает доступ контейнера к реальным физическим устройствам (таким образом делая контейнер аппаратно-независимым). Администратор OpenVZ может разрешить контейнерный доступ к различным реальным устройствам, таким как дисковые накопители, порты USB, [6] устройства PCI [7] или физические сетевые карты. [8]

/ dev / loopN часто ограничивается при развертывании (поскольку устройства цикла используют потоки ядра, что может быть проблемой безопасности), что ограничивает возможность монтирования образов дисков. Обходной путь - использовать FUSE .

OpenVZ ограничивается предоставлением только некоторых технологий VPN, основанных на PPP (например, PPTP / L2TP) и TUN / TAP. IPsec поддерживается внутри контейнеров, начиная с ядра 2.6.32.

В 2007 году [9] была предпринята попытка создать графический пользовательский интерфейс под названием EasyVZ, но дальше версии 0.1 он не продвинулся. До версии 3.4 Proxmox VE можно было использовать в качестве среды виртуализации сервера на основе OpenVZ с графическим интерфейсом пользователя, хотя более поздние версии переключились на LXC .

См. Также [ править ]

  • Сравнение программного обеспечения для виртуализации платформ
  • Виртуализация на уровне операционной системы
  • Виртуальная среда Proxmox

Ссылки [ править ]

  1. ^ http://www.hpl.hp.com/techreports/2007/HPL-2007-59R1.html?jumpid=reg_R1002_USEN
  2. ^ http://wiki.openvz.org/Ploop
  3. Колышкин, Кир (6 октября 2012 г.). «OpenVZ исполняется 7 лет, подарки доступны!» . Блог OpenVZ . Проверено 17 января 2013 .
  4. ^ vzctl (8) справочная страница, раздел параметров планировщика справедливого ЦП, http://openvz.org/Man/vzctl.8#CPU_fair_scheduler_parameters
  5. ^ http://openvz.org/VSwap
  6. ^ vzctl (8) справочная страница, подраздел управления доступом к устройствам, http://wiki.openvz.org/Man/vzctl.8#Device_access_management
  7. ^ vzctl (8) справочная страница, раздел управления устройствами PCI, http://wiki.openvz.org/Man/vzctl.8#PCI_device_management
  8. Справочная страница ^ vzctl (8), раздел сетевых устройств, http://wiki.openvz.org/Man/vzctl.8#Network_devices_control_parameters
  9. ^ EasyVZ: Grafische Verwaltung für OpenVZ. Внешний интерфейс для свободной виртуализации Linux

Внешние ссылки [ править ]

  • Официальный веб-сайт