rev |
line source |
igor@0
|
1 \section{Управление кластером виртуализации с помощью xen-drbd}
|
igor@0
|
2
|
igor@0
|
3 \subsection{Подготовительные процедуры}
|
igor@0
|
4 \subsubsection{Развёртывание системы с помощью xen-drbd-install}
|
igor@0
|
5 Система должна быть развёрнута вручную,
|
igor@0
|
6 с помощью скрипта xen-drbd-install
|
igor@0
|
7 или каким-то другим способом.
|
igor@0
|
8
|
igor@0
|
9 \begin{itemize}
|
igor@0
|
10 \item Должен быть поднят и работать DRBD;
|
igor@0
|
11 \item Должны быть подготовлены файловые системы доменов Xen.
|
igor@0
|
12 \end{itemize}
|
igor@0
|
13
|
igor@0
|
14 \subsubsection{Копирование файла топологии}
|
igor@0
|
15 Файл топологии должен присутствовать на обеих машинах.
|
igor@0
|
16
|
igor@0
|
17 Не забудьте изменить на втором узле значение переменной \textit{i\_am}.
|
igor@0
|
18 Если вы используете функцию \texttt{gethostname()}
|
igor@0
|
19 для определения собственного имени, обязательно убедитесь
|
igor@0
|
20 что имя соответствует тому, которое указано в
|
igor@0
|
21 переменных \texttt{node1} и \texttt{node2}.
|
igor@0
|
22
|
igor@0
|
23 \subsubsection{Инсталляция ключей SSH}
|
igor@0
|
24 Узлы, входящие в кластер, должны
|
igor@0
|
25 знать друг о друге, видеть друга друга
|
igor@0
|
26 и доверять друг другу.
|
igor@0
|
27
|
igor@0
|
28 Для этого необходимо чтобы:
|
igor@0
|
29
|
igor@0
|
30 \begin{itemize}
|
igor@0
|
31 \item имена узлов (в том виде в каком они указаны в конфигурационном файле топологии) преобразовывались в адреса как на одном узле, так и на втором;
|
igor@0
|
32 \item между узлами существовала связь на IP-уровне (ходил пинг);
|
igor@0
|
33 \item на обеих системах работали SSH-серверы;
|
igor@0
|
34 \item для беспарольной аутентификации на каждом узле были сгенерированы ключи и на противоположный узел была проинсталлирована их открытая часть (или настроение другое средство беспарольной аутентификации).
|
igor@0
|
35 \end{itemize}
|
igor@0
|
36
|
igor@0
|
37 Пример последовательности команд для создания
|
igor@0
|
38 и инсталляции SSH-ключей.
|
igor@0
|
39 \begin{verbatim}
|
igor@0
|
40 %# ssh-keygen -t dsa
|
igor@0
|
41 %# cat ~/.ssh/id_dsa.pub \
|
igor@0
|
42 | ssh mirror \
|
igor@0
|
43 'mkdir ~/.ssh/; cat >> ~/.ssh/authorized_keys; chmod 644 ~/.ssh/authorized_keys'
|
igor@0
|
44 \end{verbatim}
|
igor@0
|
45
|
igor@0
|
46 \subsection{Запуск системы}
|
igor@0
|
47 Будем считать, что наша топология называется
|
igor@0
|
48 \textit{topology}.
|
igor@0
|
49 Необходимо чтобы файл с названием \texttt{topology.py}
|
igor@0
|
50 присутствовал в каталоге \texttt{/etc/xen/}
|
igor@0
|
51 на обоих узлах кластера.
|
igor@0
|
52
|
igor@0
|
53 Сейчас имя текущей топологии указывается прямо в теле скрипта
|
igor@0
|
54 \texttt{xen-drbd.py}. Укажите там имя вашей топологии.
|
igor@0
|
55 (Название топологии в будущих топологиях будет настраиваемым без правки кода.)
|
igor@0
|
56
|
igor@0
|
57 \subsubsection{Создание ссылок}
|
igor@0
|
58 Создание ссылок в каталоге \texttt{/dev/drbd}.
|
igor@0
|
59
|
igor@0
|
60 Посмотреть, какие ссылки будут создаваться:
|
igor@0
|
61
|
igor@0
|
62 \begin{verbatim}
|
igor@0
|
63 %# xen-drbd-install topology make-links
|
igor@0
|
64 \end{verbatim}
|
igor@0
|
65
|
igor@0
|
66 Создать ссылки:
|
igor@0
|
67
|
igor@0
|
68 \begin{verbatim}
|
igor@0
|
69 %# xen-drbd-install topology make-links | sh -s
|
igor@0
|
70 \end{verbatim}
|
igor@0
|
71
|
igor@0
|
72 Эта операция выполняется скриптом
|
igor@0
|
73 \texttt{/etc/init.d/xen-drbd}.
|
igor@0
|
74
|
igor@0
|
75 \subsubsection{Создание виртуальных мостов и настройка сети}
|
igor@0
|
76 Посмотреть, какие мосты будут создаваться и как:
|
igor@0
|
77
|
igor@0
|
78 \begin{verbatim}
|
igor@0
|
79 %# xen-drbd-install topology make-bridges
|
igor@0
|
80 \end{verbatim}
|
igor@0
|
81
|
igor@0
|
82 Если вы используете привязку мостов к реальным
|
igor@0
|
83 интерфейсам, то будьте осторожны при создании реальной конфигурации,
|
igor@0
|
84 потому что вы можете потерять связь с системой.
|
igor@0
|
85
|
igor@0
|
86 Создать мосты:
|
igor@0
|
87
|
igor@0
|
88 \begin{verbatim}
|
igor@0
|
89 %# xen-drbd-install topology make-bridges | sh -s
|
igor@0
|
90 \end{verbatim}
|
igor@0
|
91
|
igor@0
|
92 Эта операция выполняется скриптом
|
igor@0
|
93 \texttt{/etc/xen/scripts/network-xen-drbd}.
|
igor@0
|
94
|
igor@0
|
95 Эти операции должны быть добавлены в загрузку.
|
igor@0
|
96
|
igor@0
|
97 \subsection{xen-drbd}
|
igor@0
|
98 В выполнении операции всегда принимают
|
igor@0
|
99 участие два узла.
|
igor@0
|
100 При старте домена проверяется,
|
igor@0
|
101 работает ли этот домен на втором узле.
|
igor@0
|
102 Если работает, старт не выполняется.
|
igor@0
|
103
|
igor@0
|
104 Терминология:
|
igor@0
|
105 \begin{itemize}
|
igor@0
|
106 \item \textit{этот узел} — узел на котором выполняется запуск команды
|
igor@0
|
107 \item \textit{второй узел} — второй узел в связке, противоположный тому, на котором был сделан запуск
|
igor@0
|
108 \item \textit{домены, закреплённые за узлом} — домены, которые по умолчанию должны запускаться на этом узле. Распределение доменов по узлам определяется переменной \textit{domain\_home} файла описания топологии
|
igor@0
|
109 \end{itemize}
|
igor@0
|
110
|
igor@0
|
111 Запуск доменов:
|
igor@0
|
112
|
igor@0
|
113 \begin{itemize}
|
igor@0
|
114 \item \textbf{start} \textit{domain} — запустить домен \textit{domain};
|
igor@0
|
115 \item \textbf{start-all} — запустить все домены на этом узле (за исключением тех, которые уже работают);
|
igor@0
|
116 \item \textbf{start-my-domains} — запустить на этом узле только его домены (в отличие от подкоманды \textit{start-all}, домены закреплённые за вторым узлом не запускаются).
|
igor@0
|
117 \end{itemize}
|
igor@0
|
118
|
igor@0
|
119 Миграция доменов:
|
igor@0
|
120
|
igor@0
|
121 \begin{itemize}
|
igor@0
|
122 \item \textbf{migrate-out} \textit{domain} — выполнить миграцию домена \textit{domain} на второй узел;
|
igor@0
|
123 \item \textbf{migrate-in} \textit{domain} — выполнить миграцию домена \textit{domain} на этот узел со второго узла;
|
igor@0
|
124 \item \textbf{migrate-all-out} — выполнить миграцию всех доменов \textit{на второй узел};
|
igor@0
|
125 \item \textbf{migrate-all-in} — выполнить миграцию всех доменов \textit{на этот узел} со второго узла;
|
igor@0
|
126 \item \textbf{migrate-my-domains-home} — выполнить миграцию \textit{всех доменов, закреплённых за этим узлом,} со второго узла на текущий узел;
|
igor@0
|
127 \item \textbf{migrate-and-start-my-domains} — выполнить миграцию всех доменов, закреплённых за этим узлом, со второго узла на текущий узел, и \textit{запустить недостающие} (только на этом узле, на втором запуск не выполняется);
|
igor@0
|
128 \item \textbf{migrate-and-start-all} — выполнить миграцию всех доменов по свои местам и запустить недостающие домены на своих местах (операция выполняется одинаково с обоими узлами; на каком из узлов она была вызвана, определяет только порядок старта — сначала домены запускаются на узле, на котором была вызвана команда).
|
igor@0
|
129 \end{itemize}
|
igor@0
|
130
|
igor@0
|
131 \subsection{Стартовые скрипты xen-drbd}
|
igor@0
|
132 Выше мы вручную делали подготовительные операции: создание ссылок и создание мостов.
|
igor@0
|
133 Эти операции должны выполняться каждый раз при загрузке системы.
|
igor@0
|
134
|
igor@0
|
135 Также при старте системы должны запускаться домены.
|
igor@0
|
136 А при останове — мигрировать на другой узел кластера или останавлииваться.
|
igor@0
|
137
|
igor@0
|
138 Эти операции выполняются с помощью специальных стартовых скриптов:
|
igor@0
|
139
|
igor@0
|
140 \begin{itemize}
|
igor@0
|
141 \item \texttt{/etc/init.d/xen-drbd} — стартовый скрипт xen-drbd, выполняющий подготовку системы и запуск/миграцию недостающих доменов
|
igor@0
|
142 \item \texttt{/etc/xen/scripts/network-xen-drbd} — стартовый скрипт, выполняющий создание и настройку сетевых мостов
|
igor@0
|
143 \end{itemize}
|
igor@0
|
144
|
igor@0
|
145 \subsubsection{Настройка сети при запуске}
|
igor@0
|
146 Настройку сети xen-drbd можно вызывать из файла
|
igor@0
|
147 \texttt{/etc/network/interfaces}:
|
igor@0
|
148
|
igor@0
|
149 \begin{verbatim}
|
igor@0
|
150 # The primary network interface
|
igor@0
|
151 iface eth0 inet manual
|
igor@0
|
152 up /etc/xen/scripts/network-xen-drbd start
|
igor@0
|
153 \end{verbatim}
|
igor@0
|
154
|
igor@0
|
155 \subsubsection{Вызов xen-drbd при загрузке}
|
igor@0
|
156 Стартовые скрипты создаются автоматически при инсталляции.
|
igor@0
|
157
|
igor@0
|
158 Для загрузки скрипты просто включаются в
|
igor@0
|
159 иерархию rc.d.
|
igor@0
|
160 Для дистрибутива Debian GNU/Linux:
|
igor@0
|
161
|
igor@0
|
162 \begin{verbatim}
|
igor@0
|
163 %# update-rc.d xend stop 95 0 1 6 . start 05 2 3 4 5 .
|
igor@0
|
164 \end{verbatim}
|
igor@0
|
165
|
igor@0
|
166 Конфигурация скрипта \texttt{/etc/init.d/xen-drbd}
|
igor@0
|
167 находится в файле \texttt{/etc/default/xen-drbd}.
|
igor@0
|
168
|
igor@0
|
169 \subsubsection{Конфигурационные файлы стартовых скриптов}
|
igor@0
|
170 Конфигурация стартовых скриптов находится в файле:
|
igor@0
|
171 \begin{verbatim}
|
igor@0
|
172 /etc/default/xen-drbd
|
igor@0
|
173 \end{verbatim}
|
igor@0
|
174
|
igor@0
|
175 Пример файла:
|
igor@0
|
176
|
igor@0
|
177 \begin{verbatim}
|
igor@0
|
178 XEN_DRBD_PATH='/usr/local/sbin'
|
igor@0
|
179 TOPOLOGY_NAME='topology'
|
igor@0
|
180 START_ACTION=nothing
|
igor@0
|
181 STOP_ACTION=nothing
|
igor@0
|
182 \end{verbatim}
|
igor@0
|
183
|
igor@0
|
184 Назначение переменных:
|
igor@0
|
185 \begin{itemize}
|
igor@0
|
186 \item \textit{XEN\_DRBD\_PATH} — путь к каталогу, куда установлен xen-drbd;
|
igor@0
|
187 \item \textit{TOPOLOGY\_NAME} — имя топологии;
|
igor@0
|
188 \item \textit{START\_ACTION} — действие xen-drbd, которое нужно выполнять при старте системы;
|
igor@0
|
189 \item \textit{STOP\_ACTION} — действий xen-drbd, которое нужно выполнять при останове системы.
|
igor@0
|
190 \end{itemize}
|
igor@0
|
191
|
igor@0
|
192 В качестве действи \textit{START\_ACTION} и \textit{STOP\_ACTION} указываются подкоманды \textit{xen-drbd}.
|
igor@0
|
193 Например:
|
igor@0
|
194
|
igor@0
|
195 \begin{verbatim}
|
igor@0
|
196 START_ACTION=migrate-and-start-all
|
igor@0
|
197 STOP_ACTION=migrate-all-out
|
igor@0
|
198 \end{verbatim}
|
igor@0
|
199
|
igor@0
|
200 В этом случае при остановке узла домены
|
igor@0
|
201 мигрируют на второй узел, а при запуске узла
|
igor@0
|
202 домены возвращаются на место — на тот узел,
|
igor@0
|
203 за которым они закреплены.
|
igor@0
|
204 Если какого-то домена после миграции нет
|
igor@0
|
205 (например, он был потушен на втором узле),
|
igor@0
|
206 то он стартует заново.
|
igor@0
|
207
|
igor@0
|
208 Таким образом, когда старт узла завершится,
|
igor@0
|
209 на обоих узлах в совокупности должны работать все домены.
|
igor@0
|
210
|
igor@0
|
211 \subsection{Нестандартные ситуации}
|
igor@0
|
212 \subsubsection{Потеряна связь между узлами}
|
igor@0
|
213 Если в момент запуска домена второй узел
|
igor@0
|
214 не виден, домен стартовать не будет.
|
igor@0
|
215
|
igor@0
|
216 Сейчас сообщение об ошибке выглядит так:
|
igor@0
|
217
|
igor@0
|
218 \begin{verbatim}
|
igor@0
|
219 # xen-drbd.py start samba
|
igor@0
|
220 Traceback (most recent call last):
|
igor@0
|
221 File "/usr/local/sbin/xen-drbd.py", line 245, in ?
|
igor@0
|
222 start_domain(domain)
|
igor@0
|
223 File "/usr/local/sbin/xen-drbd.py", line 114, in start_domain
|
igor@0
|
224 if (get_domain_id(domain,he_is) != -1):
|
igor@0
|
225 File "/usr/local/sbin/xen-drbd.py", line 87, in get_domain_id
|
igor@0
|
226 res = int(res)
|
igor@0
|
227 ValueError: invalid literal for int():
|
igor@0
|
228 ssh: connect to host mirror port 22: No route to host
|
igor@0
|
229 \end{verbatim}
|
igor@0
|
230
|
igor@0
|
231
|
igor@0
|
232 \subsection{Дополнительная информация}
|
igor@0
|
233 \begin{itemize}
|
igor@0
|
234 \item \htmladdnormallinkfoot{xen-drbd}{http://xgu.ru/wiki/xen-drbd} (рус.)
|
igor@0
|
235 \end{itemize}
|
igor@0
|
236
|