В статье описано как установить 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\\ #baseurl=http://download.openvz.org/kernel/branches/rhel6-2.6.32/current/\\ 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\\ #baseurl=http://download.openvz.org/kernel/branches/rhel5-2.6.18/current/\\ 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.x86_64 : The Linux kernel vzkernel-devel.i686 : Development package for building kernel modules to match the kernel vzkernel-devel.x86_64 : 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: '' # grub.conf generated by anaconda\\ # # Note that you do not have to rerun grub after making changes to this file\\ # NOTICE: You have a /boot partition. This means that\\ # all kernel and initrd paths are relative to /boot/, eg.\\ # root (hd0,0)\\ # kernel /vmlinuz-version ro root=/dev/mapper/vg_server-lv_root\\ # initrd /initrd-[generic-]version.img\\ #boot=/dev/sda\\ 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.x86_64)\\ root (hd0,0)\\ kernel /vmlinuz-2.6.32-279.el6.x86_64 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-279.el6.x86_64.img'' Теперь можно установить инструменты для управления OpenVZ: yum install vzctl vzquota Открываем sysctl.conf: vi /etc/sysctl.conf Смотрим чтобы были настройки: '' net.ipv4.ip_forward = 1\\ net.ipv4.conf.default.proxy_arp = 0\\ net.ipv4.conf.all.rp_filter = 1\\ kernel.sysrq = 1\\ net.ipv4.conf.default.send_redirects = 1\\ net.ipv4.conf.all.send_redirects = 0\\ net.ipv4.icmp_echo_ignore_broadcasts=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: '' # This file controls the state of SELinux on the system.\\ # SELINUX= can take one of these three values:\\ # enforcing - SELinux security policy is enforced.\\ # permissive - SELinux prints warnings instead of enforcing.\\ # disabled - No SELinux policy is loaded.\\ SELINUX=disabled\\ # SELINUXTYPE= can take one of these two values:\\ # targeted - Targeted processes are protected,\\ # mls - Multi Level Security protection.\\ 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 Вывод выше переведенной команды будет похожем на: '' [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