Настройка и команды 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 - утилита для манипулирования VPS (создание, уничтожение, установка параметров …)
- vzquota - утилита для квотирования VPSs. Чаще используется неявно через vzctl.
- vzpid - позволяет определить, какому контейнеру принадлежит процесс (в качестве параметра принимает pid процесса).
- vzubc - утилита, заменяющая такой инструмент, как cat /proc/user_beancounters.
- vzlist — печатает листинг контейнеров.
- vzmemcheck, vzcpucheck, vzcalc — служат для получения информации об используемых ресурсах.
vzctl
Рекомендуется запустить vzctl без параметров, чтобы получить полный список поддерживаемых параметров и команд.
- Запустить контейнер по его имени или CTID:
# vzctl start example1 # vzctl start 101
- Проверить состояние VE:
# 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
Сервер виртуализации OpenVZ: CentOS теперь CentOS Stream-6.4-x86_64, Установка и использование OpenVZ в 2023, LVM.
- Файловая система. Разбивка HDD на аппаратном узле. Рекомендуется использовать отдельный раздел для хранения данных VE. (по умолчанию /vz/private/<veid>). Причина этого в том, что если вы захотите использовать дисковые квоты на каждый VE, используемые OpenVZ, вы не сможете использовать обычные квоты Linux. На том же разделе. В данном контексте OpenVZ-квота не является чистой квотой, она действует как обычная дисковая квота, но в рамках VE, а не аппаратного узла. Квоты OpenVZ поддерживаются только для файловых систем ext2/ext3, если квоты не важны рекомендуется ставить ext4. Избегайте использовать корневой раздел для хранения данных VE. В такой ситуации администратор VE может превысить дисковый барьер в 5%, полностью заполнить корневой раздел аппаратного узла, и вызвать крах системы.
Точка монтирования | Тип файловой системы | Комментарии |
/ | 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 |
- Выбираем минимальную установку. В руководстве безопасности OpenVZ настоятельно рекомендуется не использовать на уровне аппаратного узла никаких сетевых сервисов кроме sshd (Защита демона sshd).
- После установки обновляем установленную ОС, при помощи Использование Yum
yum update -y shutdown -r now
- Доставим дополнительные пакеты
# yum install nano mc wget lsof mailx mlocate ntsysv
- Фаервол Руководство по iptables: Настройка и оптимизация фаервола Linux можно отключить, если не нужен NAT преобразование сетевых адресов, при помощи Команда chkconfig. В случае если в контейнере используются IP из серых сетей, то есть нужен NAT, можно использовать эту заготовку Пример 3. iptables CentOS OpenVZ.
- Установка ядра с поддержкой OpenVZ, для этого добавим официальный репозиторий OpenVZ:
# 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
- Редактируем загрузчик ОС в файле menu.lst, в котором ядро с поддержкой OpenVZ должно стоять первым или единственным
# cp /boot/grub/menu.lst /boot/grub/menu.lst.bak # nano /boot/grub/menu.lst
- Установка инструментов администрирования OpenVZ
# yum install vzctl vzquota ploop # shutdown -r now
- Настраиваем sysctl утилита, предназначенная для управления параметрами ядра:
- sysctl.conf
# 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
Установка VE
- Cкачиваем готовые шаблоны для VE: Precreated template caches for different distributions. Также скачиваем контрольные суммы для проверки целостности файлов шаблона (OpenVZ - проверка целостности template).
# 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 более новый способ, при его использовании все файлы контейнера размещаются в одном отдельном большом файле.
- Создание контейнера simfs для debian-5.0-i386-minimal.tar.gz:
# 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-сервера;
Монтирование разделов в VE
- Монтирование раздела /home в VE
# 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
Лимиты VE
OpenVZ ограничивает для контейнеров потребление всех системных ресурсов: процессора, оперативной памяти, дискового пространства, системных буферов, сокетов и т. д. Начальные лимиты настолько строгие, что даже команда apt-get update в только что созданном контейнере завершается с сообщением об ошибке.
Для проверки внешних ограничений служит файл /proc/user_beancounters. Внутри контейнера этот файл заполнен информацией по данному контейнеру, во внешней системе содержит сведения обо всех запущенных окружениях. Основной интерес в нём представляет последний столбец, «failcnt» («failure counter», т. е. «количество сбоев»):
# egrep -v ' 0$' /proc/user_beancounters
Процессорные лимиты
- –cpuunits num
"Вес" CPU для данного контейнера. Аргументом может быть положительное число в диапазоне от 8 до 500000. Устанавливает зависимость распределения CPU между разными контейнерами. Значение по умолчанию - 1000. Значение 1000 в одном контейнере и 2000 в другом означает, что при прочих равных условиях второй контейнер получит вдвое больше CPU.
- –cpulimit num[%]
Лимит использования CPU контейнером. В процентах. Если компьютер имеет два CPU, то это значит он имеет всего 200% CPU, которые можно распределить между контейнерами. Значение по умолчанию - 0 (нет лимита).
- –cpus num
Устанавливает количество процессоров (не ядер) доступных в контейнере.
Клонирование VPS сервера
Клонирование VPS сервера на OpenVZ:
- Остановим сервер, который будем клонировать
# vzctl stop 101
- Клонируем конфигурационный файл, в нем как минимум нужно изменить IP до запуска нового VE
# cp /etc/vz/conf/101.conf /etc/vz/conf/103.conf
- Если используется mount
# cp /etc/vz/conf/101.mount /etc/vz/conf/103.mount # mkdir /vz/noexec/vz-103-home
- Клонируем сервер копированием при помощи утилиты Как использовать rsync для синхронизации и резервного копирования: примеры и инструкции, ключ -а позволяет сохранить права на файлы и указывает на рекурсивное копирование, слеш "/" в конце директории, указывает, что мы ее копируем .
# rsync -av /vz/private/107/ /vz/private/108 # rsync -av /vz/noexec/vz-107-home/ /vz/noexec/vz-108-home
- Для переноса VE между серверами можно использовать утилиту tar с ключом -p, который позволяет сохранить права на файлы. Например: на первом хосте
# cd /vz/private/ # tar -cpvf 109-mb3_3.tar 109/
Любым способом копируем на второй хост и на нем запускаем
# cd /vz/private/ # tar -xvpf 109-mb3_3.tar
FAQ
Как включить в VE OpenVZ запись истории команд bash?
- Как включить в VE OpenVZ запись истории команд пользователя, которые отображаются командой history в консоли? (No bash history in VE). По умолчанию в Основы BASH скрипты, циклы, горячие клавиши всё пишется в файл ~/.bash_history. Если хотим хранить историю в другом файле, то нужно в .bashrc, задать команду HISTFILE=~/.my_history. Выясним в какой файл записывается история в нашем VE
# 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 ...
- HISTSIZE — определяет число строк, хранящихся в списке истории (в памяти интерпретатора).
- HISTFILESIZE — максимальное количество команд хранящихся в файле истории.
- Очистить Историю Команд в BASH
history -c
Dnsmasq в контейнере OpenVZ
- Настройка Dnsmasq Ubuntu + OpenVZ
Доступ к устройствам из VE
Из виртуальных окружений прямой доступ отсутствует и к железу, и к ядру. Каталог /dev почти пуст и содержит только логические устройства: null, zero, random, tty, console и т. д.
USB устройство в VE
Задача. Сделать доступным в VE подключенный USB ключ (на флешке лицензия).
- Устанавливаем usbutils в HN и VE, после этого станет доступна утилита Описание lsusb.
- Вывести список USB устройств. Нас интересуется флешка вставленная в Bus 006 Device 002
# 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
- Войдем в VE и создадим это устройство в нем (mknod)
# vzctl enter VEID # mkdir -p /dev/bus/usb/006 # cd /dev/bus/usb/006 # mknod 002 c 189 641
- В конфигурационный файл /etc/vz/conf/VEID.conf добавим строку
DEVNODES="bus/usb/006/002:rw "
- Перезагрузим VE и проверим видимость USB ключа в VE
# vzctl restart VEID # vzctl enter VEID # lsusb Bus 006 Device 002: ID 04b9:0300 SafeNet USB SuperPro/UltraPro
Установка tun/tap для OpenVPN на OpenVZ VE
Настройка OpenVPN развернутое руководство и видео в 2023 выбирай всегда tun, в 99.9% случаев он достаточен. TUN и TAP нужен только для всяческих ethernet bridge.
По умолчанию запрещено использование этих виртуальных драйверов.
- Загрузим модуль tun в HN:
modprobe tun
проверим
lsmod | grep tun
- Выясним параметры устройства tun в HN для использования в mknod VE
ls -la /dev/net/tun crw-rw-rw- 1 root root 10, 200 Авг 27 08:26 /dev/net/tun
- Включаем поддержку на самом 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
- Перезагрузите 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
- Установим зависимости для утилиты 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
- Установка vzdump.
rpm -ivh vzdump-1.2-4.noarch.rpm
- Использование vzdump с ключем –suspend. Создадим бекап VE не выключая его и отошлем уведомление пользователю. В данном случае производится инкрементальный бэкап с помощью rsync с заморозкой виртуальной машины. Бэкап производится в две стадии, на первой стадии запускается rsync добавляя изменившиеся файлы в бэкап. Затем производится кратковременная остановка виртуальной машины с запуском rsync, который производит повторную синхронизацию файлов. После окончания повторной синхронизации виртуальная машина запускается и продолжает работать. Данный метод позволяет сократить время простоя виртуальной машины до минимума.** При использовании данного метода, наиболее полезны опции: –stdexcludes — позволяет исключить временные файлы (/tmp и т.д.) –exclude-path — позволяет исключить определенные директории. Адреса директорий задаются с помощью regexp.
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
- Восстановить VE с другим CTID
vzrestore /vz/dump/vzdump-openvz-121-2016_02_09-12_27_09.tgz 123
Простой способ установить wireguard на openvz vps
Почему свой VPN-сервер лучше публичных сервисов? Во-первых, это высокая и стабильная скорость работы. Во-вторых, к подключению имеете доступ только вы, никто другой, включая хостинг и различные ведомства не может иметь доступа к вашему личному серверу. Топ-3 решения для установки и управления WireGuard на VPS
📌 Для тестирования скриптов, установщиков VPN, Python ботов рекомендуем использовать надежные VPS на короткий срок. Если вам нужна помощь с более сложными задачами, вы можете найти фрилансера, который поможет с настройкой. Узнайте больше о быстрой аренде VPS для экспериментов и о фриланс-бирже для настройки VPS, WordPress. 📌
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Китайский VPN Shadowsocks простая установка и настройка
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах