VServer

Материал из ALT Linux Wiki
48px-Mail-mark-junk red.svg.png
Эта статья конкретно протухла.
Статья уже не подходит под современные реалии, под современные версии Альта или сломана совсем. Возможно, её уже не доработать и не поместить в архив.


NB: статья относится к давно устаревшему дистрибутиву — в 2014 году см. OpenVZ, KVM или Xen; при интересе именно к vserver см. kernel-image-led-vs

VServer

Эту страничку давно следовало нарисовать...

Что такое vserver? Это комплект для лёгкой виртуализации -- патч для Linux и набор утилит, который позволяет выполнять различные т.н. контексты под одним ядром. Вследствие отсутствия эмуляции железа в каком-либо виде накладные расходы существенно ниже, чем в случае использования VMware, Xen, qemu или Bochs. Пробегала информация об оверхеде порядка считанных процентов для хостинговых задач на дуальном Xeon.

Существует две ветки -- 1.x для Linux 2.4 (включена в ALT Linux 2.4 Master -- ядро vs-smp) и 2.x для Linux 2.6 (доступна в Sisyphus и 3.0/contrib). Возможности второй существенно шире, особенно в части управления и лимитирования. Первая ближе к chroot или jail, но обеспечивает также "невидимость" чужих процессов.

Лично мне vserver нравится тем, что система получается более структурированной и менее привязанной к конкретной железке -- если "основная" система минимальна и не несёт сервисов (кроме крайне ограниченного удалённого доступа и, скажем, базового мониторинга), то собственно сервисы в vserver'ах можно спокойно останавливать по расписанию, архивировать целиком или как заблагорассудится, переносить на другие хосты или менять с вводимыми в эксплуатацию. Получается очень удобно для плавного обновления, миграции сервисов и других нервосберегающих и общеполезных вещей. Опять же у меня появилась привычка делать "серую" сеть по vserver'ам, и если заранее спланировать адресное пространство, то при необходимости наборы vserver'ов на разных хостах должно быть можно объединить при помощи VPN или простого IPIP.

А вот мнение ldv@

On Thu, Aug 03, 2006 at 01:43:21PM +0300, Slava Dubrovskiy wrote:
>> Dmitry V. Levin пишет:
>>>>>> 1. Вопрос по vserver'ам.
>>>> И не только по vserver'ам.  Кстати говоря, думаю что вы сделали не самый
>>>> лучший выбор, остановившись на linux-vserver.
>> А что взамен предлагаете?
openvz.
>> Мне казалось это наиболее объезженный вариант.
Вы же не мигрируете на linux-vserver, а начинаете с самого начала.
Поэтому надо выбирать с учётом перспективы.
Если год назад, когда openvz ещё был не open, я бы выбрал linux-vserver,
то сейчас я выбираю openvz.
-- ldv

ALM2.4

На базе Master 2.4 можно легко и удобно сгородить сколько надо vserver'ов; был доступен минимизированный образ опять же ALM2.4 и небольшой QUICKSTART. Цитирую:

# for ALT Linux 2.4 Master
apt-get install util-vserver kernel-image-vs-smp

# reboot and select -vs-smp- kernel
rebootin linux-smp

# configure
cd /var/lib/vserver
tar jxpf ~/tmp/dummy_vserver.tar.bz2
mv dummy_vserver name

mdir /etc/vservers
cd /etc/vservers
cat ~/tmp/dummy_vserver.conf > name.conf

# start
vserver name enter

Возможна также сборка при помощи vserverator; увы, не пользовался.

Грабли

речь о 1.x/2.4

Если прописать HOSTNAME/DOMAINNAME в /etc/vservers/$host.conf, то при абсолютно правильно настроенном резолвере резолвинг может не работать...

Если в vserver запустить vsftpd из-под xinetd с _реальным_ IP в interface, то оно каким-то макаром сядет как раз на него, а не на тот, который указан в IPROOT конфигурации сервера. Если предполагать, что это дело надо ещё NAT'ить, то iptables как раз и перекроет то, что при остановленном файрволе работает само... IPROOT в 1.x липовый?

2.6.x (3.0+)

Тут товарисчи грозились поделиться экспириенсом по части vs26-smp.x86_64, но проблема с жёстким диском и острая нехватка времени перед поездом вкупе с лёгшим ftp.linux.kiev.ua не позволила этому непосредственно произойти... может, или те, кто уже использует VServer 2.x, расскажут, или я дозрею.

<gvy> btw, 32-bit chroot под 64bit kernel бывает?
<lakostis> да, легко
<lakostis> просто подключаешь другой sources.list и все %)
<gvy> о как.  уже хорошо :)
<lakostis> базовые ссылки для ознакомления
<lakostis> http://linux-vserver.org/alpha+util-vserver
<lakostis> http://deb.riseup.net/vserver/usage/
<lakostis> http://linux-vserver.org/ProblematicPrograms

vs26/x86_64

Попробую по горячим следам описать развёртывание Sisyphus/x86_64 в качестве гостевой системы под таким же. Спасибо за хинты lakostis@, глядишь, долго бы ещё чесал в затылке.

apt-get install util-vserver-build
vserver - build --help
cp -a /etc/apt/vendors.list /etc/vservers/.distributions/altSisyphus/apt/
vim /etc/apt/sources.list
cat /etc/apt/sources.list > /etc/vservers/.distributions/altSisyphus/apt/sources.list
vserver web build -m apt-rpm --hostname=www --interface eth0:10.0.4.101/24 --context 4101 -- -d altSisyphus
vapt-get web -- install syslogd vixie-cron
vserver web start
vserver web enter

Пояснения:

  • vendors.list в пакете на сейчас отсутствует (и при установке не берётся и не линукется системный)
  • в sources.list -- ftp.altlinux.com Sisyphus i586, что при локальном зеркале и желании зарядить x86_64 не совсем то ;-)
  • <lakostis> + советую сразу при сборке --context <xid> указывать. [...] какое-нить число больше 128
  • сразу после build сделать start не получится -- при отсутствии запущенных процессов vserver считается неактивным
  • enter теперь вроде как не делает start при остановленном контексте

Настройка сети

vserver может иметь столько IP сколько вам необходимо. Для этого в директории /etc/vserver/<vserver-name>/interfaces/ вы должны создать субдиректории для каждого IP который вы хотите использовать:

/etc/vserver/<vserver-name>/interfaces/0
/etc/vserver/<vserver-name>/interfaces/1

В этих субдиректориях должны располагаться файлы с опциями которые вм нужны. См. /usr/share/doc/util-vserver-<ver>/configuration.html Обычно настройки создаются автоматически при создании vserver той командой которая приведена выше. Можно указывать совсем другой IP. Тогда при старте vserver'а создается алиас с этим IP который вы можете использовать для доступа к серверу.

Сетевые интерфейсы

Неочевидность (следующая после того, что 127.0.0.1 в vserver "нечестные"):

<gvy> btw, пронаблюдал интересную картину маслом -- xinetd в vs (vsftpd и rsyncd из-под него) вешался вааще на честный ip, если он остался указан в его конфигурации
<gvy> т.е. интерфейсы "невидимы", но досягаемы
<Pilot> в Linux можно биндиться на произвольные адреса
<Pilot> предполагается, что тот, кто это делает, знает, зачем он это делает
<gvy> я-то это дело пытался отнатить...

FAQ

Q. Почему я не могу получить доступ по ssh в vserver и попадаю в хост-систему? A. Скорее всего sshd слушает все адреса. Ограничьте его тем, на который вы обращаетесь.

Q. ssh ругается на Offending всякое, если пойти на повешенный (проброшенный) на левом порту sshd. Как бы убороть? A. См. ssh_config(5) насчёт HostKeyAlias -- вносите в /.ssh/config в нужном количестве записи вида

Host    shortname
        HostName host.dom
        #HostName ip.ad.dr.es
        Port myport
        HostKeyAlias hostport

и ходите (ssh, scp, rsync...) по shortname.

TODO

  • описать известные проблемы с crond, syslogd и sshd; в принципе, оно довольно быстро гуглится по архивам рассылок с добавлением vserver и/или кусков логов
  • ссылки на OpenVZ как более доработанную технологию в той же весовой категории

Ссылки