xen-drbd-install
Материал из Xgu.ru
< xen-drbd
Репозиторий проекта
http://xgu.ru/hg/xen-drbd
Содержание |
[править] Использование
Usage: xen-drbd-install [options] <command> (to view) xen-drbd-install [options] <command> | sh -s (to run) <network> is the name of the file, which contains network description Commands: make-drbd make-domains make-bridges make-links Options: --help (-h) -- show usage information --network=name (-n) -- the network descriptions is in the file name.py (default: network.py)
- make-drbd — подготовка LVM-томов и DRBD-устройств на их основе;
- make-domains — создание файловых систем и их наполнение;
- make-bridges — создание виртуальных мостов в соответствии с топологией сети;
- make-links — создание символических ссылок на файлы блочных устройств DRBD для удобства их использования.
Подкоманда make-drbd вызывается при инсталляции на обеих половинах кластера.
Подкоманда make-domains вызывается при инсталляции только на одной половине кластера.
Подкоманды make-bridges и make-links вызываются каждый раз при загрузке системы.
Опция --network задаёт название топологии. Если оно не задано, подразумевается имя network и используется файл с названием network.py.
[править] Описание топологии
Описание топологии используется как на этапе инсталляции системы, так и при её повседневной работе. Фактически, это единственный конфигурационный файл, описывающий конфигурацию виртуальной системы.
В файле используется синтаксис Python. Нужно выполнить присвоение значений определённого типа ряду переменных. Значения могут быть строками, списками или ассоциативными массивами (хэшами).
[править] Основные параметры
- node1 — имя узла 1 (строка);
- node2 — имя узла 2 (строка);
- i_am — имя текущего узла; должно быть равно одному из имён node1 или node2 (строка);
- node1_ip — IP-адрес узла 1; используется при создании конфигурационного файла DRBD (строка);
- node2_ip — IP-адрес узла 2 (строка);
- domains — список имён всех доменов (список);
- domain_types — типы доменов (список); поддерживаемые типы:
- linux — паравиртуальный домен Linux;
- hvm — HVM-домен;
- domain_home — исходное распределение доменов по узлам (хэш);
- kernel — путь к файлу ядра, которое должно использоваться в гостевых доменах (строка);
- hvmloader — путь к загрузчику, который будет использоваться для всех HVM-доменов (обязательно, если собирать Xen из исходников!);
- device_model — путь к эмулятору устройств ввода-вывода, который будет использоваться для всех HVM-доменов (обязательно, если собирать Xen из исходников!);
- ramdisk — путь к начальному виртуальному диску, который должен использоваться в гостевых доменах (строка);
- mem_table — распределение оперативной памяти для доменов (хэш);
- vcpus_table — виртуальные процессоры доменов (хэш);
- disk_table — дисковые устройства доменов; подробности ниже (хэш);
- bridges — виртуальные мосты (список);;
- vlans — номера VLANов, на которые отражаются виртуальные мосты; перечисляются в том порядке, соответствующем порядку мостов (список);;
- management_interface — управляющий VLAN; через этот VLAN будет осуществляться доступ к узлам (строка);
- trunk — какой физический интерфейс используется для соединения с тегированным каналом коммутатора (строка);
- management_ip — IP, который должен быть установлен на интерфейсе узла в управляющем VLAN'е (строка);
- management_netmask — маска этого интерфейса (строка);
- management_gw — шлюз по умолчанию для узла (строка);
- vbridges_table — сетевая конфигурацию доменов; поробности ниже.
Принцип описания всех параметром интуитивно понятен, за исключением двух, требующих некоторых пояснений.
[править] Параметр disk_table
Переменная disk_table должна содержать ассоциативный массив, где в качестве ключей используются названия доменов, а в качестве их значений — списки. Каждый список описывает какие дисковые устройства принадлежат домену.
['drbd8:mail:2G', 'drbd9:maildir:100G']
Описание каждого виртуального дискового устройства состоит из трёх элементов:
- имени блочного файла базового DRBD-устройства (и опционально — имени блочного устройства внутри гостевого домена);
- имени дискового устройства (в частности, это имя используется как название логического тома LVM, поверх которого создаётся DRBD-устройство);
- размера тома, при его создании (впоследствии размер тома можно изменить, на конфигурационном файле это не отразится).
Значение размера используется только на этапе генерации системы. Впоследствии это поле может принимать любые значения — оно игнорируется.
Опциональное имя блочного устройства внутри гостевого домена указывается после имени блочного устройства домена 0 через знак =:
['drbd8=sda1:mail:2G', 'drbd9=sda2:maildir:100G']
[править] Параметр vbridges_table
Переменная vbridges_table должна содержать ассоциативный массив, где в качестве ключей используются названия доменов, а в качестве их значений — списки. Каждый список описывает к каким мостам подключаются сетевые интерфейсы домена.
Например, этот список:
['xenbr501', 'xenbr256', 'xenbr257']
говорит о том, что у домена будет три сетевых интерфейса; интерфейс eth0 домена должен быть подключён к мосту xenbr501, интерфейс eth1 — к мосту xenbr256, а интерфейс eth2 — к мосту xenbr257.
Интерфейсов tagged не может быть больше одного! |
[править] Инсталляционные параметры
В гостевые домены устанавливается операционная система Debian GNU/Linux. Если вы хотите использовать другую систему, вы можете попробовать модифицировать скрипт самостоятельно или связаться с его разработчиками |
Эти параметры используются только при генерировании доменов.
- ip_address_table — IP-адресов, которые будут установлены на интерфейсах eth0 гостевых доменов (хэш);
- ip_network — сеть на интерфейсе eth0 гостевого домена (строка);
- ip_netmask — сетевая маска интерфейса eth0 гостевого домена (строка);
- ip_gateway — основной шлюз для гостевых доменов (строка);
- domain_name — домен DNS, который указывается в качестве основного для гостевых доменов (строка);
- ip_nameserver — DNS-сервер, который должен использоваться в качестве основного в гостевых доменах (строка);
- debian_release — какой дистрибутив Debian GNU/Linux необходимо использовать при подготовке гостевых доменов (строка);
- debian_mirror — какой репозиторий Debian GNU/Linux должен использоваться для подготовке гостевых доменов (строка);
- apt_get_install — какие пакеты должны быть сразу же установлены во все гостевые домены (строка);
- apt_get_install_table — какие пакеты должны быть сразу же установлены в разные домены (хэш);
- lvm_vg_name — название группы томов, в которой будут создаваться логические тома для Xen (строка);
- lvm_pv_names — физические тома, которые должны быть объединены в группу томов (строка);
- lvm_lv_drbd_meta_name — название тома LVM, который будет использоваться как метадиск для DRBD (строка);
- lvm_lv_drbd_meta_size — размер тома LVM, который будет использоваться как метадиск DRBD (строка);
- mkfs_options — опции mkfs, которые необходимо использовать при создании файловых систем (используется файловая система ext3).
[править] Вычисление параметров на лету
Конфигурационные параметры не обязательно могут задаваться статически, но и вычисляться на лету.
Конфигурационный файл сети представляет собой скрипт на языке python, и в нём можно использовать все конструкции этого языка.
При обработке скрипта можно использовать входную переменную domain. Она содержит имя домена, для которого сейчас вычисляются параметры.
Например, мы хотим чтобы для всех доменов использовались ядро одного вида, а для некоторых — другого.
Используем строки:
if domain in ['mail', 'samba', 'ldap']: kernel="/boot/vmlinuz-2.6.18-8.el5xen" ramdisk="/boot/initrd-2.6.18-8.el5xenU.img"
Аналогичным образом можно задавать и другие параметры.
memory=64 if domain in ['mail', 'samba', 'ldap']: memory=128
В этом примере у всех доменов будет 64 мегабайта памяти, за исключением трёх — у них будет по 128 мегабайтов.
Обратите внимание, что объём памяти и количество виртуальных процессоров можно также задавать при помощи таблиц vcpus_table и mem_table. Таблицы, если они заданы, имеют приоритет. |
[править] Пример описания топологии
node1='debian' node2='mirror' #i_am=node1 from socket import gethostname; i_am=gethostname() if i_am != node1 and i_am != node2: raise ValueError, "My hostname (%s) should be equal to node1 (%s) or node2 (%s)" % (i_am, node1, node2) ip_address = { node1: '10.0.80.220', node2: '10.0.80.221', } node1_ip=ip_address[node1] node2_ip=ip_address[node2] domains= [ 'gw', 'igw', 'dns', 'vpn', 'apt', 'pgw', 'ldap', 'mail', 'uucp', 'samba', 'nod32' ] domain_types=[ 'linux', 'linux', 'linux', 'linux', 'linux', 'linux', 'linux', 'linux', 'linux', 'linux', 'hvm' ] domain_home = { node1 : ['dns', 'gw', 'igw', 'pgw', 'ldap', 'mail', 'vpn', 'uucp', 'apt'], node2 : ['samba', 'nod32' ], } kernel = "/boot/vmlinuz-2.6.18-4-xen-686" ramdisk = "/boot/initrd.img-2.6.18-4-xen-686-domU" if domain in ['mail', 'samba', 'ldap']: kernel="/boot/vmlinuz-2.6.18-8.el5xen" ramdisk="/boot/initrd-2.6.18-8.el5xenU.img" mem_table={ 'dns' :64, 'gw' :64, 'igw' :128, 'pgw' :64, 'ldap' :64, 'mail' :256, 'samba' :512, 'vpn' :192, 'uucp' :128, 'apt' :128, } vcpus_table={ 'dns' :1, 'gw' :1, 'igw' :1, 'pgw' :1, 'ldap' :1, 'mail' :4, 'samba' :4, 'vpn' :4, 'uucp' :4, 'apt' :2, } disk_table={ 'gw' : ['drbd1:gw:2G'], 'igw' : ['drbd2:igw:2G'], 'dns' : ['drbd3:dns:2G'], 'vpn' : ['drbd4:vpn:2G'], 'apt' : ['drbd5:apt:10G'], 'pgw' : ['drbd6:pgw:2G'], 'ldap' : ['drbd7:ldap:2G'], 'mail' : ['drbd8:mail:2G','drbd9:maildir:100G'], 'uucp' : ['drbd11:uucp:3G'], 'samba' : [ 'drbd12:samba:3G', 'drbd13:samba-home:100G', 'drbd17:samba-profiles:100G' ], } bridges=['tagged0', 'xenbr1', 'xenbr256', 'xenbr257', 'xenbr3', 'xenbr4', 'xenbr501'] vlans= ['tagged', 1, 256, 257, 3, 4, 501 ] management_vlan=1 trunk='eth0' management_ip=ip_address[i_am] management_gw='10.0.80.253' vbridges_table={ 'dns' : ['xenbr3'], 'gw' : ['xenbr501', 'xenbr256', 'xenbr257'], 'igw' : ['tagged0','xenbr3'], 'pgw' : ['xenbr3','xenbr501'], 'ldap' : ['xenbr3'], 'mail' : ['xenbr3'], 'samba' : ['tagged0', 'xenbr3'], 'vpn' : ['xenbr3'], 'apt' : ['xenbr3'], 'uucp' : ['xenbr3'], } # FOR INSTALLATION ONLY ip_network="10.20.30" ip_netmask="255.255.255.224" domain_name="crimea.example.com" ip_nameserver="10.20.30.4" ip_gateway="10.20.30.6" ip_address_table={ "dns" :"10.20.30.4", "gw" :"10.20.30.254", "igw" :"10.20.30.3", "pgw" :"10.20.30.6", "ldap" :"10.20.30.11", "mail" :"10.20.30.9", "samba" :"10.20.30.1", "vpn" :"10.20.30.5", "apt" :"10.20.30.7", "uucp" :"10.20.30.16", "jabber":"10.20.30.12", } debian_release="lenny" debian_mirror="http://debian.org.ua/debian/" apt_get_install="less tcpdump dnsutils vim ntp screen snmpd libc6-xen openssh-server" apt_get_install_table={ "vpn" :"openvpn", } lvm_vg_name="TURBO" lvm_pv_names="/dev/md2" lvm_lv_drbd_meta_name="meta" lvm_lv_drbd_meta_size="5G" mkfs_options="-m1"
[править] Пример использования
Создаём файл с описанием топологии:
%# vi topology1.py
Проверяем, что топология была распознана верно:
%# xen-drbd-install --network=topology1 make-drbd | less
Если ошибок не обнаружено, выполняем (ключи --network и -n равносильны) :
%# xen-drbd-install -ntopology1 make-drbd | sh -s
Аналогичным образом выполняем команду на втором узле кластера:
%# xen-drbd-install -ntopology1 make-drbd
В результате, на обоих узлах:
- Настраивается система LVM (физические тома, группы томов, логические тома);
- Создаётся конфигурационный файл DRBD;
- Поверх одного из логических томов создаётся мета-диск для DRBD-устройств;
- Поверх логических томов LVM создаются DRBD-устройства.
[править] Создание и заполнение файловых систем доменов
Теперь нужно наполнить созданные разделы.
Наполнение выполняется только на одном из узлов кластера. Второй получает все данные автоматически с помощью DRBD.
Проверьте что генерируется правильный скрипт:
%# xen-drbd-install -ntopology1 make-domains | less
Если всё в порядке, можно его выполнить:
%# xen-drbd-install -ntopology1 make-domains | sh -s
В результате выполнения будут:
- созданы файловые системы доменов;
- файловые системы доменов смонтированы;
- выполнится наполнение файловых систем (с помощью debootstrap);
- конфигурационные файлы внутри файловых систем (/etc/fstab, /etc/network и т.д.) модифицируются в соответствии с заданными в описании топологии значениями;
- файловые системы доменов размонтированы.
Теперь в системе есть LVM-тома отформатированные и наполненные образами виртуальных систем. Тома синхронизируются между узлами с помощью DRBD.
[править] См. также
|
---|