Ключевые слова:vps, virtual, vserver, linux, debian, (найти похожие документы)
From: Roman Sozinov <http://sozinov.blogspot.com>
Date: Mon, 3 Jan 2008 14:31:37 +0000 (UTC)
Subject: Знакомство с Linux-VServer
Оригинал: http://sozinov.blogspot.com/2007/06/linux-vserver.html
Статья "Зонная Защита 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
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 не наблюдалось - всё работает как
обычно - как часы.
Для автозапуска виртуального сервера при перезагрузке необходимо
выполнить следующее:
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/rlimits
3. Установить значения максимума для резидентной памяти (rss) и
максимума для всего объема виртуальной памяти (as). Хранимые значения
указывают на число страниц памяти - например, чтобы установить предел
в 200Мб при размере страницы 4Кб, нужно указать значение 50000.
echo 50000 > /etc/vserver//rlimits/rss # 200Mb
echo 100000 > /etc/vserver//rlimits/as # 400Mb
4. Чтобы изменения вступили в силу, необходимо перезапустить
виртуальный хост.
В комплекте пакета 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
Ссылки:
1. Installing Linux-VServer
2. Howtos Linux-Vserver Debian Sarge
3. Problematic Programs - Linux-VServer
4. Vserver DRBD - Linux-VServer
5. The /etc/vservers directory
6. "Системный администратор" (октябрь 2006)