В статье описано как установить OpenVZ для сервера работающего на CentOS. Большая часть правильна и для любой другой операционной системы Linux.
Благодаря OpenVZ можно легко создать несколько виртуальных машин или другими словами серверов-VPS используя всего один сервер (железо). Есть другие различные системы виртуализации, например Xen или Linux Vserver. Однако в статье затронем только OpenVZ. Проект распространяется с открытым исходным кодом. Патч OpenVZ для ядра распространяется под лицензией GPL, а инструменты пользователя под лицензией QPL. Поэтому многие коммерческие компании предлагающие услуги VPS используют эту систему.
В статье дано только практическое руководство. Охвата теоретических основ не будет. Гугл в помощь. Также не дается никаких гарантий что у вас не будет никаких проблем и все что описано тут, заработает правильно.
Установка OpenVZ
Для того чтобы установить OpenVZ, нужно добавить репозиторий:
cd /etc/yum.repos.d wget http://download.openvz.org/openvz.repo rpm –import http://download.openvz.org/RPM-GPG-Key-OpenVZ
Откроем openvz.repo:
vi openvz.repo
Отключим [openvz-kernel-rhel5] выставив (enabled=0) и включим [openvz-kernel-rhel6] выставив (enabled=1):
[openvz-kernel-rhel6] name=OpenVZ RHEL6-based kernel
mirrorlist=http://download.openvz.org/kernel/mirrors-rhel6-2.6.32 enabled=1 gpgcheck=1 gpgkey=http://download.openvz.org/RPM-GPG-Key-OpenVZ
[openvz-kernel-rhel5] name=OpenVZ RHEL5-based kernel
mirrorlist=http://download.openvz.org/kernel/mirrors-rhel5-2.6.18 enabled=0 gpgcheck=1 gpgkey=http://download.openvz.org/RPM-GPG-Key-OpenVZ
Репозиторий содержит несколько различных ядер с патчем OpenVZ (подробности). Посмотреть можно командой:
yum search vzkernel
Вывод вышеприведенной команды:
[root@server yum.repos.d]# yum search vzkernel … vzkernel.i686 : The Linux kernel vzkernel.x8664 : The Linux kernel vzkernel-devel.i686 : Development package for building kernel modules to match the kernel vzkernel-devel.x8664 : Development package for building kernel modules to match the kernel vzkernel-firmware.noarch : Firmware files used by the Linux kernel vzkernel-headers.i686 : Header files for the Linux kernel for use by glibc vzkernel-headers.x86_64 : Header files for the Linux kernel for use by glibc … [root@server yum.repos.d]#
Выберите нужное и установите:
yum install vzkernel
Установщик должен автоматически обновить загрузчик GRUB. Лучше проверить. Для этого открываем /boot/grub/menu.lst.
vi /boot/grub/menu.lst
Первая строка должна быть указана на новое ядро с OpenVZ. Значение по умолчанию должно стоять на 0 (ноль), чтобы новое ядро загружалось автоматически, вместо тех что были в CentOS:
default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title OpenVZ (2.6.32-042stab057.1)
root (hd0,0) kernel /vmlinuz-2.6.32-042stab057.1 ro root=/dev/mapper/vg_server-lv_root rd_LVM_LV=vg_server/lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=de rd_LVM_LV=vg_server/lv_swap rd_NO_DM rhgb quiet initrd /initramfs-2.6.32-042stab057.1.img
title CentOS (2.6.32-279.el6.x8664) root (hd0,0) kernel /vmlinuz-2.6.32-279.el6.x8664 ro root=/dev/mapper/vgserver-lvroot rdLVMLV=vgserver/lvroot rdNOLUKS LANG=enUS.UTF-8 rdNOMD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=de rdLVMLV=vgserver/lvswap rdNODM rhgb quiet initrd /initramfs-2.6.32-279.el6.x8664.img
Теперь можно установить инструменты для управления OpenVZ:
yum install vzctl vzquota
Открываем sysctl.conf:
vi /etc/sysctl.conf
Смотрим чтобы были настройки:
net.ipv4.ipforward = 1 net.ipv4.conf.default.proxyarp = 0 net.ipv4.conf.all.rpfilter = 1 kernel.sysrq = 1 net.ipv4.conf.default.sendredirects = 1 net.ipv4.conf.all.sendredirects = 0 net.ipv4.icmpechoignorebroadcasts=1 net.ipv4.conf.default.forwarding=1
Если нужно изменить sysctl.conf. Запускаем:
sysctl -p
Следующий шаг очень важен! Если IP-адресы ваших виртуальных машин из другой подсети, нежели IP-адрес хост системы, сеть не будет работать в виртуальных машинах!
Открываем vz.conf:
vi /etc/vz/vz.conf
и ставим настройку у NEIGHBOUR_DEVS на all:
NEIGHBOUR_DEVS=all
Также нужно не забыть про SELinux. Его можно отключить совсем. Открываем /etc/sysconfig/selinux:
vi /etc/sysconfig/selinux
и выставляем значение disabled:
SELINUX=disabled
SELINUXTYPE=targeted
Теперь нужно перезагрузить систему:
reboot
Если при этом не возникло проблем, то все отлично! Проверим ядро:
uname -r
Как видим загружено:
[root@server ~]# uname -r 2.6.32-042stab057.1 [root@server ~]#
Использование OpenVZ
Во второй части рассмотрим практическое руководство по использованию OpenVZ. Перед тем как как создавать виртуальные машины нужно сделать шаблоны в директории /vz/template/cache. Список шаблонов можно найти на странице http://wiki.openvz.org/Download/template/precreated.
В руководстве будет использоваться для виртуальных машин операционная система CentOS 6, так что качаем шаблон для нее:
cd /vz/template/cache wget http://download.openvz.org/template/precreated/centos-6-x86_64.tar.gz
Далее переведены основные команды управления OpenVZ.
Чтобы настроить VPS с шаблоном CentOS 6, выполните:
vzctl create 101 –ostemplate centos-6-x86_64 –config basic
101 это уникальный ID — у каждой виртуальной машины должен быть свой собственный ID. Для простоты лучше всего использовать последнюю часть IP-адреса виртуальной машины. Например, если IP-адрес 192.168.0.101, ставим 101. Однако это как вам хочется.
Для автозапуска виртуальной машины при старте хостовой операционной системы, выполните:
vzctl set 101 –onboot yes –save
Чтобы установить имя_хоста и IP-адрес для виртуальной машины, выполните:
vzctl set 101 –hostname test.example.com –save vzctl set 101 –ipadd 192.168.0.101 –save
Затем установим количество сокетов на 120 и назначим несколько нэйм-серверов в виртуальной машине:
vzctl set 101 –numothersock 120 –save vzctl set 101 –nameserver 8.8.8.8 –nameserver 8.8.4.4 –nameserver 145.253.2.75 –save
Также вместо команды vzctl можно напрямую редактировать конфиги в /etc/vz/conf. Если ID машины 101, значит конфиг /etc/vz/conf/101.conf.
Для старта виртуальной машины, выполните:
vzctl start 101
Чтобы назначить пароль root:
vzctl exec 101 passwd
Теперь можно подключиться к виртуальной машине с помощью SSH или следующим образом:
vzctl enter 101
Чтобы оставить консоль виртуальной машины, выполните:
exit
Для остановки виртуальной машины, выполните:
vzctl stop 101
Для перезагрузки виртуальной машины, выполните:
vzctl restart 101
Чтобы удалить виртуальную машину. Сначала останавливаем ее работу, затем выполняем:
vzctl destroy 101
Чтобы получить список всех ваших виртуальных машин и их статусов работы, выполняем:
vzlist -a
Вывод выше переведенной команды будет похожем на:
<code>[root@server cache]# vzlist -a
CTID NPROC STATUS IP_ADDR HOSTNAME 101 14 running 192.168.0.101 test.example.com
[root@server cache]#
Для получения информации о ресурсах выделяемых на виртуальную машину, выполните:
vzctl exec 101 cat /proc/user_beancounters
Вывод вышеприведенной команды:
[root@server cache]# vzctl exec 101 cat /proc/user_beancounters Version: 2.5
uid resource held maxheld barrier limit failcnt 101: kmemsize 1508202 1661695 11055923 11377049 0 lockedpages 0 0 256 256 0 privvmpages 5430 7102 65536 69632 0 shmpages 381 381 21504 21504 0 dummy 0 0 0 0 0 numproc 19 21 240 240 0 physpages 2489 2775 0 2147483647 0 vmguarpages 0 0 33792 2147483647 0 oomguarpages 2489 2775 26112 2147483647 0 numtcpsock 5 5 360 360 0 numflock 3 4 188 206 0 numpty 0 1 16 16 0 numsiginfo 0 2 256 256 0 tcpsndbuf 44720 0 1720320 2703360 0 tcprcvbuf 81920 0 1720320 2703360 0 othersockbuf 13144 14356 1126080 2097152 0 dgramrcvbuf 0 8380 262144 262144 0 numothersock 11 13 120 120 0 dcachesize 0 0 3409920 3624960 0 numfile 503 531 9312 9312 0 dummy 0 0 0 0 0 dummy 0 0 0 0 0 dummy 0 0 0 0 0 numiptent 10 10 128 128 0
[root@server cache]#
Тут важна колонка failcnt, она должна содержать только нули, если нет, это означает виртуальная машина требует больше ресурсов чем в настоящее время выделяется. Для изменения количества откройте конфиг в директории /etc/vz/conf и поменяйте соответствующий ресурс. После изменения не забудьте перезагрузить виртуальную машину.
Подробнее о командах vzctl можно узнать в мане:
man vzctl