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}