1.Установка OpenVZ
1 |
# cd /etc/yum.repos.d/ |
1 |
# wget http://download.openvz.org/openvz.repo |
1 |
# rpm --import http://download.openvz.org/RPM-GPG-Key-OpenVZ |
1 |
# yum repolist |
Проверяем,что по умолчанию подключается репозитарий для Centos 6 (а не Centos 5)
1 |
# nano openvz.repo |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[openvz-utils] name=OpenVZ user-space utilities mirrorlist=http://download.openvz.org/mirrors-current enabled=1 gpgcheck=1 gpgkey=http://download.openvz.org/RPM-GPG-Key-OpenVZ ## RHEL6-based OpenVZ kernels [openvz-kernel-rhel6] name=OpenVZ RHEL6-based stable kernels mirrorlist=http://download.openvz.org/kernel/mirrors-rhel6-2.6.32 enabled=1 gpgcheck=1 gpgkey=http://download.openvz.org/RPM-GPG-Key-OpenVZ exclude=vzkernel-firmware |
Просмотр списка доступных ядер
1 |
# yum search vzkernel |
Установка ядра согласно битности операционки
1 |
# yum install vzkernel.i686 |
# для 32 битных систем
1 |
# yum install vzkernel.x86_64 |
# для 64 битных систем
Проверка загрузчика на предмет загрузки по умолчанию ядра OpenVZ вместо штатного
1 |
# nano /boot/grub/grub.conf |
1 2 3 4 5 6 7 8 9 10 11 12 |
default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title OpenVZ (2.6.32-042stab117.16) root (hd0,0) kernel /vmlinuz-2.6.32-042stab117.16 ro root=UUID=eb865094-0888-44b8-81e6-bc76bcd0a6eb nomodeset rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_NO_LVM rd_NO_DM rhgb quiet initrd /initramfs-2.6.32-042stab117.16.img title CentOS (2.6.32-642.6.1.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-642.6.1.el6.x86_64 ro root=UUID=eb865094-0888-44b8-81e6-bc76bcd0a6eb nomodeset rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_NO_LVM rd_NO_DM rhgb quiet initrd /initramfs-2.6.32-642.6.1.el6.x86_64.img |
Установка утилит для управления OpenVZ
1 |
# yum -y install vzctl vzquota ploop |
Установка рекомендуемых параметров ядра:
Если установлена версия vzctl версии 4.4 и выше, то нет необходимости в ручной правке переменных ядра
1 |
# rpm -qa | grep vzctl |
1 2 |
vzctl-core-4.9.4-1.x86_64 vzctl-4.9.4-1.x86_64 |
Иначе нужно настроить переменные ядра вручную
1 |
# nano /etc/sysctl.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# 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 |
Если вылазит ошибка типа
1 2 3 |
"net.bridge.bridge-nf-call-ip6tables" is an unknown key "net.bridge.bridge-nf-call-iptables" is an unknown key "net.bridge.bridge-nf-call-arptables" is an unknown key |
Значит необходимо подгрузить модуль bridge
1 |
# lsmod | grep bridge |
1 |
# modprobe bridge |
1 |
# lsmod | grep bridge |
1 2 3 |
bridge 66196 0 stp 1634 1 bridge llc 4266 2 bridge,stp |
1 |
# sysctl –p |
Либо закомментировать эти строки в /etc/sysctl.conf
1 |
# nano /etc/vz/vz.conf |
1 |
NEIGHBOUR_DEVS=all |
Отключаем SELinux
1 |
# nano /etc/selinux/config |
1 |
SELINUX=disabled |
Проверка наличия OpenVZ в автозагрузке
1 |
# chkconfig --list vz |
1 |
vz 0:off 1:off 2:on 3:on 4:on 5:on 6:off |
Перегружаем систему и проверяем загрузившееся ядро
1 |
# reboot |
1 |
# uname -r |
1 |
2.6.32-042stab117.16 |
Проверяем работу VZ
1 |
# /etc/init.d/vz restart |
1 2 3 4 5 |
Bringing down interface venet0: [ OK ] Stopping OpenVZ: [ OK ] Starting OpenVZ: [ OK ] Applying OOM adjustments: [ OK ] Bringing up interface venet0: [ OK ] |
2.Создание виртуальной машины OpenVZ
Установка контейнера(виртуальной машины) будет происходить из шаблона
Со списком шаблонов ознакомиться можно здесь
http://wiki.openvz.org/Download/template/precreated
Либо здесь
https://download.openvz.org/template/precreated/
Загружаем образы разных операционных систем
1 |
# cd /vz/template/cache/ |
Centos7
1 |
# wget http://download.openvz.org/template/precreated/centos-7-x86_64.tar.gz |
Debian8
1 |
# wget http://download.openvz.org/template/precreated/debian-8.0-x86_64.tar.gz |
Ubuntu14
1 |
# wget http://download.openvz.org/template/precreated/ubuntu-14.04-x86.tar.gz |
1 |
# ls -l /vz/template/cache/ |
1 2 3 4 |
total 571300 -rw-r--r-- 1 root root 221756916 Jul 25 16:19 centos-7-x86_64.tar.gz -rw-r--r-- 1 root root 211459452 Jul 25 16:05 debian-8.0-x86_64.tar.gz -rw-r--r-- 1 root root 151779599 Jul 25 15:51 ubuntu-14.04-x86.tar.gz |
Создание контейнера
Centos7
1 |
# vzctl create 101 --ostemplate centos-7-x86_64 |
Настройка параметров созданного контейнера
1 |
# vzctl set 101 --hostname centos7.kamaok.org.ua --save --ipadd 192.168.10.101 --save --nameserver 8.8.8.8 --save --nameserver 8.8.4.4 --save --onboot yes –save |
Настройка ресурсов для созданного контейнера
1 |
# vzctl set 101 --ram 1024M --save --swap 1024M --save --diskspace 2G:4G –save |
Аналогично создаем контейнеры для
Debian8
1 |
# vzctl create 102 --ostemplate debian-8.0-x86_64 |
1 |
# vzctl set 102 --hostname debian8.kamaok.org.ua --save --ipadd 192.168.10.102 --save --nameserver 8.8.8.8 --save --nameserver 8.8.4.4 --save --onboot yes --save |
1 |
# vzctl set 102 --ram 1024M --save --swap 1024M --save --diskspace 2G:4G –save |
Ubuntu14.04
1 |
# vzctl create 103 --ostemplate ubuntu-14.04-x86 |
1 |
# vzctl set 103 --hostname ubuntu14.kamaok.org.ua --save --ipadd 192.168.10.103 --save --nameserver 8.8.8.8 --save --nameserver 8.8.4.4 --save --onboot yes --save |
1 |
# vzctl set 103 --hostname ubuntu14.kamaok.org.ua --save --ipadd 192.168.10.103 --save --nameserver 8.8.8.8 --save --nameserver 8.8.4.4 --save --onboot yes --save |
Запуск контейнеров
1 |
# vzctl start 101 |
1 |
# vzctl start 102 |
1 |
# vzctl start 103 |
Проверка состояния всех контейнеров
1 |
# vzlist -a |
1 2 3 4 |
CTID NPROC STATUS IP_ADDR HOSTNAME 101 21 running 192.168.10.101 centos7.kamaok.org.ua 102 47 running 192.168.10.102 debian8.kamaok.org.ua 103 48 running 192.168.10.103 ubuntu14.kamaok.org.ua |
Просмотр смонтированных контейнеров
1 |
# fdisk -l | grep -E '^/dev/ploop' |
1 2 3 |
/dev/ploop19161p1 1 523 4194303+ ee GPT /dev/ploop29572p1 1 523 4194303+ ee GPT /dev/ploop14951p1 1 523 4194303+ ee GPT |
Конфигурационный файл контейнера 101
1 |
# grep -vE '^$|^#' /etc/vz/conf/101.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
PHYSPAGES="0:262144" SWAPPAGES="0:262144" DISKSPACE="2097152:4194304" DISKINODES="131072:144179" QUOTATIME="0" CPUUNITS="1000" NETFILTER="stateless" VE_ROOT="/vz/root/$VEID" VE_PRIVATE="/vz/private/$VEID" VE_LAYOUT="ploop" OSTEMPLATE="centos-7-x86_64" ORIGIN_SAMPLE="vswap-256m" IP_ADDRESS="192.168.10.101" HOSTNAME="centos7.kamaok.org.ua" NAMESERVER="8.8.8.8 8.8.4.4" ONBOOT="yes" |
Выполнение команды внутри контейнера находясь на хостовой ноде
(например, установка пароля для пользователя root в контейнере)
1 |
# vzctl exec 101 passwd |
Вход в контейнер
1 |
# vzctl enter 101 |
1 |
[root@centos7 /]# cat /etc/redhat-release |
1 |
CentOS Linux release 7.2.1511 (Core) |
Настройка сети на OpenVZ
OpenVZ имеет возможность настройки VETH (Virtual ETHernet) или VENET (Virtual NETwork) сетевого девайса внутри контейнера. VETH позволяет broadcasts-сообщения внутри контейнера и имеет MAC — адрес на интерфейсе, поэтому можно настроить автоматическое получение адреса с помощью DHCP или настроить Samba — сервер, который также требует broadcasts-сообщений. VETH-интерфейс только задается с помощью vzctl, все дальнейшее настройки интерфейса ( задания IP, gateway и др.) необходимо проводить в самом контейнере. Однако, скорее всего, VENET-соединения будет более чем достаточно. К преимуществам последнего можно отнести высокую скорость работы по сравнению с VETH и быструю его настройку ресурсами хост-машины.
Больше о разнице между этими типами можно получить на официальном сайте
https://wiki.openvz.org/Differences_between_venet_and_veth
Использование типа интерфейса VENET
Сетевые настройки на ноде имеют вид
1 |
# ifconfig |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
eth0 Link encap:Ethernet HWaddr 08:00:27:12:8F:60 inet addr:10.10.1.41 Bcast:10.10.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:5287 errors:0 dropped:0 overruns:0 frame:0 TX packets:402 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:451636 (441.0 KiB) TX bytes:62385 (60.9 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) venet0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) |
Настройка доступа в Интернет для виртуальной машины
Устанавливаем и настраиваем iptables на ноде
1 |
# yum install iptables |
1 |
# iptables -t nat -L |
1 2 |
iptables v1.4.7: can't initialize iptables table `nat': Table does not exist (do you need to insmod?) Perhaps iptables or your kernel needs to be upgraded. |
При обновлении версии vzctl с 4.6 на 4.7 conntrack для VE0 был отключен по умолчанию
https://openvz.org/Download/vzctl/4.7/changes
по причине потери производительнотсти (до 10%)
IP conntrack functionality has some negative impact on venet performance (uo to about 10%), so they better be disabled by default.
Решение
1 |
# grep -R "options nf_conntrack ip_conntrack_disable_ve0=1" /etc/modprobe.d/ |
1 |
/etc/modprobe.d/openvz.conf:options nf_conntrack ip_conntrack_disable_ve0=1 |
Отключаем эту опцию(меняя значение с 1 на 0) и перезагружаем ноду
1 |
# nano /etc/modprobe.d/openvz.conf |
1 |
options nf_conntrack ip_conntrack_disable_ve0=0 |
Перезагружаем ноду
1 |
# reboot |
1 |
# uptime && iptables -t nat -L |
1 2 3 4 5 6 7 8 9 |
19:01:35 up 0 min, 1 user, load average: 1.40, 0.46, 0.16 Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination |
1.Включаем SNAT/MASQUERADE на хостовой ноды для сети виртуальных машин
1 |
# iptables -t nat -A POSTROUTING -o eth0 -s 192.168.10.0/24 -j SNAT --to-source 10.10.1.41 |
192.168.10.0/24 – частная/внутренняя сеть для вирт.машин
Eth0-внешний интерфейс,смотрящий наружу(подключен к провайдеру)
10.10.1.41– IP-адрес на внешнем интерфейсе
1 |
# service iptables save |
Если адрес на внешнем интерфейсе получается от провайдера не статический, а динамический,то используем т.н. «маскарадинг»
1 |
# iptables -t nat -A POSTROUTING -o eth0 -s 192.168.10.0/24 -j MASQUERADE |
2.Проверяем, включена ли маршрутизация пакетов
1 |
# sysctl -a | grep -w net.ipv4.ip_forward |
1 |
net.ipv4.ip_forward = 1 |
шлюзом по умолчанию для вирт.машины выступает интерфейс venet0, через который она перенаправляет все пакеты, как в Интернет, так и для других вирт.машин в этой сети
Сетевые настройки на виртуальной машине имеют вид
Проверка наличия доступа в Интернет с вирт.машины
1 |
# vzctl enter 101 |
1 |
entered into CT 101 |
1 |
[root@centos7 /]# ping i.ua |
1 2 3 4 5 6 |
PING i.ua (91.198.36.14) 56(84) bytes of data. 64 bytes from www.i.ua (91.198.36.14): icmp_seq=1 ttl=54 time=10.4 ms ^C --- i.ua ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 10.464/10.464/10.464/0.000 ms |
Установка Web-панели для управления виртуальными машинами OVZ Web Panel
http://wiki.openvz.org/Control_panels
1 |
# wget -O - http://ovz-web-panel.googlecode.com/svn/installer/ai.sh | sh |
После установки панель доступна на порту 3000
1 |
http://<IP-address-server>:3000 |
1 |
Default credentials: admin/admin |
Если вручную выполняем команды,тогда через панель нужно синхронизироваться
1 |
Физический сервер->отмечаем все сервера->синхронизация |
Полезные команды для работы с OpenVZ
110 – номер контейнера
Остановка контейнера
1 |
# vzctl stop 110 |
Запуск контейнера
1 |
# vzctl start 110 |
Перезапуск контейнера
1 |
# vzctl restart 110 |
Удаление контейнера
1 |
# vzctl destroy 110 |
Запуск команды в контейнере
1 |
# vzctl exec 110 command |
Подсоединение к консоли контейнера
1 |
# vzctl enter 101 |
Установка различных параметров для контейнера
1 |
# vzctl set 101 different_options |
Проверка синтаксиса конфигурационного файла контейнера
1 |
# vzcfgvalidate /etc/vz/conf/101.conf |
Проверка синтаксиса всех конфигурационных файлов
1 |
# for n in /etc/vz/conf/???.conf;do echo check $n; vzcfgvalidate $n; done |
Проверяется именно файл (с указанием полного пути), а не текущие параметры, которые могут быть другими, если «vzctl set» запускался без ключа «—save». С другой стороны, vzcfgvalidate удобен тем, что может проверять параметры, когда контейнер не запущен
Для исправления конфигурационного файла vzcfgvalidate следует запустить с ключом «-r» («repair mode», автоматическое исправление) или «-i» («interactive repair», ручное исправление).
Управление ограничениями в системе с OpenVZ является двухуровневым: для контейнера в целом – средствами OpenVZ, внутри контейнера – стандартными средствами Linux, через ulimit и дисковые квоты.
Для проверки внешних ограничений служит файл /proc/user_beancounters. Внутри контейнера этот файл заполнен информацией по данному контейнеру, во внешней системе содержит сведения обо всех запущенных окружениях. Основной интерес в нём представляет последний столбец, «failcnt» («failure counter», т. е. «количество сбоев»):
Проверка лимитов/ошибок контейнера
1 |
# cat /proc/user_beancounters |
Установка лимитов для контейнера
Изменение дисковой квоты дискового пространства
(синтаксис задания такой software_limit:hardware_limit ):
1 |
# vzctl set 101 --diskspace 5G:6G --save |
Изменение дисковых inod
1 |
# vzctl set 101 --diskinodes 90000:91000 --save |
Изменение приоритета ввода/выводы дисковой подсистемы
Самый высокий уровень — 7, самый низкий- 0. По умолчанию disk I/O устанавливается в 4
1 |
# vzctl set 101 --ioprio 6 --save |
Изменение процеcсорного времени для контейнера
1 |
# vzctl set 101 --cpuunits 2048 --save |
1 |
# vzctl set 101 --cpulimit 80 --save |
Изменение размера оперативной памяти и файла подкачки
1 |
# vzctl set 101 --ram 512M --save --swap 512M --save |
Подробное описание выделяемых контейнеру ресурсов
https://openvz.org/User_Guide/Managing_Resources
Проверка синтаксиса конфигурационного файла контейнера
1 |
# vzcfgvalidate /etc/vz/conf/101.conf |
Проверим наличе всех изменений в конфигарационном файле контейнера
1 |
# grep -Ei 'physpages|diskspace|diskinodes|ioprio|cpuunits|cpulimit|swappages|ram' /etc/vz/conf/101.conf | grep -vE '^$|^#' |
1 2 3 4 5 6 7 |
PHYSPAGES="0:131072" SWAPPAGES="0:131072" DISKSPACE="5242880:6291456" DISKINODES="90000:91000" CPUUNITS="2048" CPULIMIT="80" IOPRIO="6" |
Бекап/восстановление контейнеров
Скачиваем утилиту vzdump с одного из зеркал нас сайте OpenVZ
https://ftp.openvz.org/
Например,
1 |
# wget http://mirror.mirohost.net/openvz/contrib/utils/vzdump/vzdump-1.2-4.noarch.rpm |
Для установки vzdump требуется установить пару пакетов зависимостей
perl-LockFile-Simple и cstream
Оба этих пакетв есть в RPMForge репозитарии.Если этот репозитарий не подключен,то достаточно подключить EPEL-репозитарий
У меня подключен EPEL-репозитарий,в котором есть пакет perl-LockFile-Simple
Установим этот пакет
1 |
# yum install cperl-LockFile-Simple |
Пакет cstream скачаем с репозитария RPMForge и установим с помощью пакетного менеджера rpm
1 |
# wget http://ftp.tu-chemnitz.de/pub/linux/dag/redhat/el6/en/x86_64/rpmforge/RPMS/cstream-3.1.0-1.el6.rf.x86_64.rpm |
1 |
# rpm -ihv cstream-3.1.0-1.el6.rf.x86_64.rpm |
Установим vzdump
1 |
# rpm -ihv vzdump-1.2-4.noarch.rpm |
1 |
# rpm -qa | grep vzdump |
1 |
vzdump-1.2-4.noarch |
Сделаем бекап контейнера 101
1 |
# vzdump --suspend 101 |
1 |
# ls -lh /vz/dump/*.tar |
1 |
-rw-r--r-- 1 root root 817M Oct 23 16:52 /vz/dump/vzdump-openvz-101-2016_10_23-16_49_13.tar |
Восстановим с бекапа с помощью утилиты vzrestore
Если необходимо восстановить с ID,которым уже существует контейнер, то этот контейнер необходимо предварительно удалить,чтобы освободить ID
1 |
# vzctl destroy 101 |
1 |
# vzrestore /vz/dump/vzdump-openvz-101-2016_10_23-16_49_13.tar 101 |
Также с бекапа можно создать новый контейнер с новым уникальным идентификатором контейнера.
1 |
# vzrestore /vz/dump/vzdump-openvz-101-2016_10_23-16_49_13.tar 105 |
1 |
# vzlist -a |
1 2 3 4 5 |
CTID NPROC STATUS IP_ADDR HOSTNAME 101 - stopped 192.168.10.101 centos7.kamaok.org.ua 102 47 running 192.168.10.102 debian8.kamaok.org.ua 103 48 running 192.168.10.103 ubuntu14.kamaok.org.ua 105 - stopped 192.168.10.101 centos7.kamaok.org.ua |
Мониторинг загрузки на процессор и диск от контейнеров OpenVZ
1 |
# wget --no-check-certificate https://raw.githubusercontent.com/FastVPSEestiOu/open_vestat/master/open_vestat.pl -O # /usr/local/sbin/open_vestat |
1 |
# chmod +x /usr/local/sbin/open_vestat |
1 |
# ln -s /usr/local/sbin/open_vestat /usr/sbin/open_vestat |
1 |
# open_vestat --sort-by cpu |
1 2 3 4 |
We sort data by cpu 102: disk_time: 0.0 % disk_sectors: 0.0 % cpu: 5.7 % 103: disk_time: 0.0 % disk_sectors: 0.0 % cpu: 4.4 % 101: disk_time: 0.0 % disk_sectors: 0.0 % cpu: 3.2 % |
http://openvz.org/Resource_shortage
Источники:
http://www.howtoforge.com/installing-and-using-openvz-on-centos-6.4-p2
http://bezha.od.ua/centos-openvz/
http://wiki.centos.org/HowTos/Virtualization/OpenVZ
http://openvz.org/Quick_installation
http://www.ibm.com/developerworks/ru/library/l-openvz_2/index.html?S_TACT=105AGX99&S_CMP=GR01#author1