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 |