OpenVZ: различия между версиями
(Import from freesource.info) |
Нет описания правки |
||
Строка 1: | Строка 1: | ||
[[ | [[Категория:Documentation]] | ||
{{ | [[Категория:Admin]] | ||
{{викифицировать}} | |||
== Настройка OpenVZ на текущем Сизифе == | == Настройка OpenVZ на текущем Сизифе == | ||
[http://openvz.org OpenVZ] | [http://openvz.org OpenVZ] — технология «лёгкой» виртуализации, позволяющая на одной аппаратной системе держать несколько различных корней Linux с одним ядром (поддерживающим ovz и содержащимся, как правило, на небольшом корне с ограниченным доступом по ssh и без других сервисов). В отличие от «тяжёлых» вариантов вроде Xen, Qemu или VMware, накладные расходы обычно составляют единицы процентов. | ||
__TOC__ | __TOC__ | ||
Сначала конечно необходимо прочитать [http://download.openvz.org/doc/OpenVZ-Users-Guide.pdf документацию], для понимания что это такое и для чего можно использовать и как. | Сначала конечно необходимо прочитать [http://download.openvz.org/doc/OpenVZ-Users-Guide.pdf документацию], для понимания что это такое и для чего можно использовать и как. PDF содержит более сотни страниц, но десяток из них '''обязательно''' следует прочитать для экономии времени — в начале про терминологию, около с.88 про Action Scripts и bind mounts, и в конце — секцию Troubleshooting. Также доступен [http://www.opennet.ru/docs/RUS/virtuozzo/ перевод]. | ||
В настоящий момент в репозитарии есть практически все компоненты для полноценной работы. Но на данный момент openvz не поддерживает систему управления пакетами <tt>apt</tt>, поэтому мы не можем воспользоваться утилитой <tt>vzpkg</tt>. | В настоящий момент в репозитарии есть практически все компоненты для полноценной работы. Но на данный момент openvz не поддерживает систему управления пакетами <tt>apt</tt>, поэтому мы не можем воспользоваться утилитой <tt>vzpkg</tt>. | ||
=== Установка === | === Установка === | ||
Строка 16: | Строка 17: | ||
=== Планирование ресурсов === | === Планирование ресурсов === | ||
Если предполагается более-менее равномерное разделение HN между несколькими VE (или примерно можно означить ограничения как | Если предполагается более-менее равномерное разделение HN между несколькими VE (или примерно можно означить ограничения как «1/10», «1/4»), то рекомендуется использовать <tt>vzsplit</tt> для создания заготовок конфигурации (не самих серверов! — получается меташаблон такой). | ||
<pre>vzsplit -n 2 -f ltsp | <pre>vzsplit -n 2 -f ltsp | ||
vzsplit -n 10 -f misc10</pre> | vzsplit -n 10 -f misc10</pre> | ||
Заготовки окажутся в <tt>/etc/vz/conf/ve-ИМЯ.conf-sample</tt> и пригодны для использования в <tt>vzctl create $VEID --config ИМЯ</tt>. | Заготовки окажутся в <tt>/etc/vz/conf/ve-ИМЯ.conf-sample</tt> и пригодны для использования в <tt>vzctl create $VEID --config ИМЯ</tt>. Имейте в виду, что штатный vps.basic весьма ограничен, а light — скорее непригоден к использованию. | ||
Перепланировать можно и потом; если есть | Перепланировать можно и потом; если есть возможность — бывает полезно дать память с запасом и посмотреть через какое-то время реальное использование (накинуть резерв и уменьшить до полученной цифры). Также рекомендуется почитать про [http://wiki.openvz.org/UBC_systemwide_configuration UBC], а также man-страницы <tt>vzctl</tt>, <tt>vzmemcheck</tt>, <tt>vzcpucheck</tt>. | ||
=== Создание шаблона === | === Создание шаблона === | ||
(Адаптировано для spt-0.6.0-alt7) | (Адаптировано для spt-0.6.0-alt7) | ||
Необходимо создать шаблон, который будет использоваться для создания виртуального сервера. На [http://openvz.org/download/template/cache сайте] находится много шаблонов. Для ALT шаблоны см. в [http://download.openvz.org/contrib/template/precreated/ contrib], | Необходимо создать шаблон, который будет использоваться для создания виртуального сервера. На [http://openvz.org/download/template/cache сайте] находится много шаблонов. Для ALT шаблоны см. в [http://download.openvz.org/contrib/template/precreated/ contrib], [http://cryo.net.ru/~thresh/altlinux-2.4.tar.gz altlinux-2.4.tar.gz] и [http://paq.osdn.org.ua/~mike/tmp/openvz/altlinux-3.0.tar.gz altlinux-3.0.tar.gz]. Шаблон представляет собой запакованый в архив корневой раздел. Поэтому для создания шаблона можно использовать <tt>spt</tt> или <tt>hasher</tt>. Я воспользовался [http://freesource.info/wiki//ALTLinux/Sisyphus/Separator spt], так как он содержит уже готовый профиль для ovz. | ||
Устанавливаем spt: | Устанавливаем spt: | ||
<pre># apt-get install spt spt-profiles-ovz</pre> | <pre># apt-get install spt spt-profiles-ovz</pre> | ||
На этом этапе необходимо получить работоспособный hasher. И лучший | На этом этапе необходимо получить работоспособный hasher. И лучший способ — это воспользоваться инструкцией: /usr/share/doc/hasher-1.*/QUICKSTART | ||
Для правильной работы <tt>vzctl</tt> необходимо, чтобы в <tt>/dev</tt> находились следующие устройства: <tt>/dev/ptmx</tt>, | Для правильной работы <tt>vzctl</tt> необходимо, чтобы в <tt>/dev</tt> находились следующие устройства: <tt>/dev/ptmx</tt>, <tt>/dev/tty</tt> и был смонтирован <tt>/dev/pts/</tt>. Для их создания требуется наличие параметра <tt>allow_ttydev=YES</tt> в <tt>/etc/hasher-priv/*</tt> (см. hasher-priv.conf(8), [http://lists.altlinux.org/pipermail/devel/2006-July/034431.html http://lists.altlinux.org/pipermail/devel/2006-July/034431.html]) | ||
Затем необходимо создать профиль, по которому spt будет строить шаблон. Возможно использовать готовый профиль. Готовые профили, предназначенные для создания openvz-шаблонов, находятся в пакете spt-profiles-ovz. | Затем необходимо создать профиль, по которому spt будет строить шаблон. Возможно использовать готовый профиль. Готовые профили, предназначенные для создания openvz-шаблонов, находятся в пакете spt-profiles-ovz. | ||
Строка 41: | Строка 42: | ||
<pre>cp -r /etc/spt/profiles/ovz/proxy-server ~/ovz/profile</pre> | <pre>cp -r /etc/spt/profiles/ovz/proxy-server ~/ovz/profile</pre> | ||
Можно поменять имя создаваемого образа в <tt>~/ovz/profile/config</tt>. | Можно поменять имя создаваемого образа в <tt>~/ovz/profile/config</tt>. Заменим значение в OUT на altlinux-4.0.tar.gz . | ||
Список пакетов находится | Список пакетов находится в — <tt>~/ovz/profile/ovz/packages</tt> — например, можно добавить openssh-server, vim-console, bash-completion. В ovz-контейнер нет необходимости ставить пакет interactivesystem. | ||
Минимальный список пакетов: | Минимальный список пакетов: | ||
<pre>basesystem | <pre>basesystem | ||
Строка 76: | Строка 77: | ||
=== Создание виртуального сервера === | === Создание виртуального сервера === | ||
'''Внимание:''' ещё один момент, где лучше заранее почитать документацию, чем потом сожалеть: в PDF рекомендуется выдавать | '''Внимание:''' ещё один момент, где лучше заранее почитать документацию, чем потом сожалеть: в PDF рекомендуется выдавать VEID’ы сообразно IP (например, для xxx.xxx.7.123 — <tt>7123</tt> или для 10.0.1.254 — #1254##). Это более удобно с точки зрения администрирования как мнемонически, так и при необходимости переноса контейнеров между физическими хостами — если везде есть VEID 101, перенос будет сильно затруднён (на forum.openvz.org в соответствующей теме встретился вариант решения — свернуть одноразовый template cache из переносимого VE (например с помощью vzdump) и создать на новом месте из этого темплейта; штатный способ изменения VEID мне на сейчас неизвестен). При создании из такого темплейта можно указать использовать старый конфиг и все работает хорошо. | ||
Теперь мы можем создать сервер из шаблона. | Теперь мы можем создать сервер из шаблона. | ||
Строка 83: | Строка 84: | ||
VPS private area was created</pre> | VPS private area was created</pre> | ||
Имя, которое Вы дали вашему шаблону (то что следует | Имя, которое Вы дали вашему шаблону (то что следует за — ostemplate), имеет важное значение. При создании VE это имя заносится в конфигурационный файл в переменную OSTEMPLATE. По этой переменной vzctl определяет какие скрипты использовать (разным OS нужны разные скрипты). Если вы используете ALT, то оно обязательно должно начинаться с altlinux (определяет нюансы настройки). Дальше разбор имени идет по такому алгоритму: | ||
<pre>> > а по-какому критерию тогда vzctl ищет нужные scripts? | <pre>> > а по-какому критерию тогда vzctl ищет нужные scripts? | ||
Строка 97: | Строка 98: | ||
=== Именование виртуального сервера === | === Именование виртуального сервера === | ||
Начиная с версии 3.0.11, vzctl поддерживает именование виртуальных серверов. Это удобно, когда у вас их много, ибо помнить, что <tt>proxy</tt> это <tt>103</tt> | Начиная с версии 3.0.11, vzctl поддерживает именование виртуальных серверов. Это удобно, когда у вас их много, ибо помнить, что <tt>proxy</tt> это <tt>103</tt> — не очень удобно. | ||
<pre># vzctl set 101 --name vps101 --save | <pre># vzctl set 101 --name vps101 --save | ||
Saved parameters for VPS 101</pre> | Saved parameters for VPS 101</pre> | ||
Строка 104: | Строка 105: | ||
=== Конфигурация виртуального сервера === | === Конфигурация виртуального сервера === | ||
Конфигурация включает такие пункты: | Конфигурация включает такие пункты: | ||
==== 1. Установка параметров запуска ==== | ==== 1. Установка параметров запуска ==== | ||
<pre># vzctl set 101 --onboot yes --save | <pre># vzctl set 101 --onboot yes --save | ||
Строка 109: | Строка 111: | ||
==== 2. Установка параметров сети ==== | ==== 2. Установка параметров сети ==== | ||
===== Общие настройки ===== | ===== Общие настройки ===== | ||
Установка имени сервера: | Установка имени сервера: | ||
Строка 126: | Строка 129: | ||
В [[OpenVZ|OpenVZ]] в VE возможно настраивать 3 типа соединений: | В [[OpenVZ|OpenVZ]] в VE возможно настраивать 3 типа соединений: | ||
1. [http://wiki.openvz.org/Virtual_network_device venet] | 1. [http://wiki.openvz.org/Virtual_network_device venet] | ||
2. [http://wiki.openvz.org/Virtual_Ethernet_device veth] | 2. [http://wiki.openvz.org/Virtual_Ethernet_device veth] | ||
3. Просто | 3. Просто «пробросить» внутрь физический ethernet интерфейс. См. параметры netdev_add name/netdev_del name для vzctl. | ||
Различия между venet и veth описаны [http://wiki.openvz.org/Differences_between_venet_and_veth тут]. Кратко можно сказать, что чаще всего вам потребуется venet. Но в некоторых случаях, для запуска таких приложений внутри VE, которые требуют для своей работы: MAC address, Broadcasts inside VE, Traffic sniffing, (например dhcpd, samba) или вам нужен | Различия между venet и veth описаны [http://wiki.openvz.org/Differences_between_venet_and_veth тут]. Кратко можно сказать, что чаще всего вам потребуется venet. Но в некоторых случаях, для запуска таких приложений внутри VE, которые требуют для своей работы: MAC address, Broadcasts inside VE, Traffic sniffing, (например dhcpd, samba) или вам нужен IPv6 — необходимо создавать veth. Также veth можно использовать в некоторых [http://forum.openvz.org/index.php?t=msg&th=951&start=0& сложных случаях]. Во всех остальных случаях (например, сложный роутинг или несколько ethx устройств с разными маршрутами/коммутацией, или когда нужно именно физическое ethernet устройство внутри VE), необходимо использовать netdev. | ||
====== [http://wiki.openvz.org/Virtual_network_device venet] ====== | ====== [http://wiki.openvz.org/Virtual_network_device venet] ====== | ||
Строка 157: | Строка 160: | ||
* added virtual ethernet device support (--veth_add, --veth_del)</pre> | * added virtual ethernet device support (--veth_add, --veth_del)</pre> | ||
Настройка veth не осуществляется средствами vzctl, | Настройка veth не осуществляется средствами vzctl, так как подразумевается, что администратор VE должен настроить сеть средствами той ОС, которая внутри VE. | ||
1. Необходимо обеспечить загрузку модуля vzethdev: | 1. Необходимо обеспечить загрузку модуля vzethdev: | ||
Строка 167: | Строка 170: | ||
2. Добавим сам veth к VE: | 2. Добавим сам veth к VE: | ||
<pre># vzctl set 101 --netif_add eth0 --save</pre> | <pre># vzctl set 101 --netif_add eth0 --save</pre> | ||
, где | , где eth0 — имя veth-интерфейса на стороне VE. Необходимости прописывать мак-адреса вручную теперь нет. | ||
<div style="display: inline; color: red;">Внимание! MAC-адреса должны быть разными и не пересекаться с реальными | <div style="display: inline; color: red;">Внимание! MAC-адреса должны быть разными и не пересекаться с реальными интерфейсами — можно чуть изменить взятый со старой карты в ящике.</div> | ||
Добавлять IP командой vzctl set 101 --ipadd 10.10.186.1 --save не надо, | Добавлять IP командой vzctl set 101 --ipadd 10.10.186.1 --save не надо, так как тогда будет настраиваться venet. | ||
3. Настроим создание eth0 в VE: | 3. Настроим создание eth0 в VE: | ||
Для этого можно использовать средства настройки сети той OS что установлена в VE. Для ALT это etcnet. Для этого просто настроим стандартный интерфейс типа eth. Или можно настраивать из HN используя | Для этого можно использовать средства настройки сети той OS что установлена в VE. Для ALT это etcnet. Для этого просто настроим стандартный интерфейс типа eth. Или можно настраивать из HN используя «типичный скрипт» 101.start (в /etc/vz/conf/), добавив туда: | ||
<pre>/sbin/ifconfig eth0 0 | <pre>/sbin/ifconfig eth0 0 | ||
/sbin/ip addr add 10.10.186.1 dev eth0 | /sbin/ip addr add 10.10.186.1 dev eth0 | ||
/sbin/ip route add default dev eth0 | /sbin/ip route add default dev eth0 | ||
/sbin/ip route replace default via $HN_IP dev eth0</pre> | /sbin/ip route replace default via $HN_IP dev eth0</pre> | ||
<small>Последняя строчка нужна в случае если HN и VE находятся в разных сетях, без нее пакеты VE не будут ходить за пределы этих сетей. Если кто предложит вариант | <small>Последняя строчка нужна в случае если HN и VE находятся в разных сетях, без нее пакеты VE не будут ходить за пределы этих сетей. Если кто предложит вариант лучше — исправления приветствуются</small> | ||
Скрипт должен иметь права на выполнение. | Скрипт должен иметь права на выполнение. | ||
Строка 206: | Строка 209: | ||
Теоретически администратор VE может сам менять IP, но я не проверял :-) | Теоретически администратор VE может сам менять IP, но я не проверял :-) | ||
5. Теперь, после запуска VE нужно настроить veth на стороне ##DEFINITION HN => Hardware Node##: | 5. Теперь, после запуска VE нужно настроить veth на стороне ##DEFINITION HN => Hardware Node##: | ||
Для этого в | Для этого в [[OpenVZ|OpenVZ]] после старта VE автоматически вызывается утилита vznetcfg, которая инициализирует veth на стороне HN путем вызова команды ip link set veth101.0 up. Т.о. вы имеете поднятый интерфейс, но без IP и без настроенного маршрута. Поэтому дальнейшую настройку приходится делать руками или прописать в rc.local. (В следующей версии vzctl вроде уже добавили поддержку) | ||
Настроим proxy_arp и forwarding для eth0 и veth на HN: | Настроим proxy_arp и forwarding для eth0 и veth на HN: | ||
Для eth0 можно использовать штатные средства Sisyphus:/admin/etcnet, установив переменную | Для eth0 можно использовать штатные средства Sisyphus:/admin/etcnet, установив переменную <tt>net.ipv4.ip_forward = 1</tt> в файле <tt>/etc/net/sysctl.conf</tt> и <tt>proxy_arp=1</tt> в <tt>/etc/net/ifaces/eth0/sysctl.conf</tt>. | ||
Для veth нужно выполнить: | Для veth нужно выполнить: | ||
<pre># echo 1 > /proc/sys/net/ipv4/conf/veth101.0/forwarding | <pre># echo 1 > /proc/sys/net/ipv4/conf/veth101.0/forwarding | ||
Строка 216: | Строка 219: | ||
<pre>ip addr add 10.10.186.1 dev veth101.0</pre> | <pre>ip addr add 10.10.186.1 dev veth101.0</pre> | ||
<div style="display: inline; color: red;">Примечание :</div> | <div style="display: inline; color: red;">Примечание :</div> | ||
На самом деле, правильно: | На самом деле, правильно: | ||
<pre>ip addr add 0 dev veth101.0</pre> | <pre>ip addr add 0 dev veth101.0</pre> | ||
Строка 224: | Строка 227: | ||
<pre># ip route add 10.10.186.1 dev veth101.0</pre> | <pre># ip route add 10.10.186.1 dev veth101.0</pre> | ||
Нюансы: | Нюансы: | ||
* На данный момент venet настраивается при любых условиях, | * На данный момент venet настраивается при любых условиях, то есть даже когда используется veth. [http://forum.openvz.org/index.php?t=msg&th=967&start=0& Вот ответ разработчиков]. | ||
* [https://bugzilla.altlinux.org/show_bug.cgi?id=9877 https://bugzilla.altlinux.org/show_bug.cgi?id=9877] | * [https://bugzilla.altlinux.org/show_bug.cgi?id=9877 https://bugzilla.altlinux.org/show_bug.cgi?id=9877] | ||
* Похоже, что еще можно не мучаться с rc.local и патчами и все настроить через etcnet и hotplug. Более подробно я напишу по окончании разборок с этим хозяйством. <div style="display: inline; color: red;">напишите кто-нибудь, как автоматически в HN ловить появление veth и настраивать ему ip-параметры</div> [http://freesource.info/wiki//AfanasovDmitry /AfanasovDmitry]: | * Похоже, что еще можно не мучаться с rc.local и патчами и все настроить через etcnet и hotplug. Более подробно я напишу по окончании разборок с этим хозяйством. <div style="display: inline; color: red;">напишите кто-нибудь, как автоматически в HN ловить появление veth и настраивать ему ip-параметры</div> [http://freesource.info/wiki//AfanasovDmitry /AfanasovDmitry]: сделал «маленькую хитрость»/ | ||
* Если в VE iptables не работает с -t nat, скорее всего модуль iptable_nat был загружен на HN уже '''после''' старта контейнера. | * Если в VE iptables не работает с -t nat, скорее всего модуль iptable_nat был загружен на HN уже '''после''' старта контейнера. | ||
* Мне захотелось иметь 2 VETH интерфейса в VE, соединённых с двумя сетевыми карточками HE, | * Мне захотелось иметь 2 VETH интерфейса в VE, соединённых с двумя сетевыми карточками HE, одна — ведущая в WAN, другая — в LAN. Результаты можно почитать здесь: [http://vireso.blogspot.com/2008/02/2-veth-with-2-brindges-on-openvz-at.html http://vireso.blogspot.com/2008/02/2-veth-with-2-brindges-on-openvz-at.html] (извиняюсь, на английском). | ||
==== 3. Установка пользовательских параметров ==== | ==== 3. Установка пользовательских параметров ==== | ||
Строка 235: | Строка 238: | ||
<pre># vzctl set 101 --userpasswd root:test | <pre># vzctl set 101 --userpasswd root:test | ||
Saved parameters for VPS 101</pre> | Saved parameters for VPS 101</pre> | ||
В этом примере мы установили пароль для root в VPS 101 в | В этом примере мы установили пароль для root в VPS 101 в «test», и вы можете залогиниться | ||
==== 4. Установка квот ==== | ==== 4. Установка квот ==== | ||
См. документацию. | См. документацию. | ||
Строка 262: | Строка 266: | ||
enter into VE 101 failed | enter into VE 101 failed | ||
Unable to open pty: No such file or directory</pre> | Unable to open pty: No such file or directory</pre> | ||
— то [http://lists.altlinux.org/pipermail/sysadmins/2006-November/003072.html дело] в <tt>/dev/tty</tt>, <tt>/dev/ptmx</tt> и (не)смонтированном <tt>/dev/pts/</tt>. Надо добавить в <tt>/etc/fstab</tt> этого VE нечто вроде | |||
<pre>devpts /dev/pts devpts gid=5,mode=620 0 0</pre> | <pre>devpts /dev/pts devpts gid=5,mode=620 0 0</pre> | ||
NB: если эта проблема вылезла вследствие выполнения команд start и enter | NB: если эта проблема вылезла вследствие выполнения команд start и enter цепочкой — вероятно, /dev/pts просто не успевает смонтироваться, попробуйте добавить задержку: | ||
<pre>VE=NNN; vzctl start $VE; sleep 1; vzctl enter $VE</pre> | <pre>VE=NNN; vzctl start $VE; sleep 1; vzctl enter $VE</pre> | ||
Строка 273: | Строка 277: | ||
=== Альтлинукс как VPS в других дистрибутивах === | === Альтлинукс как VPS в других дистрибутивах === | ||
(Я пробовал не примере CentOS4) | (Я пробовал не примере CentOS4) | ||
Если у вас есть шаблон altlinux.tar.gz, сделанный как описано выше, в главе | Если у вас есть шаблон altlinux.tar.gz, сделанный как описано выше, в главе «Создание Шаблона», | ||
то его можно скопировать в директорию /vz/template/cache/. | то его можно скопировать в директорию /vz/template/cache/. | ||
Если версия пакета vzctl в HN меньше чем 3.0.19, то для того чтобы работала сеть, | Если версия пакета vzctl в HN меньше чем 3.0.19, то для того чтобы работала сеть, | ||
Строка 279: | Строка 283: | ||
/etc/vz/dists/altlinux.conf, /etc/vz/dists/scripts/etcnet-add_ip.sh и /etc/vz/dists/scripts/etcnet-del_ip.sh | /etc/vz/dists/altlinux.conf, /etc/vz/dists/scripts/etcnet-add_ip.sh и /etc/vz/dists/scripts/etcnet-del_ip.sh | ||
или обновить пакет vzctl до версии >= 3.0.19. | или обновить пакет vzctl до версии >= 3.0.19. | ||
Далее всё согласно этому документу, | Далее всё согласно этому документу, — создание, именование, настройка… | ||
(также можно взять у ldv@ [http://git.altlinux.org/people/ldv/packages/?p=vzctl.git;a=tree;hb=HEAD в git]: бранч master) | (также можно взять у ldv@ [http://git.altlinux.org/people/ldv/packages/?p=vzctl.git;a=tree;hb=HEAD в git]: бранч master) | ||
Строка 287: | Строка 291: | ||
=== mount --bind из HN в VE при старте последнего === | === mount --bind из HN в VE при старте последнего === | ||
[http://forum.openvz.org/index.php?t=msg&th=159&#msg_720 здеся] (вообще про action scripts есть в документации, тут | [http://forum.openvz.org/index.php?t=msg&th=159&#msg_720 здеся] (вообще про action scripts есть в документации, тут же — примеры удобные) | ||
=== openntpd === | === openntpd === | ||
Строка 296: | Строка 300: | ||
=== nut === | === nut === | ||
Заводится с пол-пинка, единственный | Заводится с пол-пинка, единственный момент — дать доступ к устройству: | ||
<pre>vzctl set 101 --devnodes ttyS0:rw --save</pre> | <pre>vzctl set 101 --devnodes ttyS0:rw --save</pre> | ||
Строка 353: | Строка 357: | ||
=== Замечания по использованию === | === Замечания по использованию === | ||
* vzquota [http://bugzilla.openvz.org/show_bug.cgi?id=125 не дружит с xfs] (поскольку xfs использует свою реализацию квот, отличных от linuxquota). Поэтому для /vz лучше использовать ext3. | * vzquota [http://bugzilla.openvz.org/show_bug.cgi?id=125 не дружит с xfs] (поскольку xfs использует свою реализацию квот, отличных от linuxquota). Поэтому для /vz лучше использовать ext3. | ||
* user_beancounters по-умолчанию сильно закручены по ресурсам, поэтому после развертывания VPS, необходимо внимательно изучить содержимое /proc/user_beancounters. Значения, на которые надо | * user_beancounters по-умолчанию сильно закручены по ресурсам, поэтому после развертывания VPS, необходимо внимательно изучить содержимое /proc/user_beancounters. Значения, на которые надо смотреть — kmemsize, numproc, numfile, numtcpsock, numothersock. В случае нагруженной tcp подсистемы — tcpsndbuf и tcprcvbuf. | ||
* В ovz ядрах [http://bugzilla.openvz.org/show_bug.cgi?id=469 глючит nfs], поэтому внутрь VPS ресурсы лучше экспортировать через mount --bind. Несекурно, зато работает. | * В ovz ядрах [http://bugzilla.openvz.org/show_bug.cgi?id=469 глючит nfs], поэтому внутрь VPS ресурсы лучше экспортировать через mount --bind. Несекурно, зато работает. | ||
* Чтобы собрать кэш темплейт для M24 надо пересобрать сизифный console-data. | * Чтобы собрать кэш темплейт для M24 надо пересобрать сизифный console-data. | ||
<tt>А вот и собранный template для M24 с исправлением: [http://cryo.net.ru/~thresh/altlinux-2.4.tar.gz http://cryo.net.ru/~thresh/altlinux-2.4.tar.gz] размер: 24660183, md5sum: e575da3dc4841367ba0d74e7063703bf </tt> | <tt>А вот и собранный template для M24 с исправлением: [http://cryo.net.ru/~thresh/altlinux-2.4.tar.gz http://cryo.net.ru/~thresh/altlinux-2.4.tar.gz] размер: 24660183, md5sum: e575da3dc4841367ba0d74e7063703bf </tt> | ||
*Чтобы в контейнере с Compact 3.0.4 заработала сеть, нужен etcnet-0.8.3-alt2, с etcnet-0.7.16-alt1 [http://lists.altlinux.org/pipermail/sysadmins/2006-September/002371.html не работает] (<tt>ip route list</tt> пустой). | * Чтобы в контейнере с Compact 3.0.4 заработала сеть, нужен etcnet-0.8.3-alt2, с etcnet-0.7.16-alt1 [http://lists.altlinux.org/pipermail/sysadmins/2006-September/002371.html не работает] (<tt>ip route list</tt> пустой). | ||
<tt>А вот и собранный template для M30 с исправлением: [http://paq.osdn.org.ua/~mike/tmp/openvz/altlinux-3.0.tar.gz http://paq.osdn.org.ua/~mike/tmp/openvz/altlinux-3.0.tar.gz] размер: 20741540, md5sum: cd74ef7dc8f117626b1701061cb1973f </tt> | <tt>А вот и собранный template для M30 с исправлением: [http://paq.osdn.org.ua/~mike/tmp/openvz/altlinux-3.0.tar.gz http://paq.osdn.org.ua/~mike/tmp/openvz/altlinux-3.0.tar.gz] размер: 20741540, md5sum: cd74ef7dc8f117626b1701061cb1973f </tt> | ||
* Проверьте. есть ли все необходимые устройства. например, без /dev/full rpm --sign вылетает по SIGPIPE. | * Проверьте. есть ли все необходимые устройства. например, без /dev/full rpm --sign вылетает по SIGPIPE. | ||
Строка 368: | Строка 372: | ||
Чтобы показывался размер виртуального раздела в контейнере, надо выполнить следующие команды внутри контейнера: | Чтобы показывался размер виртуального раздела в контейнере, надо выполнить следующие команды внутри контейнера: | ||
<pre>rm -f /etc/mtab && ln -s /proc/mounts /etc/mtab</pre> | <pre>rm -f /etc/mtab && ln -s /proc/mounts /etc/mtab</pre> | ||
(уже obsoleted с spt >= 0.3.1-alt4 ) | (уже obsoleted с spt >= 0.3.1-alt4) | ||
Чтобы следить за | Чтобы следить за «нарушителями границ» (предназначено для VE, не HN): | ||
<pre>watch grep -v ' 0$' /proc/user_beancounters</pre> | <pre>watch grep -v ' 0$' /proc/user_beancounters</pre> | ||
NB: в /proc/sys/net/ipv4/conf/venet0/proxy_arp после ребута или service network restart оказался ноль => nmap -P0 говорил, что порты закрыты, в то время как telnet :22, :111, : | NB: в /proc/sys/net/ipv4/conf/venet0/proxy_arp после ребута или service network restart оказался ноль => nmap -P0 говорил, что порты закрыты, в то время как telnet :22, :111, :2049 — соединялся. Занеся 1, получаем нормальную картинку по nmap, но точно так же не монтируется (server is down). | ||
Правка дефолтного i18n (если не сделали себе в template cache сразу как требуется): | Правка дефолтного i18n (если не сделали себе в template cache сразу как требуется): | ||
Строка 391: | Строка 395: | ||
<div style="display: inline; color: red;">хе, интересно, а как в <tt>brctl</tt> метка AUTO тут обрабатывается?</div> | <div style="display: inline; color: red;">хе, интересно, а как в <tt>brctl</tt> метка AUTO тут обрабатывается?</div> | ||
Если мост не нужен, тогда как обычно создаем файлы <tt>ipv4address</tt>, <tt>ipv4route</tt>, <tt>ipv4link</tt>. | Если мост не нужен, тогда как обычно создаем файлы <tt>ipv4address</tt>, <tt>ipv4route</tt>, <tt>ipv4link</tt>. | ||
=== TODO === | === TODO === | ||
* причесать логический порядок страницы (вынести подстранички?) // mike | * причесать логический порядок страницы (вынести подстранички?) // mike |
Версия от 22:01, 6 августа 2008
Настройка OpenVZ на текущем Сизифе
OpenVZ — технология «лёгкой» виртуализации, позволяющая на одной аппаратной системе держать несколько различных корней Linux с одним ядром (поддерживающим ovz и содержащимся, как правило, на небольшом корне с ограниченным доступом по ssh и без других сервисов). В отличие от «тяжёлых» вариантов вроде Xen, Qemu или VMware, накладные расходы обычно составляют единицы процентов.
Сначала конечно необходимо прочитать документацию, для понимания что это такое и для чего можно использовать и как. PDF содержит более сотни страниц, но десяток из них обязательно следует прочитать для экономии времени — в начале про терминологию, около с.88 про Action Scripts и bind mounts, и в конце — секцию Troubleshooting. Также доступен перевод.
В настоящий момент в репозитарии есть практически все компоненты для полноценной работы. Но на данный момент openvz не поддерживает систему управления пакетами apt, поэтому мы не можем воспользоваться утилитой vzpkg.
Установка
# apt-get install vzctl kernel-image-ovz-smp
При этом установятся ядро с поддержкой openvz и необходимые утилиты, поэтому необходимо перегрузить компьютер и при загрузке выбрать ядро -ovz.
Планирование ресурсов
Если предполагается более-менее равномерное разделение HN между несколькими VE (или примерно можно означить ограничения как «1/10», «1/4»), то рекомендуется использовать vzsplit для создания заготовок конфигурации (не самих серверов! — получается меташаблон такой).
vzsplit -n 2 -f ltsp vzsplit -n 10 -f misc10
Заготовки окажутся в /etc/vz/conf/ve-ИМЯ.conf-sample и пригодны для использования в vzctl create $VEID --config ИМЯ. Имейте в виду, что штатный vps.basic весьма ограничен, а light — скорее непригоден к использованию.
Перепланировать можно и потом; если есть возможность — бывает полезно дать память с запасом и посмотреть через какое-то время реальное использование (накинуть резерв и уменьшить до полученной цифры). Также рекомендуется почитать про UBC, а также man-страницы vzctl, vzmemcheck, vzcpucheck.
Создание шаблона
(Адаптировано для spt-0.6.0-alt7) Необходимо создать шаблон, который будет использоваться для создания виртуального сервера. На сайте находится много шаблонов. Для ALT шаблоны см. в contrib, altlinux-2.4.tar.gz и altlinux-3.0.tar.gz. Шаблон представляет собой запакованый в архив корневой раздел. Поэтому для создания шаблона можно использовать spt или hasher. Я воспользовался spt, так как он содержит уже готовый профиль для ovz. Устанавливаем spt:
# apt-get install spt spt-profiles-ovz
На этом этапе необходимо получить работоспособный hasher. И лучший способ — это воспользоваться инструкцией: /usr/share/doc/hasher-1.*/QUICKSTART Для правильной работы vzctl необходимо, чтобы в /dev находились следующие устройства: /dev/ptmx, /dev/tty и был смонтирован /dev/pts/. Для их создания требуется наличие параметра allow_ttydev=YES в /etc/hasher-priv/* (см. hasher-priv.conf(8), http://lists.altlinux.org/pipermail/devel/2006-July/034431.html)
Затем необходимо создать профиль, по которому spt будет строить шаблон. Возможно использовать готовый профиль. Готовые профили, предназначенные для создания openvz-шаблонов, находятся в пакете spt-profiles-ovz.
Создаем рабочий каталог и копируем туда дефолтный ovz-профиль, если хотим самостоятельно сформировать список пакетов
mkdir ~/ovz cp -r /etc/spt/profiles/ovz/.default ~/ovz/profile
или копируем готовый профиль:
cp -r /etc/spt/profiles/ovz/proxy-server ~/ovz/profile
Можно поменять имя создаваемого образа в ~/ovz/profile/config. Заменим значение в OUT на altlinux-4.0.tar.gz . Список пакетов находится в — ~/ovz/profile/ovz/packages — например, можно добавить openssh-server, vim-console, bash-completion. В ovz-контейнер нет необходимости ставить пакет interactivesystem. Минимальный список пакетов:
basesystem apt etcnet glibc sysklogd
Или вместо попакетного списка можно указать один виртуальный пакет из:
ve-asterisk - Asterisk server ve-base - Basic appliance ve-build-scripts - scripts used for VE building ve-caching-nameserver - Caching name server ve-ftp-server - FTP server ve-imap-server - POP3/IMAP4 server ve-kerberos-server - Kerberos server ve-list-server - Mailing list server ve-ntp-server - NTP server ve-openvpn-server - virtual package for openvpn server appliance ve-pptp-server - virtual package for pptp server appliance ve-print-server - Print server ve-proxy-server - Proxy server ve-smtp-server - SMTP server
Если предполагается использовать в контейнере alterator, добавьте ve-base в список пакетов.
Теперь необходимо создать сам образ:
$ spt -v --image-type=tgz ~/ovz
Если все прошло хорошо, то в ~/ovz/ будет находится файл altlinux-4.0.tar.gz. Его необходимо скопировать в /var/lib/vz/template/cache. Не забудьте поменять владельца и группу.
Создание виртуального сервера
Внимание: ещё один момент, где лучше заранее почитать документацию, чем потом сожалеть: в PDF рекомендуется выдавать VEID’ы сообразно IP (например, для xxx.xxx.7.123 — 7123 или для 10.0.1.254 — #1254##). Это более удобно с точки зрения администрирования как мнемонически, так и при необходимости переноса контейнеров между физическими хостами — если везде есть VEID 101, перенос будет сильно затруднён (на forum.openvz.org в соответствующей теме встретился вариант решения — свернуть одноразовый template cache из переносимого VE (например с помощью vzdump) и создать на новом месте из этого темплейта; штатный способ изменения VEID мне на сейчас неизвестен). При создании из такого темплейта можно указать использовать старый конфиг и все работает хорошо.
Теперь мы можем создать сервер из шаблона.
# vzctl create 101 --ostemplate altlinux-3.0 --config vps.basic Creating VPS private area VPS private area was created
Имя, которое Вы дали вашему шаблону (то что следует за — ostemplate), имеет важное значение. При создании VE это имя заносится в конфигурационный файл в переменную OSTEMPLATE. По этой переменной vzctl определяет какие скрипты использовать (разным OS нужны разные скрипты). Если вы используете ALT, то оно обязательно должно начинаться с altlinux (определяет нюансы настройки). Дальше разбор имени идет по такому алгоритму:
> > а по-какому критерию тогда vzctl ищет нужные scripts? См. get_dist_conf_name(). В случае --ostemplate altlinux-i686-minimal будут проверены: altlinux-i686-minimal.conf altlinux-i686.conf altlinux.conf default Будет использован первый найденный. -- ldv
Именование виртуального сервера
Начиная с версии 3.0.11, vzctl поддерживает именование виртуальных серверов. Это удобно, когда у вас их много, ибо помнить, что proxy это 103 — не очень удобно.
# vzctl set 101 --name vps101 --save Saved parameters for VPS 101
Теперь в командах vzctl вместо 101 можно использовать vps101.
Конфигурация виртуального сервера
Конфигурация включает такие пункты:
1. Установка параметров запуска
# vzctl set 101 --onboot yes --save Saved parameters for VPS 101
2. Установка параметров сети
Общие настройки
Установка имени сервера:
# vzctl set 101 --hostname test101.my.org --save Saved parameters for VPS 101
Установка nameserver:
# vzctl set 101 --nameserver 192.168.1.165 --save Saved parameters for VPS 101
Установка searchdomain:
vzctl set 101 --searchdomain my.org --save
Учтите, что параметры ipadd и hostname можно задать сразу при создании VE.
Сетевые соединения
В OpenVZ в VE возможно настраивать 3 типа соединений: 1. venet 2. veth 3. Просто «пробросить» внутрь физический ethernet интерфейс. См. параметры netdev_add name/netdev_del name для vzctl. Различия между venet и veth описаны тут. Кратко можно сказать, что чаще всего вам потребуется venet. Но в некоторых случаях, для запуска таких приложений внутри VE, которые требуют для своей работы: MAC address, Broadcasts inside VE, Traffic sniffing, (например dhcpd, samba) или вам нужен IPv6 — необходимо создавать veth. Также veth можно использовать в некоторых сложных случаях. Во всех остальных случаях (например, сложный роутинг или несколько ethx устройств с разными маршрутами/коммутацией, или когда нужно именно физическое ethernet устройство внутри VE), необходимо использовать netdev.
venet
Настройка venet внутри VE полностью осуществляется средствами vzctl. При старте VE конфигурация venet устройств переписывается на основании конфига для VE.
# vzctl set 101 --ipadd 10.10.186.1 --save Saved parameters for VPS 101
При этом внутри в VE создастся 2 интерфейса:
# vzctl exec 101 /sbin/ip a 1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 3: venet0: <BROADCAST,POINTOPOINT,NOARP,UP> mtu 1500 qdisc noqueue link/void inet 10.10.186.1/32 scope global venet0:1
Маршрут при этом выглядеть должен так:
# vzctl exec 101 /sbin/ip r 192.0.2.0/24 dev venet0 scope host default via 192.0.2.1 dev venet0
Такой адрес выбран сознательно
veth для IPv4
UPDATE: в свежем vzctl уже автоматизировано:
3.0.10: Wed Jun 7 2006 <igor@openvz.org> * added virtual ethernet device support (--veth_add, --veth_del)
Настройка veth не осуществляется средствами vzctl, так как подразумевается, что администратор VE должен настроить сеть средствами той ОС, которая внутри VE.
1. Необходимо обеспечить загрузку модуля vzethdev:
# modprobe vzethdev
Разработчики рекомендуют дописать этот модуль в переменную NET_MODULES в скрипте /etc/init.d/vz. Но думаю, что лучше его просто прописать в /etc/modules (при обновлении vzctl скрипт обновляется -- явно напрашивается на /etc/sysconfig/vz-что-то, совсем непонятно, зачем сейчас это симлинк на ../vz/vz.conf).
vvk: похоже что сейчас ничего этого не требуется, модули подгружаются автоматически
2. Добавим сам veth к VE:
# vzctl set 101 --netif_add eth0 --save
, где eth0 — имя veth-интерфейса на стороне VE. Необходимости прописывать мак-адреса вручную теперь нет.
Добавлять IP командой vzctl set 101 --ipadd 10.10.186.1 --save не надо, так как тогда будет настраиваться venet.
3. Настроим создание eth0 в VE: Для этого можно использовать средства настройки сети той OS что установлена в VE. Для ALT это etcnet. Для этого просто настроим стандартный интерфейс типа eth. Или можно настраивать из HN используя «типичный скрипт» 101.start (в /etc/vz/conf/), добавив туда:
/sbin/ifconfig eth0 0 /sbin/ip addr add 10.10.186.1 dev eth0 /sbin/ip route add default dev eth0 /sbin/ip route replace default via $HN_IP dev eth0
Последняя строчка нужна в случае если HN и VE находятся в разных сетях, без нее пакеты VE не будут ходить за пределы этих сетей. Если кто предложит вариант лучше — исправления приветствуются
Скрипт должен иметь права на выполнение.
4. Запустим VE:
# vzctl start 101
После запуска в VE должны быть такие интерфейсы:
$ /sbin/ip a 1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 3: venet0: <BROADCAST,POINTOPOINT,NOARP,UP> mtu 1500 qdisc noqueue link/void inet 127.0.0.1/32 scope host venet0 5: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue link/ether 00:12:34:56:78:9b brd ff:ff:ff:ff:ff:ff inet 10.10.186.1/32 scope global eth0
и маршруты (почему-то добавляется):
$ /sbin/ip r 191.255.255.0/24 dev venet0 scope host default dev eth0 scope link default via 191.255.255.1 dev venet0
Теоретически администратор VE может сам менять IP, но я не проверял :-) 5. Теперь, после запуска VE нужно настроить veth на стороне ##DEFINITION HN => Hardware Node##: Для этого в OpenVZ после старта VE автоматически вызывается утилита vznetcfg, которая инициализирует veth на стороне HN путем вызова команды ip link set veth101.0 up. Т.о. вы имеете поднятый интерфейс, но без IP и без настроенного маршрута. Поэтому дальнейшую настройку приходится делать руками или прописать в rc.local. (В следующей версии vzctl вроде уже добавили поддержку) Настроим proxy_arp и forwarding для eth0 и veth на HN: Для eth0 можно использовать штатные средства Sisyphus:/admin/etcnet, установив переменную net.ipv4.ip_forward = 1 в файле /etc/net/sysctl.conf и proxy_arp=1 в /etc/net/ifaces/eth0/sysctl.conf. Для veth нужно выполнить:
# echo 1 > /proc/sys/net/ipv4/conf/veth101.0/forwarding # echo 1 > /proc/sys/net/ipv4/conf/veth101.0/proxy_arp
Добавляем IP
ip addr add 10.10.186.1 dev veth101.0
На самом деле, правильно:
ip addr add 0 dev veth101.0
А не 10.10.186.1 иначе с ноды 101 пакеты в мир уйдут, а те что будут направлены ноде 101-й будут приняты HN и дальше не пройдут.
И добавить маршрут:
# ip route add 10.10.186.1 dev veth101.0
Нюансы:
- На данный момент venet настраивается при любых условиях, то есть даже когда используется veth. Вот ответ разработчиков.
- https://bugzilla.altlinux.org/show_bug.cgi?id=9877
- Похоже, что еще можно не мучаться с rc.local и патчами и все настроить через etcnet и hotplug. Более подробно я напишу по окончании разборок с этим хозяйством. напишите кто-нибудь, как автоматически в HN ловить появление veth и настраивать ему ip-параметры/AfanasovDmitry: сделал «маленькую хитрость»/
- Если в VE iptables не работает с -t nat, скорее всего модуль iptable_nat был загружен на HN уже после старта контейнера.
- Мне захотелось иметь 2 VETH интерфейса в VE, соединённых с двумя сетевыми карточками HE, одна — ведущая в WAN, другая — в LAN. Результаты можно почитать здесь: http://vireso.blogspot.com/2008/02/2-veth-with-2-brindges-on-openvz-at.html (извиняюсь, на английском).
3. Установка пользовательских параметров
Установим пароль для рута:
# vzctl set 101 --userpasswd root:test Saved parameters for VPS 101
В этом примере мы установили пароль для root в VPS 101 в «test», и вы можете залогиниться
4. Установка квот
См. документацию.
на сейчас поддержка реализована только для ext2/3 :-(
Запуск виртуального сервера
# vzctl start 101 Starting VPS ... VPS is mounted Adding IP address(es): 10.0.186.101 Hostname for VPS 101 set: test.my.org VPS start in progress...
Выполнение команд на сервере
# vzctl exec 101 service sshd status sshd is stopped # vzctl exec 101 service sshd start Starting sshd: [ OK ] # vzctl exec 101 service sshd status sshd is running
Административный вход на сервер
# vzctl enter 101
Если огребаем такое:
# vzctl enter 101 enter into VE 101 failed Unable to open pty: No such file or directory
— то дело в /dev/tty, /dev/ptmx и (не)смонтированном /dev/pts/. Надо добавить в /etc/fstab этого VE нечто вроде
devpts /dev/pts devpts gid=5,mode=620 0 0
NB: если эта проблема вылезла вследствие выполнения команд start и enter цепочкой — вероятно, /dev/pts просто не успевает смонтироваться, попробуйте добавить задержку:
VE=NNN; vzctl start $VE; sleep 1; vzctl enter $VE
Уничтожение сервера
# vzctl destroy 101
Альтлинукс как VPS в других дистрибутивах
(Я пробовал не примере CentOS4) Если у вас есть шаблон altlinux.tar.gz, сделанный как описано выше, в главе «Создание Шаблона», то его можно скопировать в директорию /vz/template/cache/. Если версия пакета vzctl в HN меньше чем 3.0.19, то для того чтобы работала сеть, надо также взять из альтовского пакета vzctl файлы /etc/vz/dists/altlinux.conf, /etc/vz/dists/scripts/etcnet-add_ip.sh и /etc/vz/dists/scripts/etcnet-del_ip.sh или обновить пакет vzctl до версии >= 3.0.19. Далее всё согласно этому документу, — создание, именование, настройка…
(также можно взять у ldv@ в git: бранч master)
NFS/FUSE и LTSP
mount --bind из HN в VE при старте последнего
здеся (вообще про action scripts есть в документации, тут же — примеры удобные)
openntpd
В принципе, openntpd заводится с пол-пинка, но есть два замечания:
- не хотел стартовать с listen on *, помогает указание ip-адреса vps-а или 0.0.0.0
- необходимо разрешить VPS-у подкручивать системные часы:
# vzctl set 101 --capability sys_time:on --save
nut
Заводится с пол-пинка, единственный момент — дать доступ к устройству:
vzctl set 101 --devnodes ttyS0:rw --save
Миграция с VServer
Date: Wed, 9 Aug 2006 02:07:06 +0400 From: "Dmitry V. Levin" <ldv@> To: ALT Linux sysadmin discuss <sysadmins@> Subject: Re: [Sysadmins] vserver -> openvz migrate? > Скажите пожалуйста, если имеются работающие парочка VServers, один - > текущий Сизиф 32-битный чтобы пользоваться в 64-битном Сизифе смотреть > флэш и ещё что не нашёл 64-битное. Второй - Федора5. Мигрировать на > OpenVZ - что для этого надо будет делать? Или проще заново их > сгенерировать? Мигрировать контейнеры с linux-vserver на openvz достаточно легко. Я недавно делал такую миграцию для контейнеров, сделанных на основе M24. Могу отметить 4 момента: 1. vserver'ная конфигурация контейнеров беднее, чем openvz'шная; имеет смысл сперва установить достаточно большие лимиты, потом на основе опыта эксплуатации уменьшить их до рабочего уровня. 2. Имя файла template cache должно соответствовать имени системы, на основе которой сделан контейнер. Например, если контейнер сделан на основе чего-то ALT'ового с net-scripts, то имя должно начинаться с "altlinux-2.4-", если на основе ALT'ового с etcnet, то с "altlinux-", для FC - с "fedora-core-". 3. С удивлением обнаружил, что внутри vserver'ных контейнеров выключена служба network. Не забудьте выполнить "chkconfig network on". 4. В пакете vzctl-3.0.10-alt5 я добавил дополнительные правила корректировки в /etc/vz/dists/scripts/postcreate.sh, которые выключают запуск mingetty в inittab'е и лог в /dev/tty12 в syslog.conf. Если вы захотите обойтись без vzctl create, то надо будет каким-то образом выполнить этот /etc/vz/dists/scripts/postcreate.sh внутри контейнеров.
Date: Wed, 9 Aug 2006 13:10:39 +0400 (MSD) From: "Konstantin A. Lepikhov" <lakostis@> To: sysadmins@ Subject: Re: [Sysadmins] [wiki] Re: vserver -> openvz migrate? >> Мигрировать контейнеры с linux-vserver на openvz достаточно легко. агасчас. Это все легко, если используется старый vserver/vserver-utils, не 2.0.x. В новых vserver введен внешний package management, поэтому сначала придется в vserver поставить apt/rpm, потом скопировать базы rpm/apt из /vservers/.pkg/ внутрь vserver (кажется, там были грабли, т.к. vrpm использует db3 вместо db4). И лишь только когда это все сделано, можно создавать cache для ovz.
Или наоборот, создать template cache, создать тз него ovz-контейнер, скопировать туда базу данных rpm и поставить туда apt/rpm. -- ldv
Template caches
- http://cryo.net.ru/~thresh/altlinux-2.4.tar.gz
- http://paq.osdn.org.ua/~mike/tmp/openvz/altlinux-3.0.tar.gz
- http://paq.osdn.org.ua/~mike/tmp/openvz/altlinux-20060914.tar.gz
- http://paq.osdn.org.ua/~mike/tmp/openvz/altlinux-20060914-x86_64.tar.gz
Замечания по использованию
- vzquota не дружит с xfs (поскольку xfs использует свою реализацию квот, отличных от linuxquota). Поэтому для /vz лучше использовать ext3.
- user_beancounters по-умолчанию сильно закручены по ресурсам, поэтому после развертывания VPS, необходимо внимательно изучить содержимое /proc/user_beancounters. Значения, на которые надо смотреть — kmemsize, numproc, numfile, numtcpsock, numothersock. В случае нагруженной tcp подсистемы — tcpsndbuf и tcprcvbuf.
- В ovz ядрах глючит nfs, поэтому внутрь VPS ресурсы лучше экспортировать через mount --bind. Несекурно, зато работает.
- Чтобы собрать кэш темплейт для M24 надо пересобрать сизифный console-data.
А вот и собранный template для M24 с исправлением: http://cryo.net.ru/~thresh/altlinux-2.4.tar.gz размер: 24660183, md5sum: e575da3dc4841367ba0d74e7063703bf
- Чтобы в контейнере с Compact 3.0.4 заработала сеть, нужен etcnet-0.8.3-alt2, с etcnet-0.7.16-alt1 не работает (ip route list пустой).
А вот и собранный template для M30 с исправлением: http://paq.osdn.org.ua/~mike/tmp/openvz/altlinux-3.0.tar.gz размер: 20741540, md5sum: cd74ef7dc8f117626b1701061cb1973f
- Проверьте. есть ли все необходимые устройства. например, без /dev/full rpm --sign вылетает по SIGPIPE.
Маленькие хитрости
Для того чтобы выполнить команду на всех серверах можно воспользоваться такой конструкцией:
# for i in `vzlist -a -H -o veid`; do echo "VPS $i"; vzctl exec $i <command>; done
Чтобы показывался размер виртуального раздела в контейнере, надо выполнить следующие команды внутри контейнера:
rm -f /etc/mtab && ln -s /proc/mounts /etc/mtab
(уже obsoleted с spt >= 0.3.1-alt4)
Чтобы следить за «нарушителями границ» (предназначено для VE, не HN):
watch grep -v ' 0$' /proc/user_beancounters
NB: в /proc/sys/net/ipv4/conf/venet0/proxy_arp после ребута или service network restart оказался ноль => nmap -P0 говорил, что порты закрыты, в то время как telnet :22, :111, :2049 — соединялся. Занеся 1, получаем нормальную картинку по nmap, но точно так же не монтируется (server is down).
Правка дефолтного i18n (если не сделали себе в template cache сразу как требуется):
vi /etc/rpm/macros apt-get -y reinstall `rpm -qf --queryformat '%{NAME}\n' /usr/share/locale/ru/LC_MESSAGES/* | sort -u`
Для автоподхвата интерфейсов достаточно поставить hotplug и в файл options дописать USE_HOTPLUG=yes
Например устройство до почтовика /etc/net/ifaces/smtp0 организовано следующим обрзом:
/etc/net/ifaces/smtp0/options
TYPE=eth REQUIRES=br0 USE_HOTPLUG=yes
Он у меня автоматом в мост br0 добавляется. Это файлы /etc/net/ifaces/smtp0/ifup-post и /etc/net/ifaces/smtp0/ifdown-post с кодмандами
NAME="$1"; /sbin/brctl addif br0 "$NAME"
NAME="$1"; /sbin/brctl delif br0 "$NAME"
Если мост не нужен, тогда как обычно создаем файлы ipv4address, ipv4route, ipv4link.
TODO
- причесать логический порядок страницы (вынести подстранички?) // mike
Ссылки
- openvz.org, wiki.openvz.org
- Введение в виртуализацию
- Официальная документация
- Русская документация по openvz на opennet
- OpenVZ в Wikipedia
- OpenVZ vs VMWare
- A guide to running OpenVZ (linux.com)
- Виртуализация (вообще и в частности)
- Интервью с Кириллом Колышкиным [en]