xg-scale

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