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