Xgu.ru теперь в Контакте  — приходите и подключайтесь.
Пока мы работаем над следующими видео, вы можете подключиться в Контакте. Познакомимся и обсудим новые страницы и ролики.

Vk-big.pngYoutube-big.jpeg

xen-drbd-install

Материал из Xgu.ru

Перейти к: навигация, поиск

< xen-drbd

Mercurial-logo.png

Репозиторий проекта
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']

Описание каждого виртуального дискового устройства состоит из трёх элементов:

  1. имени блочного файла базового DRBD-устройства (и опционально — имени блочного устройства внутри гостевого домена);
  2. имени дискового устройства (в частности, это имя используется как название логического тома LVM, поверх которого создаётся DRBD-устройство);
  3. размера тома, при его создании (впоследствии размер тома можно изменить, на конфигурационном файле это не отразится).

Значение размера используется только на этапе генерации системы. Впоследствии это поле может принимать любые значения — оно игнорируется.

Опциональное имя блочного устройства внутри гостевого домена указывается после имени блочного устройства домена 0 через знак =:

   ['drbd8=sda1:mail:2G', 'drbd9=sda2:maildir:100G']

[править] Параметр vbridges_table

Переменная vbridges_table должна содержать ассоциативный массив, где в качестве ключей используются названия доменов, а в качестве их значений — списки. Каждый список описывает к каким мостам подключаются сетевые интерфейсы домена.

Например, этот список:

    ['xenbr501', 'xenbr256', 'xenbr257']

говорит о том, что у домена будет три сетевых интерфейса; интерфейс eth0 домена должен быть подключён к мосту xenbr501, интерфейс eth1 — к мосту xenbr256, а интерфейс eth2 — к мосту xenbr257.


Icon-caution.gif

Интерфейсов tagged не может быть больше одного!

[править] Инсталляционные параметры

Debian-icon.png

В гостевые домены устанавливается операционная система 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 мегабайтов.

Icon-caution.gif

Обратите внимание, что объём памяти и количество виртуальных процессоров можно также задавать при помощи таблиц 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.

[править] См. также

Xentaur
Дисковая подсистема
Linux | FreeBSD

Диски и разделы
Файлы устройств: Блочное устройство | Символьное устройство | Raw-устройство | loop-устройство
Диски: IDE | SATA (SATA hotplug) | SCSI | USB
RAID-массивы: Аппаратный RAID | Linux RAID | FreeBSD RAID
Дисковые разделы: Раздел | MBR | fdisk | parted | disklabel | GPT

Управление томами
Логический том | Физический том | Группа томов | Снимок | Клон
device-mapper | dm-ioband | dm-crypt | dm-userspace | multipath
Системы управления томами: LVM | CLVM | EVMS | Btrfs* | ZFS* | AdvFS* | Zumastor

Сетевые хранилища и репликация
Отказоустойчивость: DRBD | Xen + DRBD | ggate + gmirror | HAST
Сетевые хранилища: AoE | iSCSI | FCoE | GNBD

Файловые системы
Монтирование | Проверка целостности | Дефрагментация | Суперблок | inode | Журнал | Кэш | VFS | UUID | FUSE
Локальные: ext3 | ext3cow | ext4 | JFS | Reiser4 | XFS | ZFS | Btrfs | AdvFS | ISO | aufs
Сетевые: NFS | CIFS | AFS | POHMELFS
Кластерные: GFS | OCFS2 | CXFS | VMFS | GPFS
Распределенные: Lustre | PVFS | Ceph | Coda

* Btrfs, ZFS и AdvFS — это файловые системы с возможностями управления томами
Xen
Xen

Виртуализация и паравиртуализация
Эмуляция | Виртуализация | Паравиртуализация | Рекурсивная виртуализация
Паравиртуальные драйверы | Виртуализация ввода/вывода

Общие вопросы по Xen
Аппаратные требования Xen | Поддержка Xen операционными системами | Поддерживаемые аппаратные архитектуры |
Примеры использования Xen | Сравнение виртуальных машин |
Хостинг на Xen
Альтернативы Xen

свободные: KVM | LXC | OpenVZ | VServer | QEMU | VirtualBox
проприетарные: Hyper-V | VMware ESX Server

Технические вопросы
Инсталляция Xen | Конфигурационный файл домена
ОС в Xen: Linux small icon.png Linux | Solaris small icon.png OpenSolaris | Freebsd small icon.png FreeBSD | Openbsd small icon.png OpenBSD | Netbsd small icon.png NetBSD | Windows xp small icon.png Windows XP | Windows vista small icon.png Windows Vista
Устройства: Блочные | USB | SCSI | Сеть | PV-драйверы для Linux | PV-драйверы для Windows | Консоль

Распределение ресурсов между доменами | Перенос системы внутрь Xen | HVM -> PV

Управление и кластеризация | Enomalism | Xen+DRBD | Ganeti | Convirt 2.0 | SkyCover Infrastructure