xg-scale
diff 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 diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/xen-drbd.tex Tue Jul 01 16:16:44 2008 +0300 1.3 @@ -0,0 +1,236 @@ 1.4 +\section{Управление кластером виртуализации с помощью xen-drbd} 1.5 + 1.6 +\subsection{Подготовительные процедуры} 1.7 +\subsubsection{Развёртывание системы с помощью xen-drbd-install} 1.8 +Система должна быть развёрнута вручную, 1.9 +с помощью скрипта xen-drbd-install 1.10 +или каким-то другим способом. 1.11 + 1.12 +\begin{itemize} 1.13 +\item Должен быть поднят и работать DRBD; 1.14 +\item Должны быть подготовлены файловые системы доменов Xen. 1.15 +\end{itemize} 1.16 + 1.17 +\subsubsection{Копирование файла топологии} 1.18 +Файл топологии должен присутствовать на обеих машинах. 1.19 + 1.20 +Не забудьте изменить на втором узле значение переменной \textit{i\_am}. 1.21 +Если вы используете функцию \texttt{gethostname()} 1.22 +для определения собственного имени, обязательно убедитесь 1.23 +что имя соответствует тому, которое указано в 1.24 +переменных \texttt{node1} и \texttt{node2}. 1.25 + 1.26 +\subsubsection{Инсталляция ключей SSH} 1.27 +Узлы, входящие в кластер, должны 1.28 +знать друг о друге, видеть друга друга 1.29 +и доверять друг другу. 1.30 + 1.31 +Для этого необходимо чтобы: 1.32 + 1.33 +\begin{itemize} 1.34 +\item имена узлов (в том виде в каком они указаны в конфигурационном файле топологии) преобразовывались в адреса как на одном узле, так и на втором; 1.35 +\item между узлами существовала связь на IP-уровне (ходил пинг); 1.36 +\item на обеих системах работали SSH-серверы; 1.37 +\item для беспарольной аутентификации на каждом узле были сгенерированы ключи и на противоположный узел была проинсталлирована их открытая часть (или настроение другое средство беспарольной аутентификации). 1.38 +\end{itemize} 1.39 + 1.40 +Пример последовательности команд для создания 1.41 +и инсталляции SSH-ключей. 1.42 +\begin{verbatim} 1.43 +%# ssh-keygen -t dsa 1.44 +%# cat ~/.ssh/id_dsa.pub \ 1.45 + | ssh mirror \ 1.46 + 'mkdir ~/.ssh/; cat >> ~/.ssh/authorized_keys; chmod 644 ~/.ssh/authorized_keys' 1.47 +\end{verbatim} 1.48 + 1.49 +\subsection{Запуск системы} 1.50 +Будем считать, что наша топология называется 1.51 +\textit{topology}. 1.52 +Необходимо чтобы файл с названием \texttt{topology.py} 1.53 +присутствовал в каталоге \texttt{/etc/xen/} 1.54 +на обоих узлах кластера. 1.55 + 1.56 +Сейчас имя текущей топологии указывается прямо в теле скрипта 1.57 +\texttt{xen-drbd.py}. Укажите там имя вашей топологии. 1.58 +(Название топологии в будущих топологиях будет настраиваемым без правки кода.) 1.59 + 1.60 +\subsubsection{Создание ссылок} 1.61 +Создание ссылок в каталоге \texttt{/dev/drbd}. 1.62 + 1.63 +Посмотреть, какие ссылки будут создаваться: 1.64 + 1.65 +\begin{verbatim} 1.66 +%# xen-drbd-install topology make-links 1.67 +\end{verbatim} 1.68 + 1.69 +Создать ссылки: 1.70 + 1.71 +\begin{verbatim} 1.72 +%# xen-drbd-install topology make-links | sh -s 1.73 +\end{verbatim} 1.74 + 1.75 +Эта операция выполняется скриптом 1.76 +\texttt{/etc/init.d/xen-drbd}. 1.77 + 1.78 +\subsubsection{Создание виртуальных мостов и настройка сети} 1.79 +Посмотреть, какие мосты будут создаваться и как: 1.80 + 1.81 +\begin{verbatim} 1.82 +%# xen-drbd-install topology make-bridges 1.83 +\end{verbatim} 1.84 + 1.85 +Если вы используете привязку мостов к реальным 1.86 +интерфейсам, то будьте осторожны при создании реальной конфигурации, 1.87 +потому что вы можете потерять связь с системой. 1.88 + 1.89 +Создать мосты: 1.90 + 1.91 +\begin{verbatim} 1.92 +%# xen-drbd-install topology make-bridges | sh -s 1.93 +\end{verbatim} 1.94 + 1.95 +Эта операция выполняется скриптом 1.96 +\texttt{/etc/xen/scripts/network-xen-drbd}. 1.97 + 1.98 +Эти операции должны быть добавлены в загрузку. 1.99 + 1.100 +\subsection{xen-drbd} 1.101 +В выполнении операции всегда принимают 1.102 +участие два узла. 1.103 +При старте домена проверяется, 1.104 +работает ли этот домен на втором узле. 1.105 +Если работает, старт не выполняется. 1.106 + 1.107 +Терминология: 1.108 +\begin{itemize} 1.109 +\item \textit{этот узел} — узел на котором выполняется запуск команды 1.110 +\item \textit{второй узел} — второй узел в связке, противоположный тому, на котором был сделан запуск 1.111 +\item \textit{домены, закреплённые за узлом} — домены, которые по умолчанию должны запускаться на этом узле. Распределение доменов по узлам определяется переменной \textit{domain\_home} файла описания топологии 1.112 +\end{itemize} 1.113 + 1.114 +Запуск доменов: 1.115 + 1.116 +\begin{itemize} 1.117 +\item \textbf{start} \textit{domain} — запустить домен \textit{domain}; 1.118 +\item \textbf{start-all} — запустить все домены на этом узле (за исключением тех, которые уже работают); 1.119 +\item \textbf{start-my-domains} — запустить на этом узле только его домены (в отличие от подкоманды \textit{start-all}, домены закреплённые за вторым узлом не запускаются). 1.120 +\end{itemize} 1.121 + 1.122 +Миграция доменов: 1.123 + 1.124 +\begin{itemize} 1.125 +\item \textbf{migrate-out} \textit{domain} — выполнить миграцию домена \textit{domain} на второй узел; 1.126 +\item \textbf{migrate-in} \textit{domain} — выполнить миграцию домена \textit{domain} на этот узел со второго узла; 1.127 +\item \textbf{migrate-all-out} — выполнить миграцию всех доменов \textit{на второй узел}; 1.128 +\item \textbf{migrate-all-in} — выполнить миграцию всех доменов \textit{на этот узел} со второго узла; 1.129 +\item \textbf{migrate-my-domains-home} — выполнить миграцию \textit{всех доменов, закреплённых за этим узлом,} со второго узла на текущий узел; 1.130 +\item \textbf{migrate-and-start-my-domains} — выполнить миграцию всех доменов, закреплённых за этим узлом, со второго узла на текущий узел, и \textit{запустить недостающие} (только на этом узле, на втором запуск не выполняется); 1.131 +\item \textbf{migrate-and-start-all} — выполнить миграцию всех доменов по свои местам и запустить недостающие домены на своих местах (операция выполняется одинаково с обоими узлами; на каком из узлов она была вызвана, определяет только порядок старта — сначала домены запускаются на узле, на котором была вызвана команда). 1.132 +\end{itemize} 1.133 + 1.134 +\subsection{Стартовые скрипты xen-drbd} 1.135 +Выше мы вручную делали подготовительные операции: создание ссылок и создание мостов. 1.136 +Эти операции должны выполняться каждый раз при загрузке системы. 1.137 + 1.138 +Также при старте системы должны запускаться домены. 1.139 +А при останове — мигрировать на другой узел кластера или останавлииваться. 1.140 + 1.141 +Эти операции выполняются с помощью специальных стартовых скриптов: 1.142 + 1.143 +\begin{itemize} 1.144 +\item \texttt{/etc/init.d/xen-drbd} — стартовый скрипт xen-drbd, выполняющий подготовку системы и запуск/миграцию недостающих доменов 1.145 +\item \texttt{/etc/xen/scripts/network-xen-drbd} — стартовый скрипт, выполняющий создание и настройку сетевых мостов 1.146 +\end{itemize} 1.147 + 1.148 +\subsubsection{Настройка сети при запуске} 1.149 +Настройку сети xen-drbd можно вызывать из файла 1.150 +\texttt{/etc/network/interfaces}: 1.151 + 1.152 +\begin{verbatim} 1.153 +# The primary network interface 1.154 +iface eth0 inet manual 1.155 + up /etc/xen/scripts/network-xen-drbd start 1.156 +\end{verbatim} 1.157 + 1.158 +\subsubsection{Вызов xen-drbd при загрузке} 1.159 +Стартовые скрипты создаются автоматически при инсталляции. 1.160 + 1.161 +Для загрузки скрипты просто включаются в 1.162 +иерархию rc.d. 1.163 +Для дистрибутива Debian GNU/Linux: 1.164 + 1.165 +\begin{verbatim} 1.166 +%# update-rc.d xend stop 95 0 1 6 . start 05 2 3 4 5 . 1.167 +\end{verbatim} 1.168 + 1.169 +Конфигурация скрипта \texttt{/etc/init.d/xen-drbd} 1.170 +находится в файле \texttt{/etc/default/xen-drbd}. 1.171 + 1.172 +\subsubsection{Конфигурационные файлы стартовых скриптов} 1.173 +Конфигурация стартовых скриптов находится в файле: 1.174 +\begin{verbatim} 1.175 + /etc/default/xen-drbd 1.176 +\end{verbatim} 1.177 + 1.178 +Пример файла: 1.179 + 1.180 +\begin{verbatim} 1.181 +XEN_DRBD_PATH='/usr/local/sbin' 1.182 +TOPOLOGY_NAME='topology' 1.183 +START_ACTION=nothing 1.184 +STOP_ACTION=nothing 1.185 +\end{verbatim} 1.186 + 1.187 +Назначение переменных: 1.188 +\begin{itemize} 1.189 +\item \textit{XEN\_DRBD\_PATH} — путь к каталогу, куда установлен xen-drbd; 1.190 +\item \textit{TOPOLOGY\_NAME} — имя топологии; 1.191 +\item \textit{START\_ACTION} — действие xen-drbd, которое нужно выполнять при старте системы; 1.192 +\item \textit{STOP\_ACTION} — действий xen-drbd, которое нужно выполнять при останове системы. 1.193 +\end{itemize} 1.194 + 1.195 +В качестве действи \textit{START\_ACTION} и \textit{STOP\_ACTION} указываются подкоманды \textit{xen-drbd}. 1.196 +Например: 1.197 + 1.198 +\begin{verbatim} 1.199 +START_ACTION=migrate-and-start-all 1.200 +STOP_ACTION=migrate-all-out 1.201 +\end{verbatim} 1.202 + 1.203 +В этом случае при остановке узла домены 1.204 +мигрируют на второй узел, а при запуске узла 1.205 +домены возвращаются на место — на тот узел, 1.206 +за которым они закреплены. 1.207 +Если какого-то домена после миграции нет 1.208 +(например, он был потушен на втором узле), 1.209 +то он стартует заново. 1.210 + 1.211 +Таким образом, когда старт узла завершится, 1.212 +на обоих узлах в совокупности должны работать все домены. 1.213 + 1.214 +\subsection{Нестандартные ситуации} 1.215 +\subsubsection{Потеряна связь между узлами} 1.216 +Если в момент запуска домена второй узел 1.217 +не виден, домен стартовать не будет. 1.218 + 1.219 +Сейчас сообщение об ошибке выглядит так: 1.220 + 1.221 +\begin{verbatim} 1.222 +# xen-drbd.py start samba 1.223 +Traceback (most recent call last): 1.224 + File "/usr/local/sbin/xen-drbd.py", line 245, in ? 1.225 + start_domain(domain) 1.226 + File "/usr/local/sbin/xen-drbd.py", line 114, in start_domain 1.227 + if (get_domain_id(domain,he_is) != -1): 1.228 + File "/usr/local/sbin/xen-drbd.py", line 87, in get_domain_id 1.229 + res = int(res) 1.230 +ValueError: invalid literal for int(): 1.231 + ssh: connect to host mirror port 22: No route to host 1.232 +\end{verbatim} 1.233 + 1.234 + 1.235 +\subsection{Дополнительная информация} 1.236 +\begin{itemize} 1.237 +\item \htmladdnormallinkfoot{xen-drbd}{http://xgu.ru/wiki/xen-drbd} (рус.) 1.238 +\end{itemize} 1.239 +