Статья "Зонная Защита Solaris 10" замечательно описывает подход и
возможности виртуализации на уровне операционной системы на примере
зон в Solaris. Она также содержит ссылки на подобные решения в
Linux-среде - Linux-Vserver, OpenVZ. Так как я использую
преимущественно Debian (а он уже содержит в себе поддержку
linux-vserver), то вопрос выбора для меня стоял недолго, хотя желание
ознакомиться с OpenVZ не пропало.
Linux-vserver - это отличное решение для хостинга и тестирования в
различных окружениях - на одном физическом сервере используется одно
для нескольких виртуальных серверов Linux-ядро. Главный (MAIN) сервер
используется для контроля за виртуальными серверами, каждый из которых
находится в закрытой адресной среде, не видя остальных. Разработчики
указывают около 3-4% падения производительности системы при
использовании VServer, но это настолько маленькие цифры, что их можно
не учитывать - система работает как обычно - шустро.
В репозитарии Debian 4.0 уже есть пропатченное linux-ядро, готовое к
работе. Минусом является отсутствие отдельного патча linux-vserver,
чтобы иметь возможность наложить его на собранное своими руками
ядрышко.
Установка и использование linux-vserver очень проста.
# newvserver --vsroot /var/lib/vservers/ --hostname srv002 --domain
domain.ru --ip 192.168.1.102/24 --dist etch --mirror
http://ftp.at.debian.org/debian --interface eth0
# uname -a
Linux srvmain 2.6.18-4-vserver-686 #1 SMP Thu May 10 01:37:59 UTC
2007 i686 GNU/Linux
Стартуем виртуальный хост
# vserver srv002 start
Входим в виртуальный хост
# vserver srv002 enter
# uname -a
Linux srv002 2.6.18-4-vserver-686 #1 SMP Thu May 10 01:37:59 UTC
2007 i686 GNU/Linux
Сейчас можно настроить виртуальный хост для требуемых нужд, установить
все необходимое/дополнительное. Всё, как на обычном хосте.
Выходим из виртуального хоста
# vserver srv002 stop
Возможные проблемы могут возникнуть с Apache, если на main-хосте уже
запущен Apache и не привязан к конкретному ip-адресу. В этом случае,
пытаясь запустить apache на виртуальном хосте, в error.log можно
встреить ошибку:
[crit] (98)Address already in use: make_sock: could not bind to port 80
Решение: привязать main-сервер к конкретному ip-адресу.
Проблема с Bind 9 решается не так просто:
cd /usr/src
apt-get build-dep bind9
apt-get source bind9
cd bind9-x.x.x
vi debian/rules
...
--disable-linux-caps
--disable-threads
...
dpkg-buildpackage
...
cd ..
dpkg -i *.deb
echo "bind9 hold" | dpkg --set-selections # чтобы заморощить автоматическое обновление
На официальном сайте есть отдел, посвященный "проблемному" soft'у.
Проблем с OpenLDAP, Exim, Proftpd не наблюдалось - всё работает как
обычно - как часы.
Для автозапуска виртуального сервера при перезагрузке необходимо
выполнить следующее:
Если необходимо ограничить ресурсы (процессор, память) виртуальных
хостов, linux-vserver и тут не подведет.
Пример (взят из FAQ) того, как избежать ситуации "Out of memory"
1. Проверить размер страниц (pagesize) в памяти (обычно 4Кб)
2. Создать директорию rlimits
mkdir /etc/vservers/srv002/rlimits
3. Установить значения максимума для резидентной памяти (rss) и
максимума для всего объема виртуальной памяти (as). Хранимые значения
указывают на число страниц памяти - например, чтобы установить предел
в 200Мб при размере страницы 4Кб, нужно указать значение 50000.