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 +