xg-scale
view xen-drbd-install.tex @ 0:4730a0d07d88
Исходники курса после первого прочтения.
Правки (которых должно быть много),
ещё пока не вносились.
Правки (которых должно быть много),
ещё пока не вносились.
| author | Igor Chubin <igor@chub.in> | 
|---|---|
| date | Tue Jul 01 16:16:44 2008 +0300 (2008-07-01) | 
| parents | |
| children | 
 line source
     1 \section{Подготовка кластера виртуализации с помощью xen-drbd-install}
     3 \subsection{Использование}
     4 \begin{verbatim}
     5 Usage:
     6     xen-drbd-install <network> <command>            (to view)
     7     xen-drbd-install <network> <command> | sh -s    (to run)
     9     <network> is the name of the file, which contains network description
    11 Commands:
    12     make-drbd
    13     make-domains
    14     make-bridges
    15     make-links
    16 \end{verbatim}
    18 \begin{itemize}
    19 \item  \textbf{make-drbd} — подготовка LVM-томов и DRBD-устройств на их основе;
    20 \item  \textbf{make-domains} — создание файловых систем и их наполнение;
    21 \item  \textbf{make-bridges} — создание виртуальных мостов в соответствии с топологией сети;
    22 \item  \textbf{make-links} — создание символических ссылок на файлы блочных устройств DRBD для удобства их использования.
    23 \end{itemize}
    25 Подкоманда \textit{make-drbd} вызывается при инсталляции на обеих половинах кластера.
    27 Подкоманда \textit{make-domains} вызывается при инсталляции только на одной половине кластера.
    29 Подкоманды \textit{make-bridges} и \textit{make-links} вызываются каждый раз при загрузке
    30 системы.
    32 \subsection{Описание топологии}
    33 Описание топологии используется как на этапе 
    34 инсталляции системы, так и при её повседневной работе.
    35 Фактически, это единственный конфигурационный файл, 
    36 описывающий конфигурацию виртуальной системы.
    38 Конфигурационный файл имеет синтаксис языка Python.
    39 Нужно выполнить присвоение значений
    40 определённого типа ряду переменных.
    41 Значения могут быть строками, списками или ассоциативными массивами (хэшами).
    43 \subsubsection{Основные параметры}
    44 \begin{itemize}
    45 \item  \texttt{node1} — имя узла 1 (строка);
    46 \item  \texttt{node2} — имя узла 2 (строка);
    47 \item  \texttt{i\_am} — имя текущего узла; должно быть равно одному из имён \texttt{node1} или \texttt{node2} (строка);
    48 \item  \texttt{node1\_ip} — IP-адрес узла 1; используется при создании конфигурационного файла DRBD (строка);
    49 \item  \texttt{node2\_ip} — IP-адрес узла 2  (строка);
    50 \item  \texttt{domains} — список имён всех доменов (список);
    51 \item  \texttt{domain\_home} — исходное распределение доменов по узлам (хэш);
    52 \item  \texttt{kernel} — путь к файлу ядра, которое должно использоваться в гостевых доменах (строка);
    53 \item  \texttt{ramdisk} — путь к начальному виртуальному диску, который должен использоваться в гостевых доменах (строка);
    54 \item  \texttt{mem\_table} — распределение оперативной памяти для доменов (хэш);
    55 \item  \texttt{vcpus\_table} — виртуальные процессоры доменов (хэш);
    56 \item  \texttt{disk\_table} — дисковые устройства доменов; \textit{подробности ниже} (хэш);
    57 \item  \texttt{bridges} — виртуальные мосты (список);
    58 \item  \texttt{vlans} — номера VLAN\rq{}ов, на которые отражаются виртуальные мосты; перечисляются в том порядке, соответствующем порядку мостов (список);
    59 \item  \texttt{management\_vlan} — управляющий VLAN; через этот VLAN будет осуществляться доступ к узлам (строка);
    60 \item  \texttt{trunk} — какой физический интерфейс используется для соединения с тегированным каналом коммутатора (строка);
    61 \item  \texttt{management\_ip} — IP, который должен быть установлен на интерфейсе узла в управляющем VLAN\rq{}е (строка);
    62 \item  \texttt{management\_netmask} — маска этого интерфейса (строка);
    63 \item  \texttt{management\_gw} — шлюз по умолчанию для узла (строка);
    64 \item  \texttt{vbridges\_table} — сетевая конфигурацию доменов; \textit{поробности ниже} (хэш).
    65 \end{itemize}
    67 Принцип описания всех параметром интуитивно понятен, 
    68 за исключением двух, требующих некоторых пояснений.
    70 \paragraph{Параметр disk\_table}
    71 Переменная \texttt{disk\_table} должна содержать ассоциативный массив, 
    72 где в качестве ключей используются названия доменов, 
    73 а в качестве их значений — списки. Каждый список описывает
    74 какие дисковые устройства принадлежат домену.
    75 \begin{verbatim}
    76   ['drbd8:mail:2G', 'drbd9:maildir:100G']
    77 \end{verbatim}
    78 Описание каждого виртуального дискового устройства состоит 
    79 из трёх элементов:
    80 \begin{enumerate}
    81 \item Имени блочного файла базового DRBD-устройства;
    82 \item Имени дискового устройства (в частности, это имя используется как название логического тома LVM, поверх которого создаётся DRBD-устройство);
    83 \item Размера тома при его создании (впоследствии размер тома можно изменить, но не через конфигурационный  файл и вообще без помощи xen-drbd).
    84 \end{enumerate}
    85 Значение размера используется только на этапе генерации системы. 
    86 Впослесдствии это поле может принимать любые значения — оно игнорируется.
    88 \paragraph{Параметр vbridges\_table}
    90 Переменная \texttt{vbridges\_table} должна содержать ассоциативный массив, 
    91 где в качестве ключей используются названия доменов, 
    92 а в качестве их значений — списки. Каждый список описывает
    93 к каким мостам подключаются сетевые интерфейсы домена.
    95 Например, этот список:
    96 \begin{verbatim}
    97   ['xenbr501', 'xenbr256', 'xenbr257']
    98 \end{verbatim}
    99 говорит о том, что у домена будет три сетевых интерфейса;
   100 интерфейс \textit{eth0} домена должен быть подключён к мосту \textit{xenbr501},
   101 интерфейс \textit{eth1} — к мосту \textit{xenbr256}, 
   102 а интерфейс \textit{eth2} — к мосту \textit{xenbr257}.
   104 \subsubsection{Инсталляционные параметры}
   106 В гостевые домены устанавливается операционная система Debian GNU/Linux.
   107 Если вы хотите использовать другую систему, 
   108 вы можете попробовать модифицировать скрипт самостоятельно или связаться с его разработчиками.
   110 Эти параметры используются только при генерировании доменов.
   112 \begin{itemize}
   113 \item  \texttt{ip\_address\_table} — IP-адресов, которые будут установлены на интерфейсах eth0 гостевых доменов (хэш);
   114 \item  \texttt{ip\_network} — сеть на интерфейсе eth0 гостевого домена (строка);
   115 \item  \texttt{ip\_netmask} — сетевая маска интерфейса eth0 гостевого домена (строка);
   116 \item  \texttt{ip\_gateway} — основной шлюз для гостевых доменов (строка);
   117 \item  \texttt{domain\_name} — домен DNS, который указывается в качестве основного для гостевых доменов (строка);
   118 \item  \texttt{ip\_nameserver} — DNS-сервер, который должен использоваться в качестве основного в гостевых доменах (строка);
   119 \item  \texttt{debian\_release} — какой дистрибутив Debian GNU/Linux необходимо использовать при подготовке гостевых доменов (строка);
   120 \item  \texttt{debian\_mirror} — какой репозиторий Debian GNU/Linux должен использоваться для подготовке гостевых доменов (строка);
   121 \item  \texttt{apt\_get\_install} — какие пакеты должны быть сразу же установлены во всех гостевые домены (строка);
   122 \item  \texttt{lvm\_vg\_name} — название группы томов, в которой будут создаваться логические тома для Xen (строка);
   123 \item  \texttt{lvm\_pv\_names} — физические тома, которые должны быть объединены в группу томов (строка);
   124 \item  \texttt{lvm\_lv\_drbd\_meta\_name} — название тома LVM, который будет использоваться как метадиск для DRBD (строка);
   125 \item  \texttt{lvm\_lv\_drbd\_meta\_size} — размер тома LVM, который будет использоваться как метадиск DRBD (строка);
   126 \item  \texttt{mkfs\_options} — опции mkfs, которые необходимо использовать при создании файловых систем (используется файловая система ext3).
   127 \end{itemize}
   129 \subsection{Пример описания топологии}
   132 \begin{verbatim}
   133    node1='debian'
   134    node2='mirror'
   135    #i_am=node1
   137    from socket import gethostname; i_am=gethostname()
   138    if i_am != node1 and i_am != node2:
   139        raise ValueError, "My hostname (%s) should be equal \
   140        to node1 (%s) or node2 (%s)" % (i_am, node1, node2)
   142    ip_address = {
   143        node1: '10.0.80.220',
   144        node2: '10.0.80.221',
   145    }
   147    node1_ip=ip_address[node1]
   148    node2_ip=ip_address[node2]
   150    domains=['gw','igw','dns','vpn','apt','pgw','ldap','mail','uucp','samba',]
   152    domain_home = {
   153            node1 : ['dns','gw','igw','pgw','ldap','mail','vpn','uucp','apt'],
   154            node2 : ['samba'],
   155        }
   157    kernel = "/boot/vmlinuz-2.6.18-4-xen-686"
   158    ramdisk = "/boot/initrd.img-2.6.18-4-xen-686-domU"
   160    mem_table={
   161        'dns'   :64,
   162        'gw'    :64,
   163        'igw'   :128,
   164        'pgw'   :64,
   165        'ldap'  :64,
   166        'mail'  :256,
   167        'samba' :512,
   168        'vpn'   :192,
   169        'uucp'  :128,
   170        'apt'   :128,
   171    }
   173    vcpus_table={
   174        'dns'   :1,
   175        'gw'    :1,
   176        'igw'   :1,
   177        'pgw'   :1,
   178        'ldap'  :1,
   179        'mail'  :4,
   180        'samba' :4,
   181        'vpn'   :4,
   182        'uucp'  :4,
   183        'apt'   :2,
   184    }
   186    disk_table={
   187        'gw'        : ['drbd1:gw:2G'], 
   188        'igw'       : ['drbd2:igw:2G'], 
   189        'dns'       : ['drbd3:dns:2G'], 
   190        'vpn'       : ['drbd4:vpn:2G'],
   191        'apt'       : ['drbd5:apt:10G'],
   192        'pgw'       : ['drbd6:pgw:2G'],
   193        'ldap'      : ['drbd7:ldap:2G'], 
   194        'mail'      : ['drbd8:mail:2G','drbd9:maildir:100G'], 
   195        'uucp'      : ['drbd11:uucp:3G'], 
   196        'samba'     : [ 
   197                    'drbd12:samba:3G', 
   198                    'drbd13:samba-home:100G', 
   199                    'drbd17:samba-profiles:100G' 
   200                ],
   201    }
   203    bridges=['tagged0','xenbr1','xenbr256','xenbr257','xenbr3','xenbr4','xenbr501']
   204    vlans=  ['tagged',       1,       256,       257,       3,       4,       501 ]
   205    management_vlan=1
   206    trunk='eth0'
   207    management_ip=ip_address[i_am]
   208    management_gw='10.0.80.253'
   210    vbridges_table={
   211        'dns'       : ['xenbr3'], 
   212        'gw'        : ['xenbr501', 'xenbr256', 'xenbr257'], 
   213        'igw'       : ['tagged0','xenbr3'], 
   214        'pgw'       : ['xenbr3','xenbr501'], 
   215        'ldap'      : ['xenbr3'], 
   216        'mail'      : ['xenbr3'], 
   217        'samba'     : ['tagged0', 'xenbr3'],
   218        'vpn'       : ['xenbr3'],
   219        'apt'       : ['xenbr3'],
   220        'uucp'      : ['xenbr3'],
   221    }
   223    # FOR INSTALLATION ONLY
   225    ip_network="10.20.30"
   226    ip_netmask="255.255.255.224"
   227    domain_name="crimea.example.com"
   228    ip_nameserver="10.20.30.4"
   229    ip_gateway="10.20.30.6"
   231    ip_address_table={
   232        "dns"   :"10.20.30.4",
   233        "gw"    :"10.20.30.254",
   234        "igw"   :"10.20.30.3",
   235        "pgw"   :"10.20.30.6",
   236        "ldap"  :"10.20.30.11",
   237        "mail"  :"10.20.30.9",
   238        "samba" :"10.20.30.1",
   239        "vpn"   :"10.20.30.5",
   240        "apt"   :"10.20.30.7",
   241        "uucp"  :"10.20.30.16",
   242        "jabber":"10.20.30.12",
   244    }
   246    debian_release="lenny"
   247    debian_mirror="http://debian.org.ua/debian/"
   248    apt_get_install="less tcpdump dnsutils vim ntp screen snmpd libc6-xen openssh-server"
   250    lvm_vg_name="TURBO"
   251    lvm_pv_names="/dev/md2"
   252    lvm_lv_drbd_meta_name="meta"
   253    lvm_lv_drbd_meta_size="5G"
   254    mkfs_options="-m1"
   255 \end{verbatim}
   257 \subsection{Пример использования}
   258 Создаём файл с описанием топологии:
   259 \begin{verbatim}
   260   %# vi topology1.py
   261 \end{verbatim}
   263 Проверяем, что топология была распознана верно:
   264 \begin{verbatim}
   265   %# make-drbd-install topology1 make-drbd | less
   266 \end{verbatim}
   268 Если ошибок не обнаружено, 
   269 выполняем
   270 \begin{verbatim}
   271   %# make-drbd-install topology1 make-drbd | sh -s
   272 \end{verbatim}
   274 Аналогичным образом выполняем команду 
   275 на втором узле кластера:
   276 \begin{verbatim}
   277   %# make-drbd-install topology1 make-drbd
   278 \end{verbatim}
   280 В результате на обоих узлах:
   281 \begin{enumerate}
   282 \item Настраивается система LVM (физические тома, группы томов, логические тома);
   283 \item Создаётся конфигурационный файл DRBD;
   284 \item Поверх одного из логических томов создаётся мета-диск для DRBD-устройств;
   285 \item Поверх логических томов LVM создаются DRBD-устройства.
   286 \end{enumerate}
   288 \subsubsection{Создание и заполнение файловых систем доменов}
   289 Теперь нужно наполнить созданные разделы.
   291 Наполнение выполняется только на одном из узлов кластера.
   292 Второй получает все данные автоматически с помощью DRBD.
   294 Проверьте что генерируется правильный скрипт:
   296 \begin{verbatim}
   297 %# make-drbd-install topology1 make-domains | less
   298 \end{verbatim}
   300 Если всё в порядке, можно его выполнить:
   302 \begin{verbatim}
   303 %# make-drbd-install topology1 make-domains | sh -s
   304 \end{verbatim}
   306 В результате выполнения будут:
   307 \begin{itemize}
   308 \item  созданы файловые системы доменов;
   309 \item  файловые системы доменов смонтированы;
   310 \item  выполнится наполнение файловых систем (с помощью debootstrap);
   311 \item  конфигурационные файлы внутри файловых систем (\texttt{/etc/fstab}, \texttt{/etc/network} и т.д.) модфицированы в соответствии с заданными в описании топологии значениями;
   312 \item  файловые системы доменов размонтированы.
   313 \end{itemize}
   315 Теперь в системе есть LVM-тома отформатированные и наполненные образами виртуальных систем.
   316 Тома синхронизируются между узлами с помощью DRBD.
   318 \subsection{Дополнительная информация}
   319 \begin{itemize}
   320 \item \htmladdnormallinkfoot{xen-drbd-install}{http://xgu.ru/wiki/xen-drbd-install} (рус.)
   321 \end{itemize}
