xg-scale

annotate 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
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