Статья "Зонная Защита 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 очень проста.
# apt-get install linux-image-2.6.18-X-vserver-686 util-vserver vserver-debiantools debootstrapПример команды для создания виртуального сервера
# 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На официальном сайте есть отдел, посвященный "проблемному" soft'у. Проблем с OpenLDAP, Exim, Proftpd не наблюдалось - всё работает как обычно - как часы.
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 # чтобы заморощить автоматическое обновление
Для автозапуска виртуального сервера при перезагрузке необходимо выполнить следующее:
echo "default" > /etc/vservers/SERVERNAME/apps/init/markЧтобы сделать копию уже сконфигурированного виртуального хоста srv002 (например web-сервера).
vserver srv003 build --hostname srv003 --interface eth0:192.168.1.103/24 -m rsync -- -s /var/lib/vservers/srv002/Если необходимо ограничить ресурсы (процессор, память) виртуальных хостов, linux-vserver и тут не подведет.
Пример (взят из FAQ) того, как избежать ситуации "Out of memory"
1. Проверить размер страниц (pagesize) в памяти (обычно 4Кб)
2. Создать директорию rlimits
mkdir /etc/vservers/srv002/rlimits3. Установить значения максимума для резидентной памяти (rss) и максимума для всего объема виртуальной памяти (as). Хранимые значения указывают на число страниц памяти - например, чтобы установить предел в 200Мб при размере страницы 4Кб, нужно указать значение 50000.
echo 50000 > /etc/vserver/4. Чтобы изменения вступили в силу, необходимо перезапустить виртуальный хост./rlimits/rss # 200Mb
echo 100000 > /etc/vserver//rlimits/as # 400Mb
В комплекте пакета util-vserver идут замечательные утилиты для наблюдения за виртуальными хостами. Вот как это выглядит:
# vserver-statСсылки:
CTX PROC VSZ RSS userTIME sysTIME UPTIME NAME
0 59 197.9M 43.7M 36m51s32 9m37s35 5d22h45 root server
49166 9 137M 20.2M 0m02s98 0m03s40 4d00h03 srv008
49169 9 137M 20.2M 0m39s41 0m06s62 3d23h59 srv009
49170 13 174.3M 102.6M 16m30s91 1m03s46 3d20h57 srv002
49171 3 21.1M 4.6M 0m00s40 0m00s10 3h22m13 srv001
49176 9 137M 20.2M 0m00s80 0m00s20 1h28m18 srv007
#
#
# vps ax
PID CONTEXT TTY STAT TIME COMMAND
1 0 MAIN ? Ss 0:01 init [2]
...
1045 0 MAIN ? S< 0:12 [md1_raid1]
1049 0 MAIN ? S< 0:00 [md2_raid1]
1126 0 MAIN ? S< 0:00 [kjournald]
1611 0 MAIN ? S< 0:00 [kedac]
1662 0 MAIN ? S< 0:00 [kpsmoused]
1922 0 MAIN ? S< 0:00 [kmirrord]
1970 0 MAIN ? S< 0:00 [kjournald]
1972 0 MAIN ? S< 0:15 [kjournald]
2259 0 MAIN ? Ss 0:02 /sbin/syslogd
2265 0 MAIN ? Ss 0:00 /sbin/klogd -x
2617 0 MAIN ? Ss 0:00 /usr/sbin/inetd
2632 0 MAIN ? Ss 0:00 /usr/sbin/sshd
2874 0 MAIN ? Ss 0:00 /sbin/mdadm
2905 0 MAIN ? Ss 0:00 /usr/sbin/cron
2922 0 MAIN ? Ss 0:00 /usr/sbin/apache
2949 0 MAIN tty1 Ss+ 0:00 /sbin/getty 38400 tty1
2950 0 MAIN tty2 Ss+ 0:00 /sbin/getty 38400 tty2
2951 0 MAIN tty3 Ss+ 0:00 /sbin/getty 38400 tty3
2952 0 MAIN tty4 Ss+ 0:00 /sbin/getty 38400 tty4
2953 0 MAIN tty5 Ss+ 0:00 /sbin/getty 38400 tty5
2954 0 MAIN tty6 Ss+ 0:00 /sbin/getty 38400 tty6
22845 0 MAIN ? Ss 0:00 /usr/sbin/exim4 -bd -q30m
26097 0 MAIN ? S 0:00 /usr/sbin/apache
26098 0 MAIN ? S 0:00 /usr/sbin/apache
26099 0 MAIN ? S 0:00 /usr/sbin/apache
26100 0 MAIN ? S 0:00 /usr/sbin/apache
26101 0 MAIN ? S 0:00 /usr/sbin/apache
15571 49166 srv008 ? Ss 0:00 /sbin/syslogd
15590 49166 srv008 ? Ss 0:00 proftpd: (accepting connections)
15596 49166 srv008 ? Ss 0:00 /usr/sbin/cron
15606 49166 srv008 ? Ss 0:00 /usr/sbin/apache
16397 49169 srv009 ? Ss 0:00 /sbin/syslogd
16416 49169 srv009 ? Ss 0:00 proftpd: (accepting connections)
16422 49169 srv009 ? Ss 0:00 /usr/sbin/cron
16432 49169 srv009 ? Ss 0:00 /usr/sbin/apache
17970 49170 srv002 ? Ss 0:08 /sbin/syslogd
17982 49170 srv002 ? Ss 0:00 /usr/sbin/named -u bind
17989 49170 srv002 ? Ss 0:00 /usr/sbin/lwresd
18005 49170 srv002 ? Ss 15:58 /usr/sbin/clamd
18088 49170 srv002 ? Ss 0:00 /usr/bin/freshclam -d --quiet
18233 49170 srv002 ? Ss 0:06 /usr/sbin/exim4 -bd -q30m
18259 49170 srv002 ? Ss 0:00 /usr/sbin/cron
6387 49169 srv009 ? S 0:00 /usr/sbin/apache
6388 49169 srv009 ? S 0:00 /usr/sbin/apache
6389 49169 srv009 ? S 0:00 /usr/sbin/apache
6390 49169 srv009 ? S 0:00 /usr/sbin/apache
17469 0 MAIN ? Ss 0:00 sshd: root@pts/0
17471 0 MAIN pts/0 Ss+ 0:00 -bash
18505 49171 srv001 ? Ss 0:00 /sbin/syslogd
18515 49171 srv001 ? Ssl 0:00 /usr/sbin/slapd -g openldap -u openldap
18531 49171 srv001 ? Ss 0:00 /usr/sbin/cron
19505 0 MAIN ? Ss 0:00 sshd: root@pts/2
19507 0 MAIN pts/2 Ss 0:00 -bash
20434 0 MAIN pts/2 S+ 0:00 mc
20436 0 MAIN pts/3 Ss 0:00 bash -rcfile .bashrc
21026 49176 srv007 ? Ss 0:00 /sbin/syslogd
21045 49176 srv007 ? Ss 0:00 proftpd: (accepting connections)
21051 49176 srv007 ? Ss 0:00 /usr/sbin/cron
21061 49176 srv007 ? Ss 0:00 /usr/sbin/apache
21083 49176 srv007 ? S 0:00 /usr/sbin/apache
21084 49176 srv007 ? S 0:00 /usr/sbin/apache
21846 49170 srv002 ? S 0:00 /usr/sbin/exim4 -bd -q30m
21847 1 ALL_PROC pts/3 S+ 0:00 vps ax
21848 1 ALL_PROC pts/3 R+ 0:00 ps ax
- Installing Linux-VServer
- Howtos Linux-Vserver Debian Sarge
- Problematic Programs - Linux-VServer
- Vserver DRBD - Linux-VServer
- The /etc/vservers directory
- "Системный администратор" (октябрь 2006)