Linux-VServer: настраиваем виртуальные серверы::Журнал СА 10.2006
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Наука и технологии
Подписка
Где купить
Авторам
Рекламодателям
Архив номеров
Контакты
   

  Опросы
  Статьи

Электронный документооборот  

5 способов повысить безопасность электронной подписи

Область применения технологий электронной подписи с каждым годом расширяется. Все больше задач

 Читать далее...

Рынок труда  

Системные администраторы по-прежнему востребованы и незаменимы

Системные администраторы, практически, есть везде. Порой их не видно и не слышно,

 Читать далее...

Учебные центры  

Карьерные мечты нужно воплощать! А мы поможем

Школа Bell Integrator открывает свои двери для всех, кто хочет освоить перспективную

 Читать далее...

Гость номера  

Дмитрий Галов: «Нельзя сказать, что люди становятся доверчивее, скорее эволюционирует ландшафт киберугроз»

Использование мобильных устройств растет. А вместе с ними быстро растет количество мобильных

 Читать далее...

Прошу слова  

Твердая рука в бархатной перчатке: принципы soft skills

Лауреат Нобелевской премии, специалист по рынку труда, профессор Лондонской школы экономики Кристофер

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 9887
Комментарии: 0
Потоковая обработка данных

 Читать далее...

19.03.2018г.
Просмотров: 8101
Комментарии: 0
Релевантный поиск с использованием Elasticsearch и Solr

 Читать далее...

19.03.2018г.
Просмотров: 8200
Комментарии: 0
Конкурентное программирование на SCALA

 Читать далее...

19.03.2018г.
Просмотров: 5195
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 5873
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

Друзья сайта  

 Linux-VServer: настраиваем виртуальные серверы

Архив номеров / 2006 / Выпуск №10 (47) / Linux-VServer: настраиваем виртуальные серверы

Рубрика: Администрирование /  Продукты и решения

Дмитрий Столяров

Linux-VServer: настраиваем виртуальные серверы

Если становится сложным справляться с администрированием множества служб на одном сервере или вы не хотите давать привилегии суперпользователей другим администраторам, попробуйте распределить службы по виртуальным серверам.

В наше время неудержимого прогресса информационных технологий и развития глобальных сетей многим системным администраторам приходится сталкиваться с задачами, связанными с созданием ресурсов для широкого пользования. С увеличением объема таких ресурсов, находящихся в руках одного администратора, растет сложность администрирования и, как правило, страдает безопасность. Встают вопросы частичного делегирования административных полномочий. Техники VPS (Virtual Private Server) и VDS (Virtual Dedicated Server) позволяют решать такие задачи – задачи «эффективного разделения целого на меньшее». В отличие от других небезызвестных технологий, таких как VMWare и Xen, VPS предоставляет минимальную виртуализацию. Подробнее различные виды виртуализации описаны здесь: http://en.wikipedia.org/wiki/Virtualization.

В этой статье рассматривается технология Linux-VServer (http://linux-vserver.org). Описываются основные возможности, а также вы найдете инструкции по установке программного обеспечения, и настройке виртуальных серверов.

Основные возможности

Технология Linux-VServer позволяет создавать несколько виртуальных серверов (VPS), работающих независимо под управлением одного ядра операционной системы.

Каждый виртуальный сервер связан с одним контекстом, в котором выполняются его процессы. Контекст –это окружение, объединяющее группу процессов в системе, и отделяющее их от процессов, не входящих в этот контекст. Имена пользователей и групп, а также их идентификаторы принадлежат контексту. Процессы главного (корневого) сервера входят в контекст с нулевым номером и обладают большими возможностями, они имеют доступ к процессам и данным всех виртуальных серверов. В файловой системе главного сервера корни файловых систем виртуальных серверов расположены в некоторой директории.

VPS внутри выглядит как полноценная Linux-система. Вы можете предоставить права root на него и совершенно не бояться, что как-то могут быть повреждены другие виртуальные серверы или главный сервер. Все сервисы, такие как электронная почта, базы данных, Web, SSH, могут быть запущены без модификаций (или с некоторыми минимальными модификациями) на виртуальном сервере (список программ, с которыми возникают проблемы, вы можете можете просмотреть здесь: http://wiki.linux-vserver.org/ProblematicPrograms). Каждый VPS может обладать как одним IP-адресом, так и несколькими.

Для виртуального сервера может быть настроено множество параметров и ограничений. Вот наиболее часто используемые из них:

  • Место, занимаемое на диске и количество индексных дескрипторов (файлов).
  • Объем физической и виртуальной памяти.
  • Доля использования мощности процессора и список процессоров, на которых может выполняться VPS.
  • Максимальное количество процессов, принадлежащих контексту.

Для каждого VPS могут отслеживаться такие показатели, как:

  • Использованное процессорное время.
  • Количество совершенных системных вызовов fork (с его помощью создаются новые процессы).
  • Количество полученных и переданных сетевых пакетов.

Программное обеспечение

Также потребуется образ, который будет использоваться на VPS. Вот некоторый список архивов, содержащих готовые образы:

Отличается такой образ от полноценной Linux-системы обычно измененными скриптами инициализации, а в особенности – скриптами, направленными на проверку целостности корневой файловой системы и т. п.

Разумеется, никто не отменяет возможности самостоятельного создания образа на основе используемого вами дистрибутива.

Установка поддержки Linux-VServer в ядре

Скачаем ядро, разархивируем его и добавим патч:

# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.17.13.tar.bz2

# wget http://ftp.linux-vserver.org/pub/kernel/vs2.0/patch-2.6.17.13-vs2.0.2.1.diff.bz2

# tar -xjf linux-2.6.17.13.tar.bz2

# bunzip2 patch-2.6.17.13-vs2.0.2.1.diff.bz2

# cd linux-2.6.17.13

# patch -p1 < ../patch-2.6.17.13-vs2.0.2.1.diff

# make menuconfig

После того, как вы примените патч к ядру, в меню конфигурации появится новая секция «Linux-VServer», ей мы и уделим внимание.

Опции, отвечающие за совместимость со старым управляющим программным обеспечением, и не представляющие в нашем случае никакого интереса. Их надо отключить.

Linux-VServer -> Show a Legacy Version Number (VSERVER_LEGACY_VERSION=n)

Linux-VServer -> Enable Legacy Kernel API (VSERVER_LEGACY=n)

Следующая опция отвечает за устаревшую поддержку сети в виртуальных серверах, эта поддержка, как написано в документации, нужна:

Linux-VServer -> Disable Legacy Networking Kernel API (CONFIG_VSERVER_NGNET=n)

Опция, отвечающая за то, чтобы виртуальные серверы видели только свои процессы (в отличие от главного сервера, который может просматривать процессы всех VPS (с помощью специальных утилит):

Linux-VServer -> Enable Proc Security (VSERVER_PROC_SECURE=y)

Опция, отвечающая за возможность жесткого управления процессами. Если VPS превысил свой лимит процессорной мощности и для него установлено жесткое управление, выполнение процессов контекста будет заморожено на некоторый промежуток времени (подробнее смотреть «Ограничение ресурсов»):

Linux-VServer -> Enable Hard CPU Limits (VSERVER_HARDCPU=y)

Следующая опция отвечает за ограничение времени простоя контекста, она позволяет добиться большей интерактивности (меньшего времени отклика), но и сильно увеличивает перегрузку, связанную с планированием процессов (отправкой их на выполнение). Оставлю выбор на ваше усмотрение:

Linux-VServer -> Limit The IDLE task (VSERVER_HARDCPU_IDLE)

Опция, отвечающая за разделение битов в идентификаторах пользователя и группы на биты, характеризующие номер контекста, и биты являющиеся идентификатором пользователя внутри VPS. Изменяя эти числа, можно достичь разного максимального числа возможных групп и пользователей в системе. Используется это при сохранении принадлежности файла к конкретному VPS в файловой системе. Рекомендую оставить значение по умолчанию:

Linux-VServer -> Persistent Inode Context Tagging -> UID24/GID24 (INOXID_UGID24=y)

Опция отвечает за поддержку встроенного в ядро NFS демона:

Linux-VServer -> Tag NFSD User Auth and Files (XID_TAG_NFSD=n)

После настройки этих опций скомпилируем и установим ядро, поправим соответствующим образом загрузчик, а потом не забудем перезагрузиться:

# make bzImage modules modules_install install

Устанавливаем программное обеспечение для управления VPS

Для работы утилит нам понадобится программа vconfig (http://www.candelatech.com/~greear/vlan.html).

Скачаем и разархивируем утилиты:

# wget http://ftp.linux-vserver.org/pub/utils/util-vserver/util-vserver-0.30.210.tar.bz2

# tar -xjf util-vserver-0.30.210.tar.bz2

# cd util-vserver-0.30.210

Конфигурацию производим следующим образом:

# ./configure --prefix=/usr/local/vserver –with-vrootdir=/var/vservers

Опция «vrootdir» указывает папку, в которой будут располагаться корни виртуальных фаловых систем.

Компилируем и устанавливаем:

# make

# make install

Дополним переменные окружения новыми путями (это лучше прописать, например, в bashrc):

# PATH=$PATH:/usr/local/vserver/sbin

# MANPATH=$MANPATH:/usr/local/vserver/man

Настроим файловую систему, в которой будут располагаться виртуальные серверы (в ней будет находиться vrootdir, в нашем случае – /var/vservers).

При монтировании нам нужно обязательно указать опцию «tagxid»: она включает установку принадлежности файлов конкретному VPS (см. «Ядро: Linux-VServer -> Persistent Inode Context Tagging»).

Также, если вы используете reiserfs, вам понадобится опция «attrs», включающая поддержку атрибутов файла (chattr, lsattr) (проверьте, включена ли в ядре опция REISERFS_FS_XATTR, при использовании reiserfs).

Монтирование производится следующим образом:

# mount /dev/sda2 /var/ -o tagxid,attrs

Или, в случае fstab, это будет строчка вида:

/dev/sda2  /var   reiserfs        tagxid,attrs     1 1

В этом примере монтирование производится в директорию /var, это не обязательно.

После установки поддержки в ядре, установки утилит, настройки файловой системы произведем перезагрузку.

Создаем директорию, в которой будут храниться наши VPS и устанавливаем для нее флаг «Chroot Barrier» («барьер смененного корня»). Отвечает этот флаг за то, что никакой процесс из VPS (контекста) не сможет выбраться за этот барьер.

# mkdir /var/vservers

# /usr/local/vserver/sbin/setattr --barrier /var/vservers/

Для продолжения понадобится выполнить команду, делающую видимыми для самого сервера некоторые части /proc (см. «Ядро: Linux-VServer -> Enable Proc Security»). Полезно добавить эту команду к скриптам инициализации системы.

# /usr/local/vserver/etc/init.d/vprocunhide start

Для того чтобы перезагрузка и выключение виртуальных серверов обрабатывались корректно, потребуется сделать следующее:

# echo 'kernel.vshelper =/usr/local/vserver/lib/util-vserver/vshelper' >> /etc/sysctl.conf

# sysctl -p

Следующая команда должна вывести информацию о версии Linux-VServer API в ядре и версии утилит. Если она делает это, то установка прошла успешно.

# vserver-info

Создание VPS

Для начала нужен образ VPS. Мы выберем для себя образ на основе Gentoo. Скачаем и распакуем его:

# wget http://distfiles.gentoo.org/experimental/x86/vserver/stage3-i686-20060317.tar.bz2

# mkdir /usr/src/stage3-vserver

# tar -xjf stage3-i686-20060317.tar.bz2 -C /usr/src/stage3-vserver

# mkdir /usr/src/stage3-vserver/usr/portage

Если вы используете не Gentoo в качестве дистрибутива для главного сервера, вам понадобится скачать и установить дерево портежей (это дерево можно можно монтировать к нескольким VPS для совместного использования):

# wget http://distfiles.gentoo.org/snapshots/portage-latest.tar.bz2

# tar -xjf portage-latest.tar.bz2 -C /usr

Создадим базовую конфигурацию для нашего нового VPS:

# vserver testvps build -m skeleton --context 5 --initstyle plain

Рассмотрим параметры команды:

  • testvps – имя виртуального сервера.
  • -m skeleton – метод, означающий, что надо создать только конфигурационные файлы.
  • --context 5 – идентификатор контекста.
  • --initstyle plain – стиль загрузки (http://oldwiki.linux-vserver.org/InitStyles).

После выполнения команды для нового сервера создана конфигурация в /usr/local/vserver/etc/vservers/testvps, зайдем в эту директорию.

Скопируем файловую систему нашего будущего VPS:

# cp /usr/src/stage3-vserver/* /var/vservers/testvps/ -pPR

Дополним fstab следующим образом:

# cat >> /usr/local/vserver/etc/vservers/testvps/fstab

/usr/portage     /usr/portage none bind,ro 0 0

/usr/portage/distfiles  /usr/portage/distfiles none bind,rw     0 0

Первая строчка монтирует «дерево портежей» в режиме «только чтение», вторая – директорию, содержащую архивы исходных файлов, используемые пакетным менеджером emerge.

Запустим наш новый виртуальный сервер:

# vserver testvps start

Посмотрим информацию о запущенных серверах:

# vserver-stat

CTX  PROC   VSZ    RSS      userTIME  sysTIME   UPTIME     NAME

0    106    1.6G   744.4M   36m41s10  6m39s70   17h45m58   root server

5    1      1.4M   492K     0m00s21   0m00s13   0m00s75    testvps

Обратите внимание, что главный сервер представляется как VPS с номером 0 и именем «root server».

Для входа в консоль VPS можно использовать следующую команду:

# vserver testvps enter

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

Прежде всего перейдем в каталог с конфигурацией интерфейсов виртуального сервера и создадим директорию для первого интерфейса:

# cd /usr/local/vserver/etc/vservers/testvps/interfaces

# mkdir 0

# cd 0/

Установим имя устройства, к которому будет присоединен IP-адрес нашего VPS:

# echo 'eth0' > dev

Укажем псевдоним устройства, создаваемого при инициализации VPS:

# echo 'testvps' > name

Настроим IP-адрес и маску сети:

# echo '192.168.0.2' > ip

# echo '24' > prefix

Перезагрузим VPS:

# vserver testvps restart

Для того чтобы посмотреть получившийся результат, воспользуемся командой ip (входит в iproute2: http://linux-net.osdl.org/index.php/Iproute2).

# ip addr | grep 192.168.0.1

На экране мы увидим:

inet 192.168.0.2/24 brd 192.168.0.255 scope global eth0:testvps

Обратите внимание, что полное имя устройства вида <имя>:<псевдоним> не может быть в длину больше 15 символов.

В VPS можно увидеть результат:

# vserver testvps enter

# ifconfig

Выход из консоли VPS осуществляется стандартно: комбинацией клавиш <Ctrl+D> или командой logout.

Если по аналогии создать второй виртуальный сервер и присвоить ему IP-адрес из той же сети (например, 192.168.0.3) серверы смогут осуществлять коммуникации друг с другом.

Архитектурные рекомендации

Наиболее востребованной технология VPS оказалась для создания хостинговых решений. Большую актуальность она имеет и в образовательной среде, так как предоставляет возможность без последствий давать привилегии суперпользователя (root). А как без них обучить администрированию?

Рассмотрим четыре способа организации доступа к виртуальным серверам. Некоторые из них могут быть использованы для организации публичного (для неограниченной аудитории) доступа, другие – для групп пользователей конечного размера. Выбирая наиболее эффективные варианты доступа в конкретной ситуации и правильно комбинируя их, можно добиться больших гибкости, удобства использования и надежности.

Публичный IP на каждый VPS

Это самый простой вариант для реализации и в то же время самый расточительный для адресного пространства IP. Заключается он в том, что на каждый VPS выделяется один (или более) публичный IP. Таким образом, любой сервис, запущенный на VPS и слушающий на каком-то порту, будет доступен из глобальной сети.

Приватный IP + Port Forwarding (DNAT)

Этот вариант очень удобен, когда вы хотите предоставить доступ к одному или нескольким сервисам, запущенным на VPS, например, для администрирования.

VPS-серверам выделяются IP-адреса из приватного диапазона некоторой виртуальной сети. Для нужных сервисов на VPS-серверы пробрасываются порты с публичных IP-адресов, привязанных к самому серверу. Таким образом, обращаясь на один и тот же IP-адрес, например, по портам 21 (FTP) и 80 (HTTP), мы можем в действительности обращаться к разным VPS.

Основным недостатком такой реализации является то, что она совершенно не пригодна для HTTP-хостинга. Скорее всего, вас не поймут, если вы предложите одним своим клиентам обращаться к своему сайту по порту 1080, а другим – по 8080, что простительно в случае с административным доступом.

Приватный IP + VPN

Так же, как и в предыдущем варианте, VPS назначаются приватные IP-адреса. В получившуюся приватную сеть организовывается VPN-доступ с использованием, например, PPTP или OpenVPN, или IPSec.

Этот вариант может быть использован не для публичного доступа, а для административного или для доступа некоторой небольшой группы людей. Многие VPN-реализации предоставляют шифрование: таким образом, работая через VPN с сервисами, запущенными на VPS, можно гарантировать некоторый, достаточно высокий, уровень сохранности данных. В образовательной среде этот вариант имеет большие преимущества, так как позволяет малыми затратами адресного пространства сделать многое.

Приватный IP + HTTP-прокси

На главном сервере или на одном из VPS с публичным IP-адресом мы запускаем реверсный HTTP-прокси-сервер, перенаправляющий, в зависимости от доменного имени, запросы внутрь виртуальной сети на нужные VPS. Таким образом, через 80 порт на одном публичном IP мы можем предоставлять HTTP-доступ к сайтам, расположенным на разных VPS. В качестве реверсного прокси-сервера прекрасно подходит продукт российского производства nginx (http://sysoev.ru).

Этот вариант, к большому сожалению (в силу внутреннего устройства протокола), пригоден только для HTTP.

Настройка ограничений дискового пространства

Для настройки перейдем в директорию с конфигурацией VPS и создадим там каталог:

# cd /usr/local/vserver/etc/vservers/testvps/

# mkdir dlimits

# mkdir dlimits/0

# cd dlimits/0

Укажем директорию, для которой мы устанавливаем ограничения:

# echo '/var/vservers/testvps' > directory

Ограничим количество индексных дескрипторов файлов:

# echo '100000' > inodes_total

Ограничим пятью гигабайтами место, доступное VPS:

# echo '5242880' > space_total

Установим процент от общего размера, резервируемый для пользователя root.

# echo '5' > reserved

После этого перезагрузим VPS, войдем в него и посмотрим, что получилось:

# df -h

/dev/hdv1  5,0G      0      4,8G      0%     /

Так как для файлов образа не установлен идентификатор контекста (XID), место на диске, занимаемое ими, не учитывается. Если вы хотите, чтобы и оно учитывалось, можно сделать следующее:

# vserver testvps stop

# chxid -c 5 -R /var/vservers/testvps

# vserver testvps start

Входим и проверяем:

# df -h

/dev/hdv1  5,0G      503M   4,3G      11%    /

Настройка ограничений ресурсов

Перейдем в директорию с конфигурацией виртуального сервера:

# cd /usr/local/vserver/etc/vservers/testvps/

# mkdir rlimits

# cd rlimits

Существуют следующие ресурсы: cpu, fsize, data, stack, core, rss, nproc, nofile, memlock, as, locks. Более подробно о типах ресурсов можно прочитать в man setrlimit.

В директории создаются файлы с именами <имя ресурса>.min, <имя ресурса>.soft, <имя ресурса>.hard, в которых и определяются конкретные ограничения для ресурсов.

В файле /usr/local/vserver/etc/vservers/testvps/flags вы можете установить флаги, рассмотрим некоторые часто используемые:

  • virt_uptime – показывать внутри VPS время работы виртуального сервера.
  • virt_load – показывать индикатор загрузки VPS, а не главного сервера.
  • sched_hard – указывает планировщику замораживать процесс, если он превысил лимит мощности процессора.
  • sched_prio – указывает планировщику понижать приоритет процесса, если он превысил лимит процессора.
  • fork_rss – запрещать системный вызов fork, если превышен rlimit rss.

В файле /usr/local/vserver/etc/vservers/schedule вы можете установить параметры планировщика. Например, для того чтобы VPS выделялось 7/32 (21.9%) каждого процесса, а в случае превышения он приостанавливался на (200/7)*32=928 так называемых «мгновений» (jiffies), нужно создать файл следующего содержания:

7

32

500

200

1000

string

928 jiffies – это порядка одной секунды, если частота таймера равна 1000 Гц и примерно десять секунд, если частота равна 100 Гц (частота таймера в конфигурации ядра: «Processor type and features -> Timer frequency»).

Управление планировщиком находится в стадии разработки и может измениться.

Более подробно об этих и многих других настройках вы можете прочитать в документации на официальном сайте: http://wiki.linux-vserver.org/VServerConfiguration.


Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-41
Fax: (499) 277-12-45
E-mail: sa@samag.ru