xg-scale
diff xen-drbd-install.tex @ 4:253d66dd74bb
Добавлено подробное описание управления памятью домена и выделением устройств домену
author | Igor Chubin <igor@chub.in> |
---|---|
date | Sun Jul 06 23:27:46 2008 +0300 (2008-07-06) |
parents | |
children |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/xen-drbd-install.tex Sun Jul 06 23:27:46 2008 +0300 1.3 @@ -0,0 +1,322 @@ 1.4 +\section{Подготовка кластера виртуализации с помощью xen-drbd-install} 1.5 + 1.6 +\subsection{Использование} 1.7 +\begin{verbatim} 1.8 +Usage: 1.9 + xen-drbd-install <network> <command> (to view) 1.10 + xen-drbd-install <network> <command> | sh -s (to run) 1.11 + 1.12 + <network> is the name of the file, which contains network description 1.13 + 1.14 +Commands: 1.15 + make-drbd 1.16 + make-domains 1.17 + make-bridges 1.18 + make-links 1.19 +\end{verbatim} 1.20 + 1.21 +\begin{itemize} 1.22 +\item \textbf{make-drbd} — подготовка LVM-томов и DRBD-устройств на их основе; 1.23 +\item \textbf{make-domains} — создание файловых систем и их наполнение; 1.24 +\item \textbf{make-bridges} — создание виртуальных мостов в соответствии с топологией сети; 1.25 +\item \textbf{make-links} — создание символических ссылок на файлы блочных устройств DRBD для удобства их использования. 1.26 +\end{itemize} 1.27 + 1.28 +Подкоманда \textit{make-drbd} вызывается при инсталляции на обеих половинах кластера. 1.29 + 1.30 +Подкоманда \textit{make-domains} вызывается при инсталляции только на одной половине кластера. 1.31 + 1.32 +Подкоманды \textit{make-bridges} и \textit{make-links} вызываются каждый раз при загрузке 1.33 +системы. 1.34 + 1.35 +\subsection{Описание топологии} 1.36 +Описание топологии используется как на этапе 1.37 +инсталляции системы, так и при её повседневной работе. 1.38 +Фактически, это единственный конфигурационный файл, 1.39 +описывающий конфигурацию виртуальной системы. 1.40 + 1.41 +Конфигурационный файл имеет синтаксис языка Python. 1.42 +Нужно выполнить присвоение значений 1.43 +определённого типа ряду переменных. 1.44 +Значения могут быть строками, списками или ассоциативными массивами (хэшами). 1.45 + 1.46 +\subsubsection{Основные параметры} 1.47 +\begin{itemize} 1.48 +\item \texttt{node1} — имя узла 1 (строка); 1.49 +\item \texttt{node2} — имя узла 2 (строка); 1.50 +\item \texttt{i\_am} — имя текущего узла; должно быть равно одному из имён \texttt{node1} или \texttt{node2} (строка); 1.51 +\item \texttt{node1\_ip} — IP-адрес узла 1; используется при создании конфигурационного файла DRBD (строка); 1.52 +\item \texttt{node2\_ip} — IP-адрес узла 2 (строка); 1.53 +\item \texttt{domains} — список имён всех доменов (список); 1.54 +\item \texttt{domain\_home} — исходное распределение доменов по узлам (хэш); 1.55 +\item \texttt{kernel} — путь к файлу ядра, которое должно использоваться в гостевых доменах (строка); 1.56 +\item \texttt{ramdisk} — путь к начальному виртуальному диску, который должен использоваться в гостевых доменах (строка); 1.57 +\item \texttt{mem\_table} — распределение оперативной памяти для доменов (хэш); 1.58 +\item \texttt{vcpus\_table} — виртуальные процессоры доменов (хэш); 1.59 +\item \texttt{disk\_table} — дисковые устройства доменов; \textit{подробности ниже} (хэш); 1.60 +\item \texttt{bridges} — виртуальные мосты (список); 1.61 +\item \texttt{vlans} — номера VLAN\rq{}ов, на которые отражаются виртуальные мосты; перечисляются в том порядке, соответствующем порядку мостов (список); 1.62 +\item \texttt{management\_vlan} — управляющий VLAN; через этот VLAN будет осуществляться доступ к узлам (строка); 1.63 +\item \texttt{trunk} — какой физический интерфейс используется для соединения с тегированным каналом коммутатора (строка); 1.64 +\item \texttt{management\_ip} — IP, который должен быть установлен на интерфейсе узла в управляющем VLAN\rq{}е (строка); 1.65 +\item \texttt{management\_netmask} — маска этого интерфейса (строка); 1.66 +\item \texttt{management\_gw} — шлюз по умолчанию для узла (строка); 1.67 +\item \texttt{vbridges\_table} — сетевая конфигурацию доменов; \textit{поробности ниже} (хэш). 1.68 +\end{itemize} 1.69 + 1.70 +Принцип описания всех параметром интуитивно понятен, 1.71 +за исключением двух, требующих некоторых пояснений. 1.72 + 1.73 +\paragraph{Параметр disk\_table} 1.74 +Переменная \texttt{disk\_table} должна содержать ассоциативный массив, 1.75 +где в качестве ключей используются названия доменов, 1.76 +а в качестве их значений — списки. Каждый список описывает 1.77 +какие дисковые устройства принадлежат домену. 1.78 +\begin{verbatim} 1.79 + ['drbd8:mail:2G', 'drbd9:maildir:100G'] 1.80 +\end{verbatim} 1.81 +Описание каждого виртуального дискового устройства состоит 1.82 +из трёх элементов: 1.83 +\begin{enumerate} 1.84 +\item Имени блочного файла базового DRBD-устройства; 1.85 +\item Имени дискового устройства (в частности, это имя используется как название логического тома LVM, поверх которого создаётся DRBD-устройство); 1.86 +\item Размера тома при его создании (впоследствии размер тома можно изменить, но не через конфигурационный файл и вообще без помощи xen-drbd). 1.87 +\end{enumerate} 1.88 +Значение размера используется только на этапе генерации системы. 1.89 +Впослесдствии это поле может принимать любые значения — оно игнорируется. 1.90 + 1.91 +\paragraph{Параметр vbridges\_table} 1.92 + 1.93 +Переменная \texttt{vbridges\_table} должна содержать ассоциативный массив, 1.94 +где в качестве ключей используются названия доменов, 1.95 +а в качестве их значений — списки. Каждый список описывает 1.96 +к каким мостам подключаются сетевые интерфейсы домена. 1.97 + 1.98 +Например, этот список: 1.99 +\begin{verbatim} 1.100 + ['xenbr501', 'xenbr256', 'xenbr257'] 1.101 +\end{verbatim} 1.102 +говорит о том, что у домена будет три сетевых интерфейса; 1.103 +интерфейс \textit{eth0} домена должен быть подключён к мосту \textit{xenbr501}, 1.104 +интерфейс \textit{eth1} — к мосту \textit{xenbr256}, 1.105 +а интерфейс \textit{eth2} — к мосту \textit{xenbr257}. 1.106 + 1.107 +\subsubsection{Инсталляционные параметры} 1.108 + 1.109 +В гостевые домены устанавливается операционная система Debian GNU/Linux. 1.110 +Если вы хотите использовать другую систему, 1.111 +вы можете попробовать модифицировать скрипт самостоятельно или связаться с его разработчиками. 1.112 + 1.113 +Эти параметры используются только при генерировании доменов. 1.114 + 1.115 +\begin{itemize} 1.116 +\item \texttt{ip\_address\_table} — IP-адресов, которые будут установлены на интерфейсах eth0 гостевых доменов (хэш); 1.117 +\item \texttt{ip\_network} — сеть на интерфейсе eth0 гостевого домена (строка); 1.118 +\item \texttt{ip\_netmask} — сетевая маска интерфейса eth0 гостевого домена (строка); 1.119 +\item \texttt{ip\_gateway} — основной шлюз для гостевых доменов (строка); 1.120 +\item \texttt{domain\_name} — домен DNS, который указывается в качестве основного для гостевых доменов (строка); 1.121 +\item \texttt{ip\_nameserver} — DNS-сервер, который должен использоваться в качестве основного в гостевых доменах (строка); 1.122 +\item \texttt{debian\_release} — какой дистрибутив Debian GNU/Linux необходимо использовать при подготовке гостевых доменов (строка); 1.123 +\item \texttt{debian\_mirror} — какой репозиторий Debian GNU/Linux должен использоваться для подготовке гостевых доменов (строка); 1.124 +\item \texttt{apt\_get\_install} — какие пакеты должны быть сразу же установлены во всех гостевые домены (строка); 1.125 +\item \texttt{lvm\_vg\_name} — название группы томов, в которой будут создаваться логические тома для Xen (строка); 1.126 +\item \texttt{lvm\_pv\_names} — физические тома, которые должны быть объединены в группу томов (строка); 1.127 +\item \texttt{lvm\_lv\_drbd\_meta\_name} — название тома LVM, который будет использоваться как метадиск для DRBD (строка); 1.128 +\item \texttt{lvm\_lv\_drbd\_meta\_size} — размер тома LVM, который будет использоваться как метадиск DRBD (строка); 1.129 +\item \texttt{mkfs\_options} — опции mkfs, которые необходимо использовать при создании файловых систем (используется файловая система ext3). 1.130 +\end{itemize} 1.131 + 1.132 +\subsection{Пример описания топологии} 1.133 + 1.134 + 1.135 +\begin{verbatim} 1.136 + node1='debian' 1.137 + node2='mirror' 1.138 + #i_am=node1 1.139 + 1.140 + from socket import gethostname; i_am=gethostname() 1.141 + if i_am != node1 and i_am != node2: 1.142 + raise ValueError, "My hostname (%s) should be equal \ 1.143 + to node1 (%s) or node2 (%s)" % (i_am, node1, node2) 1.144 + 1.145 + ip_address = { 1.146 + node1: '10.0.80.220', 1.147 + node2: '10.0.80.221', 1.148 + } 1.149 + 1.150 + node1_ip=ip_address[node1] 1.151 + node2_ip=ip_address[node2] 1.152 + 1.153 + domains=['gw','igw','dns','vpn','apt','pgw','ldap','mail','uucp','samba',] 1.154 + 1.155 + domain_home = { 1.156 + node1 : ['dns','gw','igw','pgw','ldap','mail','vpn','uucp','apt'], 1.157 + node2 : ['samba'], 1.158 + } 1.159 + 1.160 + kernel = "/boot/vmlinuz-2.6.18-4-xen-686" 1.161 + ramdisk = "/boot/initrd.img-2.6.18-4-xen-686-domU" 1.162 + 1.163 + mem_table={ 1.164 + 'dns' :64, 1.165 + 'gw' :64, 1.166 + 'igw' :128, 1.167 + 'pgw' :64, 1.168 + 'ldap' :64, 1.169 + 'mail' :256, 1.170 + 'samba' :512, 1.171 + 'vpn' :192, 1.172 + 'uucp' :128, 1.173 + 'apt' :128, 1.174 + } 1.175 + 1.176 + vcpus_table={ 1.177 + 'dns' :1, 1.178 + 'gw' :1, 1.179 + 'igw' :1, 1.180 + 'pgw' :1, 1.181 + 'ldap' :1, 1.182 + 'mail' :4, 1.183 + 'samba' :4, 1.184 + 'vpn' :4, 1.185 + 'uucp' :4, 1.186 + 'apt' :2, 1.187 + } 1.188 + 1.189 + disk_table={ 1.190 + 'gw' : ['drbd1:gw:2G'], 1.191 + 'igw' : ['drbd2:igw:2G'], 1.192 + 'dns' : ['drbd3:dns:2G'], 1.193 + 'vpn' : ['drbd4:vpn:2G'], 1.194 + 'apt' : ['drbd5:apt:10G'], 1.195 + 'pgw' : ['drbd6:pgw:2G'], 1.196 + 'ldap' : ['drbd7:ldap:2G'], 1.197 + 'mail' : ['drbd8:mail:2G','drbd9:maildir:100G'], 1.198 + 'uucp' : ['drbd11:uucp:3G'], 1.199 + 'samba' : [ 1.200 + 'drbd12:samba:3G', 1.201 + 'drbd13:samba-home:100G', 1.202 + 'drbd17:samba-profiles:100G' 1.203 + ], 1.204 + } 1.205 + 1.206 + bridges=['tagged0','xenbr1','xenbr256','xenbr257','xenbr3','xenbr4','xenbr501'] 1.207 + vlans= ['tagged', 1, 256, 257, 3, 4, 501 ] 1.208 + management_vlan=1 1.209 + trunk='eth0' 1.210 + management_ip=ip_address[i_am] 1.211 + management_gw='10.0.80.253' 1.212 + 1.213 + vbridges_table={ 1.214 + 'dns' : ['xenbr3'], 1.215 + 'gw' : ['xenbr501', 'xenbr256', 'xenbr257'], 1.216 + 'igw' : ['tagged0','xenbr3'], 1.217 + 'pgw' : ['xenbr3','xenbr501'], 1.218 + 'ldap' : ['xenbr3'], 1.219 + 'mail' : ['xenbr3'], 1.220 + 'samba' : ['tagged0', 'xenbr3'], 1.221 + 'vpn' : ['xenbr3'], 1.222 + 'apt' : ['xenbr3'], 1.223 + 'uucp' : ['xenbr3'], 1.224 + } 1.225 + 1.226 + # FOR INSTALLATION ONLY 1.227 + 1.228 + ip_network="10.20.30" 1.229 + ip_netmask="255.255.255.224" 1.230 + domain_name="crimea.example.com" 1.231 + ip_nameserver="10.20.30.4" 1.232 + ip_gateway="10.20.30.6" 1.233 + 1.234 + ip_address_table={ 1.235 + "dns" :"10.20.30.4", 1.236 + "gw" :"10.20.30.254", 1.237 + "igw" :"10.20.30.3", 1.238 + "pgw" :"10.20.30.6", 1.239 + "ldap" :"10.20.30.11", 1.240 + "mail" :"10.20.30.9", 1.241 + "samba" :"10.20.30.1", 1.242 + "vpn" :"10.20.30.5", 1.243 + "apt" :"10.20.30.7", 1.244 + "uucp" :"10.20.30.16", 1.245 + "jabber":"10.20.30.12", 1.246 + 1.247 + } 1.248 + 1.249 + debian_release="lenny" 1.250 + debian_mirror="http://debian.org.ua/debian/" 1.251 + apt_get_install="less tcpdump dnsutils vim ntp screen snmpd libc6-xen openssh-server" 1.252 + 1.253 + lvm_vg_name="TURBO" 1.254 + lvm_pv_names="/dev/md2" 1.255 + lvm_lv_drbd_meta_name="meta" 1.256 + lvm_lv_drbd_meta_size="5G" 1.257 + mkfs_options="-m1" 1.258 +\end{verbatim} 1.259 + 1.260 +\subsection{Пример использования} 1.261 +Создаём файл с описанием топологии: 1.262 +\begin{verbatim} 1.263 + %# vi topology1.py 1.264 +\end{verbatim} 1.265 + 1.266 +Проверяем, что топология была распознана верно: 1.267 +\begin{verbatim} 1.268 + %# make-drbd-install topology1 make-drbd | less 1.269 +\end{verbatim} 1.270 + 1.271 +Если ошибок не обнаружено, 1.272 +выполняем 1.273 +\begin{verbatim} 1.274 + %# make-drbd-install topology1 make-drbd | sh -s 1.275 +\end{verbatim} 1.276 + 1.277 +Аналогичным образом выполняем команду 1.278 +на втором узле кластера: 1.279 +\begin{verbatim} 1.280 + %# make-drbd-install topology1 make-drbd 1.281 +\end{verbatim} 1.282 + 1.283 +В результате на обоих узлах: 1.284 +\begin{enumerate} 1.285 +\item Настраивается система LVM (физические тома, группы томов, логические тома); 1.286 +\item Создаётся конфигурационный файл DRBD; 1.287 +\item Поверх одного из логических томов создаётся мета-диск для DRBD-устройств; 1.288 +\item Поверх логических томов LVM создаются DRBD-устройства. 1.289 +\end{enumerate} 1.290 + 1.291 +\subsubsection{Создание и заполнение файловых систем доменов} 1.292 +Теперь нужно наполнить созданные разделы. 1.293 + 1.294 +Наполнение выполняется только на одном из узлов кластера. 1.295 +Второй получает все данные автоматически с помощью DRBD. 1.296 + 1.297 +Проверьте что генерируется правильный скрипт: 1.298 + 1.299 +\begin{verbatim} 1.300 +%# make-drbd-install topology1 make-domains | less 1.301 +\end{verbatim} 1.302 + 1.303 +Если всё в порядке, можно его выполнить: 1.304 + 1.305 +\begin{verbatim} 1.306 +%# make-drbd-install topology1 make-domains | sh -s 1.307 +\end{verbatim} 1.308 + 1.309 +В результате выполнения будут: 1.310 +\begin{itemize} 1.311 +\item созданы файловые системы доменов; 1.312 +\item файловые системы доменов смонтированы; 1.313 +\item выполнится наполнение файловых систем (с помощью debootstrap); 1.314 +\item конфигурационные файлы внутри файловых систем (\texttt{/etc/fstab}, \texttt{/etc/network} и т.д.) модфицированы в соответствии с заданными в описании топологии значениями; 1.315 +\item файловые системы доменов размонтированы. 1.316 +\end{itemize} 1.317 + 1.318 +Теперь в системе есть LVM-тома отформатированные и наполненные образами виртуальных систем. 1.319 +Тома синхронизируются между узлами с помощью DRBD. 1.320 + 1.321 +\subsection{Дополнительная информация} 1.322 +\begin{itemize} 1.323 +\item \htmladdnormallinkfoot{xen-drbd-install}{http://xgu.ru/wiki/xen-drbd-install} (рус.) 1.324 +\end{itemize} 1.325 +