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
|