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 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.
Рекомендуется запустить vzctl без параметров, чтобы получить полный список поддерживаемых параметров и команд.
# vzctl start example1 # vzctl start 101
# vzctl status 101 CTID 101 exist mounted running # vzlist -a CTID NPROC STATUS IP_ADDR HOSTNAME 101 8 running 10.161.85.101 my.example.com
vzctl exec 101 uname -a
vzctl enter example1
Сервер виртуализации OpenVZ: CentOS теперь CentOS Stream-6.4-x86_64, Установка и использование OpenVZ в 2023, LVM.
Точка монтирования | Тип файловой системы | Комментарии |
/ | ext4 | Корневой раздел для файлов ОС аппаратного узла. 8-10 Гб |
/swap | swap | Пространство подкачки Linux. 2хОЗУ или 1хОЗУ |
LVM - Все свободное место. | ||
LVM /tmp | ext4 | /tmp 10GB |
LVM /home | ext4 | /home 20GB |
LVM /vz | ext4 | /vz Rest |
LVM /noexec | ext4 | /vz/noexec 10GB |
yum update -y shutdown -r now
# yum install nano mc wget lsof mailx mlocate ntsysv
# cd /etc/yum.repos.d # wget -P /etc/yum.repos.d/ http://ftp.openvz.org/openvz.repo # rpm --import http://ftp.openvz.org/RPM-GPG-Key-OpenVZ # yum install vzkernel
# cp /boot/grub/menu.lst /boot/grub/menu.lst.bak # nano /boot/grub/menu.lst
# yum install vzctl vzquota ploop # shutdown -r now
# On Hardware Node we generally need # packet forwarding enabled and proxy arp disabled net.ipv4.ip_forward = 1 net.ipv6.conf.default.forwarding = 1 net.ipv6.conf.all.forwarding = 1 net.ipv4.conf.default.proxy_arp = 0 # Enables source route verification # Проверка источника включена net.ipv4.conf.all.rp_filter = 1 # Enables the magic-sysrq key kernel.sysrq = 1 # We do not want all our interfaces to send redirects # нам не нужно чтобы ВСЕ интерфейсы перенаправляли трафик net.ipv4.conf.default.send_redirects = 1 net.ipv4.conf.all.send_redirects = 0
# service vz start
# cd /vz/template/cache/ # wget -c http://download.openvz.org/template/precreated/debian-6.0-x86_64.tar.gz # wget -c http://download.openvz.org/template/precreated/debian-6.0-x86_64.tar.gz.asc # wget -c http://download.openvz.org/template/precreated/contrib/debian-5.0-i386-minimal.tar.gz # wget -c http://download.openvz.org/template/precreated/contrib/debian-5.0-i386-minimal.tar.gz.asc # wget -O - http://download.openvz.org/RPM-GPG-Key-OpenVZ | gpg --import # gpg --verify debian-6.0-x86_64.tar.gz.asc
В OpenVZ существует два основных варианта размещения файлов контейнера, они называются ploop и simfs. Simfs – более старый способ размещения файлов контейнера. При его использовании все файлы находятся в определенном каталоге файловой системы физического узла. Ploop более новый способ, при его использовании все файлы контейнера размещаются в одном отдельном большом файле.
# vzctl create 101 --ostemplate debian-5.0-i386-minimal --layout simfs CT configuration saved to /etc/vz/conf/101.conf
# vzctl set 101 --save --onboot yes --name talk-mss --ipadd 10.161.85.101 --hostname my.example.com --nameserver '208.67.222.222 8.8.4.4'
save приказывает сохранить изменения в conf-файле. Без этого параметра они будут применены к запущенному контейнеру без сохранения; onboot приказывает запускать контейнер при старте OpenVZ; name задаёт произвольное читабельное имя, которое затем можно использовать вместо VEID. Например, "vzctl status talk-mss"; ipadd назначает контейнеру IP-адрес во внутренней сети OpenVZ; hostname изменяет имя системы, используемое внутри контейнера для самоидентификации; "nameserver" конфигурирует контейнер на использование указанного DNS-сервера;
# nano 101.mount #!/bin/sh . /etc/vz/vz.conf mount -n -o bind /vz/noexec/vz-100-home $VE_ROOT/home # chmod +x 101.mount
OpenVZ ограничивает для контейнеров потребление всех системных ресурсов: процессора, оперативной памяти, дискового пространства, системных буферов, сокетов и т. д. Начальные лимиты настолько строгие, что даже команда apt-get update в только что созданном контейнере завершается с сообщением об ошибке.
Для проверки внешних ограничений служит файл /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 сервера на OpenVZ:
# vzctl stop 101
# cp /etc/vz/conf/101.conf /etc/vz/conf/103.conf
# cp /etc/vz/conf/101.mount /etc/vz/conf/103.mount # mkdir /vz/noexec/vz-103-home
# rsync -av /vz/private/107/ /vz/private/108 # rsync -av /vz/noexec/vz-107-home/ /vz/noexec/vz-108-home
# cd /vz/private/ # tar -cpvf 109-mb3_3.tar 109/
Любым способом копируем на второй хост и на нем запускаем
# cd /vz/private/ # tar -xvpf 109-mb3_3.tar
# env | grep -i HISTFILE HISTFILE=/dev/null
И видим что история сразу затирается. Редактируем файл и задаем параметр HISTFILE глобально /etc/bash.bashrc или в .bashrc пользователя)
# nano /root/.bashrc OR # nano ~/.bashrc ... HISTFILE=~/.bash_history HISTSIZE=1000 HISTFILESIZE=2000 ...
history -c
Из виртуальных окружений прямой доступ отсутствует и к железу, и к ядру. Каталог /dev почти пуст и содержит только логические устройства: null, zero, random, tty, console и т. д.
Задача. Сделать доступным в VE подключенный USB ключ (на флешке лицензия).
# lsusb Bus 004 Device 002: ID 046b:ff10 American Megatrends, Inc. Virtual Keyboard and Mouse Bus 006 Device 002: ID 04b9:0300 SafeNet USB SuperPro/UltraPro
# ls -al /dev/bus/usb/006/002 crw-rw-r-- 1 root root 189, 641 Ноя 27 09:10 /dev/bus/usb/006/002
# vzctl enter VEID # mkdir -p /dev/bus/usb/006 # cd /dev/bus/usb/006 # mknod 002 c 189 641
DEVNODES="bus/usb/006/002:rw "
# vzctl restart VEID # vzctl enter VEID # lsusb Bus 006 Device 002: ID 04b9:0300 SafeNet USB SuperPro/UltraPro
Настройка OpenVPN развернутое руководство и видео в 2023 выбирай всегда tun, в 99.9% случаев он достаточен. TUN и TAP нужен только для всяческих ethernet bridge.
По умолчанию запрещено использование этих виртуальных драйверов.
modprobe tun
проверим
lsmod | grep tun
ls -la /dev/net/tun crw-rw-rw- 1 root root 10, 200 Авг 27 08:26 /dev/net/tun
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
vzctl restart 111
5. Проверяем что модуль подгрузился в виртуальном сервер:
# cat /dev/net/tun cat: /dev/net/tun: File descriptor in bad state
При выводе должно сказать bad file descriptor, если сказало, что permission denied — значит, не получилось. Можете попробовать сделать всё то же самое еще раз.
В случае когда 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 вашего сервера>.
#!/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
Физически файлы контейнера просто находятся в некоторой директории на HN. При запуске VE эта директория монтируются в другую, посредством механизмов, напоминающих mount –bind и последующий chroot. Т.е. для резервного копирования достаточно скопировать или архивировать эту директорию. Т.к. контейнер может быть запущен либо остановлен, то и резервное копирование может быть выполнено «горячее», либо «холодное». При горячем копировании может произойти порча структуры файлов, которые не были закрыты запущенными в контейнере программами. Особенно это чревато для баз данных. По этому этот метод нужно использовать очень осторожно. Этих недостатков лишено холодное копирование, но для него необходимо остановить контейнер, что не всегда приемлемо, да и вообще не хорошо вмешиваться в работу VE.
Для осуществление живой миграции контейнеров между HN у OpenVZ есть специальное состояние — checkpoint. При входе в это состояние все процессы контейнера замораживаются и содержимое памяти сбрасывается в дамп. Сохраняется также ядерная информация (например, о состоянии открытых сокетов). После перемещения файлов и дампа памяти VE на другой HN можно его там «оживить». Если промежуток времени от заморозки до оживления составляет единицы-десятки секунд, то приложения могут даже не заметить перемещения контейнера, а сетевые клиенты могут не отключиться.
Этот режим тоже можно использовать для резервного копирования контейнера OpenVZ. Конечно, через некоторое время, при восстановлении из этой копии, подключенных клиентов уже не будет, но зато целостность системы сохранится и можно будет остановить сервисы для получения полноценной «холодной» системы и запустить вновь.
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
rpm -ivh vzdump-1.2-4.noarch.rpm
modprobe vzcpt vzdump --suspend 121 --mailto root vzdump --compress --suspend 121 --mailto root
ERROR: Backup of VM 121 failed - command 'vzctl --skiplock chkpnt 121 --suspend' failed with exit code 16
Исправить
modprobe vzcpt
vzrestore /vz/dump/vzdump-openvz-121-2016_02_09-12_27_09.tgz 123
Почему свой VPN-сервер лучше публичных сервисов? Во-первых, это высокая и стабильная скорость работы. Во-вторых, к подключению имеете доступ только вы, никто другой, включая хостинг и различные ведомства не может иметь доступа к вашему личному серверу. Топ-3 решения для установки и управления WireGuard на VPS