(с) Durman
Решил поковырять какую-нибудь виртуализацию на сервере. Когда-то слышал/читал про OpenVZ. Стало интересно, что за зверь такой. Оказалось отличная вещь, и при том первоначальная установка и настройка весьма проста
Википедия говорит:
OpenVZ — это реализация технологии виртуализации на уровне операционной системы, которая базируется на ядре Linux. OpenVZ позволяет на одном физическом сервере запускать множество изолированных копий операционной системы, называемых Виртуальные Частные Серверы (Virtual Private Servers, VPS) или Виртуальные Среды (Virtual Environments, VE). Поскольку OpenVZ базируется на ядре Linux, в отличие от виртуальных машин (напр. VMware) или паравиртуализационных технологий (напр. Xen), в роли "гостевых" систем могут выступать только дистрибутивы GNU/Linux. Однако, виртуализация на уровне операционной системы в OpenVZ даёт лучшую производительность, масштабируемость, плотность размещения, динамическое управление ресурсами, а также лёгкость в администрировании, чем у альтернативных решений. Согласно сайту OpenVZ, накладные расходы на виртуализацию очень малы, и падение производительности составляет всего 1-3 %, по сравнению с обычными Linux-системами.
OpenVZ представляет собой набор патчей на стандартное ядро + утилиты администрирования. Все это добро есть в репозиториях Дебиана. Вытягиваем из репы ядро и утилиты:
# apt-get install vzctl linux-image-2.6.26-openvz-686
vzctl вытянет за собой нужные утилиты. linux-image-2.6.26-openvz-686 пропишется в menu.lst grub'а. В интернетах рекомендуют создать симлинк:
# ln -s /var/lib/vz /vz
В каталоге /var/lib/vz будут находится гостевые ОСи и прочая ботва. Далее необходимо редактировать файл /etc/sysctl.conf. В этом файле находятся параметры, передаваемые ядру. Эти параметры можно передать/изменить вручную, покопавшись в /proc. Редактируем /etc/sysctl.co
#vim /etc/sysctl.conf net.ipv4.conf.all.rp_filter=1 net.ipv4.icmp_echo_ignore_broadcasts=1 net.ipv4.conf.default.forwarding=1 net.ipv4.conf.default.proxy_arp = 0 net.ipv4.ip_forward=1 kernel.sysrq = 1 net.ipv4.conf.default.send_redirects = 1 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.eth0.proxy_arp=1
Применяем параметры ,указанные в /etc/sysctl.conf
# sysctl -p
Следующий шаг важен если IP-адреса Ваших виртуальных машин из другой подсети, нежели IP-адрес реальной системы (хост-системы). Если Вы этого не сделаете, Ваши виртуальные машины не смогут использовать сеть!
Откроем файл /etc/vz/vz.conf и установим значение параметра NEIGHBOUR_DEVS в all:
vi /etc/vz/vz.conf [...] # Controls which interfaces to send ARP requests and modify APR tables on. NEIGHBOUR_DEVS=all [...]
Теперь нужно скачать готовый образ гостевой ОС. В репозитории Дебиана его нет. Добавьте новую строку в файл /etc/ap/sources.list:
deb http://download.openvz.org/debian-systs etch openvz
Скачиваем и устанавлиаем ключи репозитория, обновляем списки пакетов и выкачиваем образ гостевой системы:
# wget -q http://download.openvz.org/debian-systs/dso_archiv_signing_key.asc -O- | apt-key add - # apt-get update # apt-get install vzctl-ostmpl-debian-4.0-i386-minimal
Также можно скачать vzctl-ostmpl-debian-5.0-i386-minimal. Кому что нравится.
Необходима перезагрузка:
# reboot
Проверим, какое ядро загружено:
# root@server:~# uname -a Linux server 2.6.26-2-openvz-686 #1 SMP Wed Aug 19 07:30:34 UTC 2009 i686 GNU/Linux
Чтобы установить VPS из шаблона vzctl-ostmpl-debian-4.0-i386-minimal (находится в /var/lib/vz/template/cache), выполните:
# vzctl create 1 --ostemplate debian-4.0-i386-minimal --config vps.basic Creating container private area (debian-4.0-i386-minimal) Performing postcreate actions Container private area was created
Создали VPS с ID=1. Судя по всему имена VPS'кам можно давать только численные. На буквы утилита ругается.
Следующая команда заставит загружаться VPS'ку при загрузке системы:
# vzctl set 001 --onboot yes --save Saved parameters for CT 1
Задаем имя хоста и IP-адрес:
#vzctl set 1 --hostname test.ru --save #vzctl set 1 --ipadd 192.168.0.1 --save
Еще какие-то сокеты говорят нужно прописать:
# vzctl set 1 --numothersock 120 --save
А также DNS-сервера:
# vzctl set 1 --nameserver 1.2.3.4 --nameserver 5.6.7.8 --save
Все, запускаем виртуальную машину:
# vzctl start 1
Следующая команда установит пароль root на виртуальной машине:
# vzctl exec 1 passwd
Т.е. синтаксис такой: vzctl exec <VPS_ID> <команда внутри виртуальной машины>
Вход по SSH на VPS'ку:
# vzctl enter 1
Далее можно работать как с обычным сервером. Для выхода из консоли VPS'ки пишем exit
# vzctl stop 1 - остановка виртуальной машины # vzctl restart 1 - перезагрузка # vzctl destroy 1 - удаление VPS (предварительно остановив ее работу)
vzlist показывает информацию о VPS
#vzlist CTID NPROC STATUS IP_ADDR HOSTNAME 1 4 running 192.168.0.1 test.ru
Внутри VPS:
# free total used free shared buffers cached Mem: 262144 5612 256532 0 0 0 -/+ buffers/cache: 5612 256532 Swap: 0 0 0 # df -h Filesystem Size Used Avail Use% Mounted on simfs 1.0G 128M 897M 13% / tmpfs 248M 0 248M 0% /lib/init/rw tmpfs 248M 0 248M 0% /dev/shm
Как видно, размеры виртуальных ОЗУ и HDD равны 256 Мб и 1Гб соответственно. Видимо это размеры дефолтные. Вроде как при помощи утилиты vzquota их можно менять. Пока не раскуривал.





Интересная статья, но я
Интересная статья, но я больше склоняюсь к XEN. Нашёл статью про недостатки OpenVZ и достоинство XEN. Похоливарим? :)
XEN vps против OpenVZ
OpenVZ / Virtuozzo технология, ее плюсы и проблемы
Уже довольно долго на рынке vps хостинга почти безраздельно царствовала OpenVZ, коммерческий вариант которой называется Virtuozzo. С появлением 3-й версии технологии Xen ситуация изменилась. Конечно, большинству отечественных хостеров потребуется еще несколько лет, чтобы это заметить ;). Но Xen уже начал победное шествие по планете vps хостинга. Объясняется это его подавляющим технологическим превосходством перед традиционной технологией vps хостинга.
До появления Xen было два чётких варианта виртуализации. Более или менее "честный" виртуальный сервер (например, vmware) и разделение ресурсов в рамках одного сервера, что и делает openvz. Честная виртуализация работала откровенно медленно и для VPS хостинга не годилась. Так что рынок хостинга полностью занял не "честный", но работающий вариант - OpenVZ / Virtuozzo. Но как обычно бывает, не совсем правильное решение и работает не совсем правильно.
Как разделяются ресурсы в традиционном OpenVZ vps хостинге? Сервер хостера ведет кучу счетчиков (оперативная память, место на диске, кол-во процессов и т.п.) и не дает Вам их превышать. Сразу возникает первая проблема: ограничения на все эти ресурсы в тарифе. В то время как в реальном сервере это ограничивается только возможностями ядра (а значит, практически не ограничивается). Но в OpenVZ ядро ОС (операционной системы), которое и управляет всеми ресурсами, одно на всех. Поэтому ограничивать приходится.
Одно ядро на всех означает, что Вы не можете его заменить. А значит, не можете поставить вместо Linux FreeBSD или тем более Windows.
Десятки vps работают на одном ядре ОС. Это значит, ядро обрабатывает огромное количество процессов и их ресурсов. Благодаря потрясающей масштабируемости Linux это все в общем-то нормально работает. Но ничто не совершенно, в любом ПО бывают ошибки, сбои и уязвимости. И понятно, что десятки серверов, работающие на одном Linux ядре, - это в десятки раз уменьшенная надежность. Простая логика. Которая вполне конкретно подтверждается практикой.
OpenVZ представляет из себя огромную кучу заплаток к стандартному ядру Linux. Объем этих заплаток слишком большой, чтобы это было достаточно надежно.
Раз у Вас нет своего ядра, очевидно, что Вы не можете сами в него загрузить нужный модуль. Нужно просить хостера.
Диск (точнее файловая система) тоже получается один на всех. Например, если будет сбой файловой системы, то это коснется всех vps на этом сервере. Вы не можете сделать себе отдельную файловую систему, не можете сделать их больше одной.
И наконец большая проблема с памятью: ограничение доступной памяти работает совсем не так, как на реальном сервере. Дело в том, что тут по счетчику как бы имитируется нужный объем памяти и имитируется он не полноценно. Кончается это тем, что Вы можете написать программу, которая выделит 100MB памяти, запустить ее на VPS, имеющем 128MB памяти, и она запустится. Потом взять готовую программу (например, mysql), настроить ее на использование тех же 100MB памяти, и с удивлением обнаружить, что памяти не хватило. Может потребоваться увеличить тариф VPS до 256MB, а то и до 512MB, чтобы mysql наконец смог нормально запуститься в конфигурации на 100MB!
Первое, что приходит в голову многим хостерам, раз так: дадим всем памяти в несколько раз больше, чем должно приходиться по тарифу. И вроде бы все работает. Ровно до того момента, когда на определенном проценте VPS запустятся программы, работающие с памятью более эффективно и которые из доступных, скажем 512MB, займут по 400, а не по 100. И в этот момент все VPS на данном сервере не могут получить положенную им память. Если задействовать своп (файл подкачки) на жестком диске, то десятки свопающих VPS умрут еще надежней.
В итоге мы имеем виртуальный выделенный сервер, который как-то не очень выделенный. Со странными ограничениями, похожими на шаред хостинг и другими проблемами.
Из плюсов - мгновенное изменение любых лимитов на Вашей vps при смене тарифа. Так как все ресурсы разделяются просто ведением счетчиков, то изменение тарифа сводится к изменению счетчиков. Перезагрузка vps не требуется.
Также OpenVZ vps обычно дешевле стоят, потому что позволяют хостеру продавать ресурсов заметно больше, чем их реально есть. Например, диск один на всех, а vps обычно занимают не все отведенное им место. Соответственно, хостер может продать места больше, чем его реально есть, а значит может снизить цену. Отсюда видно, почему у разных хостеров цены на vps могут сильно отличаться: чем больше хостер использует этот эффект, тем меньше цены и ... как не сложно догадаться, качество услуги тоже меньше.
На нашем хостинге мы сделали довольно жесткие по лимитам тарифы, что позволило выдерживать довольно хорошее качество. Но все же vps на базе Xen позволяют поднять качество vps хостинга намного выше.
Решение проблем в Xen VPS
С появлением Xen ситуация в корне изменилась. Эта технология позволяет запустить на одном сервере десятки отдельных ядер ОС с исчезающе малыми потерями в производительности. А раз мы получаем отдельное ядро ОС на каждую vps, это сразу решает все вышеописанные проблемы!
Не, холиварить не надо :) Я
Не, холиварить не надо :)
Я вовсе не ставью OpenVZ на первое место среди средств виртуализации. Простое и практичное решение получается. А вот XEN из дебиан после squeeze уберут насовсем. Почему-то разработчики дебиана считают, что XEN устарел
Да я, если честно, про XEN
Да я, если честно, про XEN задвинул холивар спровоцировать. Интересно же :) А статья путёвая. Респект!
Где-то видел статью, что XEN настролько замужен, что его не могут нормально поддерживать под каждый дистриб/ядро. Именно поэтому в Дебиаене далеко не самая свежая версия XEN-а
PS: Кстати, когда XEN копал - с сетью намаялся. Чё-то там как-то жутко намужено было...
Из реальной
Из реальной практики:
Кто-нибудь реально хостился на VPS? У меня по весне было дело. И вот шо я таки вам скажу: нуегонафик! Разве что какие-нибудь мелкие проекты с небольшой посещаемостю тянет.
А вот для школы может и неплохое решение. При ограниченном количестве компьютеров создать каждому ученику свою собственную виртуальную машину даже с рутовыми полномочиями. Угробил - сам виноват, но другие не пострадали. Linux изучать - самое оно.
Почему же нуегонафик? По сути
Почему же нуегонафик? По сути получаешь полноценный сервак в своё распоряжение без каких либо ограничений. Что хочешь - то и делаешь... Имхо всё зависи от того, на чём именно построена виртуализация. Я вот сейчас в сторону XEN копаю - так там если всё пучкасто настроено, да железо виртуализацию поддерживает - так вообще красота... Очень удобно разделять проекты как по приоритетам на ресурсы, так и по степени защищённости (если кривой двиган - его в самую жесткую клетку с кучей ограничений)
Хороший ман. Спасибо автору.
Хороший ман. Спасибо автору. Поставил и разобрался в OpenVZ.
Жаль, дальше про VZQUOTE'у не написано. Буду с нетерпением ждать продолжения. Или гуглить дальше.
насчет холивара - это дело каждого что ставить. Кто в чем больше разбирается, тот то и ставит. В дебиане, думаю, не прогадал. Удобная Ось.
Виртуализация на уровне операционной системы, которая базируется на ядре, вполне справляется со своими задачами. Можно даже на 64-битку поставить VPS i386. Что в двое уже расширяет свои возможности.
Забыл еще добавить. При
Забыл еще добавить. При установке, когда присваиваешь IP машинке, то у меня он сругался:
WARNING: Function proxy_arp for eth0 is set to 0. Enable with 'sysctl -w net.ipv4.conf.eth0.proxy_arp=1'.
Лечится путем добавления строчек в /etc/network/interfaces
== Cut ==
up sysctl -w net.ipv4.conf.eth0.proxy_arp=1
up sysctl -w net.ipv4.conf.eth0.forwarding=1
== Cut ==
после этого вручную нужно выполнить:
== Cut ==
sysctl -w net.ipv4.conf.eth0.proxy_arp=1
sysctl -w net.ipv4.conf.eth0.forwarding=1
== Cut ==
Отправить комментарий