Содержание

Настройка и команды OpenVZ

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

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

OpenVZ является базовой платформой для Virtuozzo — проприетарного продукта Parallels, Inc. OpenVZ распространяется на условиях лиценции GNU GPL v.2. OpenVZ состоит из модифицированного ядра Linux и пользовательских утилит.

OpenVZ - это технология ядра Linux, позволяющая запускать несколько виртуальных частных серверов (VPS) на одном физическом компьютере. Каждый из серверов при этом выглядит как отдельный сервер с отдельными доступом root, IP-адресом, таблицей процессов, файловой системой, правилами брандмауэра и т. д. От средств полной виртуализации вроде Xen или VMWare эту программу отличает то, что в каждом экземпляре VPS используется одна и та же разделяемая копия ядра Linux. По этому, например, с OpenVZ нельзя загрузить экземпляр Windows 7 и экземпляр RedHat, и нельзя загружать модули ядра независимо в каждый VPS. Но «пространство пользователя» в каждом VPS может быть разным, поэтому можно, например, запустить CentOS и SUSE рядом на одном и том же ядре. Это эффективное решение, и можно создать достаточно полную иллюзию отдельно администрируемых компьютеров, чтобы удовлетворить пользователей, которые не хотят много платить за хостинг-услуги.

Ядро OpenVZ — это модифицированное ядро Linux, которое обеспечивает виртуализацию, изоляцию, управление ресурсами и сохранение текущего состояния VE.

Установка OpenVZ (VzLinux) 8

Современный OpenVZ https://vzlinux.org версии 8, 9. Современные хостинг провайдеры, такие как PQ хостинг позволяют установить OpenVZ в редакции VzLinux из панели. Или вы можете установить нужную вам версию OpenVZ 8 из ISO образа.

После установки мы получим:

Welcome to Virtuozzo Linux 8 (Community Edition)!
 
с ядром
4.18.0-305.vl8.x86_64

ОС VzLinux 8 Community Edition. Система оптимизирована под процессоры x86-64 и готова для запуска как на «голом железе», так и в контейнерах или виртуальных машинах (ВМ). Она является полностью бинарно совместимым форком RHEL 8 и предназначена для поддержки приложений и систем корпоративного уровня с интенсивными I/O-нагрузками.

Но внутри у вас OpenVZ не будет.

Использование LXC (Linux Containers) контейнеров вместо OpenVZ.

Утилиты OpenVZ

vzctl

Рекомендуется запустить vzctl без параметров, чтобы получить полный список поддерживаемых параметров и команд.

Сервер OpenVZ

Сервер виртуализации OpenVZ: CentOS теперь CentOS Stream-6.4-x86_64, Установка и использование OpenVZ в 2023, LVM.

Точка монтированияТип файловой системыКомментарии
/ ext4 Корневой раздел для файлов ОС аппаратного узла. 8-10 Гб
/swap swap Пространство подкачки Linux. 2хОЗУ или 1хОЗУ
LVM - Все свободное место.
LVM /tmpext4/tmp 10GB
LVM /homeext4/home 20GB
LVM /vzext4/vz Rest
LVM /noexecext4/vz/noexec 10GB

Установка VE

В OpenVZ существует два основных варианта размещения файлов контейнера, они называются ploop и simfs. Simfs – более старый способ размещения файлов контейнера. При его использовании все файлы находятся в определенном каталоге файловой системы физического узла. Ploop более новый способ, при его использовании все файлы контейнера размещаются в одном отдельном большом файле.

Монтирование разделов в VE

Лимиты VE

OpenVZ ограничивает для контейнеров потребление всех системных ресурсов: процессора, оперативной памяти, дискового пространства, системных буферов, сокетов и т. д. Начальные лимиты настолько строгие, что даже команда apt-get update в только что созданном контейнере завершается с сообщением об ошибке.

Управление ограничениями в системе с OpenVZ является двухуровневым: для контейнера в целом – средствами OpenVZ, внутри контейнера – стандартными средствами Linux, через ulimit и дисковые квоты.

Для проверки внешних ограничений служит файл /proc/user_beancounters. Внутри контейнера этот файл заполнен информацией по данному контейнеру, во внешней системе содержит сведения обо всех запущенных окружениях. Основной интерес в нём представляет последний столбец, «failcnt» («failure counter», т. е. «количество сбоев»):

# egrep -v ' 0$' /proc/user_beancounters

Процессорные лимиты

"Вес" CPU для данного контейнера. Аргументом может быть положительное число в диапазоне от 8 до 500000. Устанавливает зависимость распределения CPU между разными контейнерами. Значение по умолчанию - 1000. Значение 1000 в одном контейнере и 2000 в другом означает, что при прочих равных условиях второй контейнер получит вдвое больше CPU.

Лимит использования CPU контейнером. В процентах. Если компьютер имеет два CPU, то это значит он имеет всего 200% CPU, которые можно распределить между контейнерами. Значение по умолчанию - 0 (нет лимита).

Устанавливает количество процессоров (не ядер) доступных в контейнере.

Клонирование VPS сервера

Клонирование VPS сервера на OpenVZ:

FAQ

Как включить в VE OpenVZ запись истории команд bash?

Dnsmasq в контейнере OpenVZ

Доступ к устройствам из VE

Из виртуальных окружений прямой доступ отсутствует и к железу, и к ядру. Каталог /dev почти пуст и содержит только логические устройства: null, zero, random, tty, console и т. д.

USB устройство в VE

Задача. Сделать доступным в VE подключенный USB ключ (на флешке лицензия).

Установка tun/tap для OpenVPN на OpenVZ VE

Настройка OpenVPN развернутое руководство и видео в 2023 выбирай всегда tun, в 99.9% случаев он достаточен. TUN и TAP нужен только для всяческих ethernet bridge.

По умолчанию запрещено использование этих виртуальных драйверов.

  1. Загрузим модуль tun в HN:
    modprobe tun

    проверим

    lsmod | grep tun
  2. Выясним параметры устройства tun в HN для использования в mknod VE
    ls -la /dev/net/tun
    crw-rw-rw- 1 root root 10, 200 Авг 27 08:26 /dev/net/tun
  3. Включаем поддержку на самом VE сервере (111 — номер VE сервера)
    vzctl set 111 --devnodes net/tun:rw --save
    vzctl set 111 --devices c:10:200:rw --save
    vzctl set 111 --capability net_admin:on --save
    vzctl exec 111 mkdir -p /dev/net
    vzctl exec 111 chmod 600 /dev/net/tun
  4. Перезагрузите VE сервер
    vzctl restart 111

    5. Проверяем что модуль подгрузился в виртуальном сервер:

    # cat /dev/net/tun
    cat: /dev/net/tun: File descriptor in bad state

    При выводе должно сказать bad file descriptor, если сказало, что permission denied — значит, не получилось. Можете попробовать сделать всё то же самое еще раз.

VE маршрутизация 2 сетевых интерфейсов

В случае когда VE OpenVZ два и более сетевых интерфейса, например venet0:0 и venet0:1 может возникнуть проблема прохождения пакетов между HN OpenVZ, то есть не в пределах одного сервера OpenVZ (где все они соединены через интерфейс venet0), а между двумя и более HN OpenVZ. Самое простое решение использовать NAT на HW, но тогда будет подменяться IP, что не всегда нужно. Втрое решение исправить в VE изменить маску сети на /24

ifconfig venet0:1 netmask 255.255.255.0

Более подробно решение проблемы здесь: OpenVZ multiple networks on CTs. Можно также запускать эту команду при помощи файла /etc/rc.local

/sbin/ifconfig venet0:1 netmask 255.255.255.0

или для CentOS теперь CentOS Stream создать выполняемый файл /sbin/ifup-local. Для добавления маршрута на новую сеть (например 10.26.95.0/24) в VE обязательно нужно указать источник src <ip вашего сервера>.

ifup-local
#!/bin/bash
/sbin/ifconfig venet0:1 netmask 255.255.255.0
 
/sbin/ip route add 10.26.95.0/24 dev venet0:1 src 10.161.85.112

Резервное копирование контейнеров OpenVZ

Физически файлы контейнера просто находятся в некоторой директории на HN. При запуске VE эта директория монтируются в другую, посредством механизмов, напоминающих mount –bind и последующий chroot. Т.е. для резервного копирования достаточно скопировать или архивировать эту директорию. Т.к. контейнер может быть запущен либо остановлен, то и резервное копирование может быть выполнено «горячее», либо «холодное». При горячем копировании может произойти порча структуры файлов, которые не были закрыты запущенными в контейнере программами. Особенно это чревато для баз данных. По этому этот метод нужно использовать очень осторожно. Этих недостатков лишено холодное копирование, но для него необходимо остановить контейнер, что не всегда приемлемо, да и вообще не хорошо вмешиваться в работу VE.

Для осуществление живой миграции контейнеров между HN у OpenVZ есть специальное состояние — checkpoint. При входе в это состояние все процессы контейнера замораживаются и содержимое памяти сбрасывается в дамп. Сохраняется также ядерная информация (например, о состоянии открытых сокетов). После перемещения файлов и дампа памяти VE на другой HN можно его там «оживить». Если промежуток времени от заморозки до оживления составляет единицы-десятки секунд, то приложения могут даже не заметить перемещения контейнера, а сетевые клиенты могут не отключиться.

Этот режим тоже можно использовать для резервного копирования контейнера OpenVZ. Конечно, через некоторое время, при восстановлении из этой копии, подключенных клиентов уже не будет, но зато целостность системы сохранится и можно будет остановить сервисы для получения полноценной «холодной» системы и запустить вновь.

vzdump

  1. Установим зависимости для утилиты vzdump. Подключим репозиторий RPMForge.
    rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm

    Зависимости

    yum install cstream perl-LockFile-Simple
  2. Установка vzdump.
    rpm -ivh vzdump-1.2-4.noarch.rpm
  1. Использование vzdump с ключем –suspend. Создадим бекап VE не выключая его и отошлем уведомление пользователю. В данном случае производится инкрементальный бэкап с помощью rsync с заморозкой виртуальной машины. Бэкап производится в две стадии, на первой стадии запускается rsync добавляя изменившиеся файлы в бэкап. Затем производится кратковременная остановка виртуальной машины с запуском rsync, который производит повторную синхронизацию файлов. После окончания повторной синхронизации виртуальная машина запускается и продолжает работать. Данный метод позволяет сократить время простоя виртуальной машины до минимума.** При использовании данного метода, наиболее полезны опции: –stdexcludes — позволяет исключить временные файлы (/tmp и т.д.) –exclude-path — позволяет исключить определенные директории. Адреса директорий задаются с помощью regexp.
    modprobe vzcpt
    vzdump --suspend 121 --mailto root
    vzdump --compress --suspend 121 --mailto root
  2. Возможные проблемы:
    ERROR: Backup of VM 121 failed - command 'vzctl --skiplock chkpnt 121 --suspend' failed with exit code 16

    Исправить

    modprobe vzcpt
  3. Восстановить VE с другим CTID
    vzrestore /vz/dump/vzdump-openvz-121-2016_02_09-12_27_09.tgz 123

Простой способ установить wireguard на openvz vps

Почему свой VPN-сервер лучше публичных сервисов? Во-первых, это высокая и стабильная скорость работы. Во-вторых, к подключению имеете доступ только вы, никто другой, включая хостинг и различные ведомства не может иметь доступа к вашему личному серверу. Топ-3 решения для установки и управления WireGuard на VPS