xg-scale

annotate xen/export.tex @ 1:6f6e0f706b86

Added tag v0.1 for changeset 4730a0d07d88
author Igor Chubin <igor@chub.in>
date Tue Jul 01 16:28:00 2008 +0300 (2008-07-01)
parents
children 7ad41782e1ad
rev   line source
igor@0 1 \section{Преобразование независимых систем в виртуальные домены Xen}
igor@0 2
igor@0 3 Здесь описывается как выполнять систему, установленную на компьютере,
igor@0 4 внутри домена Xen или с помощью эмулятора QEMU, исполняющегося на другом компьютере.
igor@0 5 Может быть полезно при консолидации и виртуализации систем,
igor@0 6 при работе с устаревшими системами, при тестировании.
igor@0 7
igor@0 8 \subsection{Идея}
igor@0 9 В связи с постоянным увеличением вычислительной мощности и объёма оперативной памяти машин, наблюдающимся в настоящее время, большую популярность приобретает идея виртуализации систем. В особенности популярным этот подход становится
igor@0 10 при построении серверной инфраструктуры.
igor@0 11
igor@0 12 Виртуализированная серверная инфраструктура редко строится с нуля. Чаще всего существует парк физических (не виртуализированных) серверов, которые безостановочно работают, выполняя возложенные на них задачи.
igor@0 13 Нередко для хранения информации (операционной системы, программного обеспечения и данных) эти серверы используют не внешние хранилища, а собственные жётские
igor@0 14 диски.
igor@0 15
igor@0 16 Виртуализация сервера в данном случае может быть выполнена одним из указанных способов:
igor@0 17 \begin{enumerate}
igor@0 18 \item \textit{Миграция служб.} В виртуальной системе новый сервер разворачивается с нуля. Затем на него переносятся службы старого сервера. После чего старый сервер выводится из эксплуатации.
igor@0 19 \item \textit{Миграция операционной системы.} Старый сервер останавливается, а затем на нём по сети (с компакт-диска или другого внешнего носителя информации) запускается другая операционная система, которая экспортирует установленный в сервере жёсткий диск системе виртуализации. Система виртуализации исполняет операционную систему, проинсталированную на этом диске. При условии, что виртуализация удалась, данные переносятся на хранилище системы виртуализации и старый сервер выключается.
igor@0 20 \end{enumerate}
igor@0 21
igor@0 22 Последний способ проще и быстрее, но он должен допускать возможность
igor@0 23 временной, непродолжительной остановки сервера (на время запуска другой операционной системы, экспорта, запуска виртуальной машины поверх экспортированных данных).
igor@0 24 В случае правильного выполнения всех операций простой в этом случае составит до 10 минут.
igor@0 25
igor@0 26 Обратите внимание что данные, расположенные на жёстком диске,
igor@0 27 при загрузке новой операционной системы, выполнящей экспорт,
igor@0 28 никак не используются. Загрузка выполняется по сети, с компакт-диска или другого внешнего носителя. Диск экспортируется для доступа к нему системы виртуализации. Изменения на диске может делать только сама операционная система, установленная на этом же диске, после того как она запущена в виртуальном домене.
igor@0 29
igor@0 30 Ниже детально рассматривается процесс миграции,
igor@0 31 выполненный по второму сценарию.
igor@0 32
igor@0 33 \subsection{Постановка задачи}
igor@0 34 Пусть есть две системы:
igor@0 35 \begin{itemize}
igor@0 36 \item \textit{Старая система} (old) --- система, которая должна быть экспортирована.
igor@0 37 \item \textit{Xen-система} (xen) --- система, внутри которой должен исполняться домен под управлением экспортированной системы.
igor@0 38 \end{itemize}
igor@0 39
igor@0 40 Необходимо создать новую виртуальную машину,
igor@0 41 которая будет использовать в качестве жёсткого диска жёсткий диск удалённого хоста, экспортированный для доступа по сети с помощью протоколов сетевого доступа к дисковым хранилищам.
igor@0 42
igor@0 43 \subsection{Запуск второй операционной системы в домене Xen установленной на том же компьютере}
igor@0 44 Рассмотрим для начала простейший случай, когда на одном компьютере
igor@0 45 установлено две операционные системы.
igor@0 46 Он отличается от интересующей нас задачии тем, что не нужно
igor@0 47 выполнять экспорт диска как сетевого устройства.
igor@0 48
igor@0 49 Если на компьютере установлены две операционные системы,
igor@0 50 и одна из них это Xenolinux (Xen + Linux),
igor@0 51 то вторую можно запустить как пользовательский домен Xen.
igor@0 52
igor@0 53 Запуск систем, не подготовленных для использования в паравиртуальном домене Xen,
igor@0 54 внутри Xen возможен только в том случае, если центральный процессор системы поддерживает аппаратную виртуализацию.
igor@0 55 В противном случае вместо Xen можно использовать QEMU.
igor@0 56
igor@0 57 Операционная система, загруженная в родном режиме:
igor@0 58
igor@0 59 \begin{center} \resizebox{10cm}{!}{\includegraphics[width=12cm]{/var/lib/mediawiki/images/2/29/Win2003_native.JPG}}\\ \textit{}\end{center}
igor@0 60
igor@0 61 Конфигурационный файл домена Xen:
igor@0 62
igor@0 63 \begin{verbatim}
igor@0 64 %$ egrep -v '^#|^\ *$' /etc/xen/win2003
igor@0 65 kernel = "hvmloader"
igor@0 66 builder='hvm'
igor@0 67 memory = 512
igor@0 68 shadow_memory = 8
igor@0 69 name = "win2003"
igor@0 70 acpi=1
igor@0 71 vif = [ 'type=ioemu, bridge=br0' ]
igor@0 72 disk = ['phy:/dev/hda,hda,w' ]
igor@0 73 device_model = 'qemu-dm'
igor@0 74 boot="c"
igor@0 75 sdl=0
igor@0 76 vnc=1
igor@0 77 vnclisten="127.0.0.1"
igor@0 78 stdvga=0
igor@0 79 serial='pty'
igor@0 80 soundhw='sb16'
igor@0 81 \end{verbatim}
igor@0 82
igor@0 83 В данном случае операционная система Windows установлена
igor@0 84 на жёсткий диск IDE, подключенный в системе в режиме Primary Master
igor@0 85 (блочное устройство \texttt{/dev/hda}).
igor@0 86
igor@0 87 Старт домена выполняется стандартным образом:
igor@0 88
igor@0 89 \begin{verbatim}
igor@0 90 %# xm create win2003
igor@0 91 %# vncviewer 127.0.0.1:0
igor@0 92 \end{verbatim}
igor@0 93
igor@0 94 Здесь вместо 0 может быть указан другой номер, в зависимости от номера
igor@0 95 VNC-сеанса, который будет соответствовать заданному домену Xen.
igor@0 96 Подробнее см. руководство пользователя Xen.
igor@0 97
igor@0 98 Домен Xen, загруженный с жёсткого диска:
igor@0 99
igor@0 100 \begin{itemize}
igor@0 101 \item Процессор AMD 3000+
igor@0 102 \item 512 Mb ОЗУ
igor@0 103 \end{itemize}
igor@0 104
igor@0 105 \begin{figure}
igor@0 106 \includegraphics[width=12cm]{/var/lib/mediawiki/images/b/bc/W2003_xen.png}
igor@0 107 \end{figure}
igor@0 108
igor@0 109 На домен, в котором работает установленная операционная система
igor@0 110 распространяются все те же законы, которые распространяются на систему, которая установлена в домен с нуля
igor@0 111 традиционным способом.
igor@0 112
igor@0 113 \subsection{Запуск домена с экспортированного образа}
igor@0 114 Если операционная система установлена не локально,
igor@0 115 а на другом компьютере, необходимо каким-то образом его донести системе виртуализации, так что бы, грубо говоря, виртуальный домен увидел диск.
igor@0 116
igor@0 117 Процедура включает три шага:
igor@0 118 \begin{enumerate}
igor@0 119 \item Выполнить бездисковую загрузку старой системы \textit{old} под управлением Linux;
igor@0 120 \item Выполнить экспорт диска загруженной системы \textit{old} с помощью AoE или iSCSI;
igor@0 121 \item На работающей Xen-системе \textit{xen} запустить домен, который будет использовать экспортированный старой машиной.
igor@0 122 \end{enumerate}
igor@0 123
igor@0 124 \subsubsection{Подготовка сервера бездисковой загрузки}
igor@0 125 Детально процедура подготовки сервера бездисковой загрузки
igor@0 126 описана на странице \htmladdnormallinkfoot{PXE}{http://xgu.ru/wiki/PXE}.
igor@0 127 Ниже приводятся только примеры конфигурационных
igor@0 128 файлов ключевых систем, использующихся в работе.
igor@0 129
igor@0 130 \paragraph{DHCP}
igor@0 131 Конфигурация демона dhcpd в файле \textbf{/etc/default/dhcp}:
igor@0 132
igor@0 133 \begin{verbatim}
igor@0 134 %$ egrep -v '^#|^\ *$' /etc/default/dhcp
igor@0 135 INTERFACES="br0"
igor@0 136 \end{verbatim}
igor@0 137
igor@0 138 Сам конфигурационный файл \textbf{/etc/dhcpd.conf}:
igor@0 139
igor@0 140 \begin{verbatim}
igor@0 141 %$ egrep -v '^#|^\ *$' /etc/dhcpd.conf
igor@0 142 option domain-name "clinika.com";
igor@0 143 option domain-name-servers 192.168.15.254;
igor@0 144 option subnet-mask 255.255.255.0;
igor@0 145 default-lease-time 600;
igor@0 146 max-lease-time 7200;
igor@0 147 subnet 192.168.7.0 netmask 255.255.255.0 {
igor@0 148 range 192.168.7.200 192.168.7.220;
igor@0 149 option routers 192.168.7.254;
igor@0 150 filename "pxelinux.0";
igor@0 151 }
igor@0 152 host clinika {
igor@0 153 hardware ethernet 00:13:8f:49:b0:31;
igor@0 154 fixed-address 192.168.7.253;
igor@0 155 }
igor@0 156 \end{verbatim}
igor@0 157
igor@0 158 \paragraph{TFTP}
igor@0 159
igor@0 160 \begin{verbatim}
igor@0 161 %$ egrep -v '^#|^\ *$' /etc/default/tftpd-hpa
igor@0 162 RUN_DAEMON="yes"
igor@0 163 OPTIONS="-l -s /var/lib/tftpboot/ltsp/i386/"
igor@0 164 \end{verbatim}
igor@0 165
igor@0 166 \paragraph{PXE}
igor@0 167 Наполнение каталога TFTP-сервера.
igor@0 168 Здесь присутствуют файлы загрузчика PXELINUX.
igor@0 169
igor@0 170 \begin{verbatim}
igor@0 171 %$ ls -l /var/lib/tftpboot/ltsp/i386/
igor@0 172 итого 10690
igor@0 173 -rw-r--r-- 1 root root 203 2007-10-04 boot.msg
igor@0 174 -rw-r--r-- 1 root root 80023 2007-07-11 config-2.6.21-2-486
igor@0 175 lrwxrwxrwx 1 root root 23 2007-10-04 initrd.img -> initrd.img-2.6.21-2-486
igor@0 176 -rw-r--r-- 1 root root 3691052 2007-10-04 initrd.img-2.6.21-2-486
igor@0 177 -rw-r--r-- 1 root root 9519 2007-10-04 logo.16_1
igor@0 178 lrwxrwxrwx 1 root root 20 2007-10-04 nbi.img -> nbi.img-2.6.21-2-486
igor@0 179 -rw-r--r-- 1 root root 5019136 2007-10-04 nbi.img-2.6.21-2-486
igor@0 180 -rw-r--r-- 1 root root 13944 2007-10-04 pxelinux.0
igor@0 181 drwxr-xr-x 2 root root 104 2007-10-05 pxelinux.cfg
igor@0 182 -rw-r--r-- 1 root root 780664 2007-07-11 System.map-2.6.21-2-486
igor@0 183 lrwxrwxrwx 1 root root 20 2007-10-04 vmlinuz -> vmlinuz-2.6.21-2-486
igor@0 184 -rw-r--r-- 1 root root 1319152 2007-07-11 vmlinuz-2.6.21-2-486
igor@0 185 \end{verbatim}
igor@0 186
igor@0 187 Конфигурационный файл загрузчика PXELINUX:
igor@0 188
igor@0 189 \begin{verbatim}
igor@0 190 clint:Dom0~$ cat /var/lib/tftpboot/ltsp/i386/pxelinux.cfg/default
igor@0 191 DISPLAY boot.msg
igor@0 192 TIMEOUT 150
igor@0 193 DEFAULT vmlinuz
igor@0 194 PROMPT 1
igor@0 195
igor@0 196 LABEL 2.6.21.2
igor@0 197 KERNEL vmlinuz
igor@0 198 APPEND nfsdir=192.168.7.254:/opt/ltsp/i386 lang=ru ramdisk_size=1000000
igor@0 199 root=/dev/nfs rw nfsroot=192.168.7.254:/opt/ltsp/i386/ ip=dhcp initrd=initrd.img
igor@0 200 \end{verbatim}
igor@0 201
igor@0 202 \paragraph{Корневая файловая система, загружаемая по сети}
igor@0 203 В каталоге \texttt{/opt/ltsp/i386/}
igor@0 204 развёрнута операционная система Linux.
igor@0 205 Инсталляция выполняется с помощью \textit{debootstrap}
igor@0 206 или аналогичным способом.
igor@0 207
igor@0 208 В системе должны быть установлены пакеты:
igor@0 209 \begin{itemize}
igor@0 210 \item vblade
igor@0 211 \end{itemize}
igor@0 212
igor@0 213 \subsubsection{Экспорт диска старой машины по сети}
igor@0 214 Сервер, который будет экспортирован,
igor@0 215 перезагружается и загружается
igor@0 216 по сети.
igor@0 217
igor@0 218 После этого необходимо выполнить следующие действия.
igor@0 219
igor@0 220 Будем считать, что экспорт выполняется с помощью протокола
igor@0 221 ATA over Ethernet.
igor@0 222 Можно использовать другой протокол доступа к диску по сети.
igor@0 223
igor@0 224 Убедитесь, что загружен модуль \textbf{aoe}:
igor@0 225
igor@0 226 \begin{verbatim}
igor@0 227 ltsp:~# lsmod | grep aoe
igor@0 228 aoe 24416 0
igor@0 229 \end{verbatim}
igor@0 230
igor@0 231 Экспортируйте диск \texttt{/dev/hda} (или другой -- тот, на котором установлена система) с помощью \textbf{vblade}:
igor@0 232
igor@0 233 \begin{verbatim}
igor@0 234 ltsp:~# vblade 1 0 eth0 /dev/hda
igor@0 235 pid 3344: e1.0, 78165360 sectors O_RDWR
igor@0 236 \end{verbatim}
igor@0 237
igor@0 238 \subsubsection{Запуск домена с экспортированного образа}
igor@0 239 На системе виртуализации
igor@0 240 загрузите модуль \textbf{aoe}:
igor@0 241
igor@0 242 \begin{verbatim}
igor@0 243 clint:Dom0~$ ls -l /dev/etherd
igor@0 244 ls: /dev/etherd: Heт такого файла или каталога
igor@0 245 %# modprobe aoe
igor@0 246 aoe: aoe_init: AoE v22 initialised.
igor@0 247 aoe: 00138f49b031 e1.0 v400c has 78165360 sectors
igor@0 248 %# sudo lsmod | grep aoe
igor@0 249 aoe 23456 0
igor@0 250 \end{verbatim}
igor@0 251
igor@0 252 При этом
igor@0 253 в \texttt{/var/log/messages}
igor@0 254 должны появиться сообщения:
igor@0 255
igor@0 256 \begin{verbatim}
igor@0 257 ... kernel: aoe: aoe_init: AoE v22 initialised.
igor@0 258 ... kernel: aoe: 00138f49b031 e1.0 v400c has 78165360 sectors
igor@0 259 ... kernel: etherd/e1.0: p2 < p5 p6 p7 p8 p9 > p3
igor@0 260 \end{verbatim}
igor@0 261
igor@0 262 В каталоге \texttt{/dev/etherd}
igor@0 263 должны появиться новые файлы устройств,
igor@0 264 соответствующие обнаруженным дискам
igor@0 265 ATA over Ethernet:
igor@0 266
igor@0 267 \begin{verbatim}
igor@0 268 %# ls -l /dev/etherd/
igor@0 269 итого 0
igor@0 270 c-w--w---- 1 root disk 152, 3 2007-10-05 21:46 discover
igor@0 271 brw-rw---- 1 root disk 152, 256 2007-10-05 21:57 e1.0
igor@0 272 brw-rw---- 1 root disk 152, 258 2007-10-05 21:46 e1.0p2
igor@0 273 brw-rw---- 1 root disk 152, 259 2007-10-05 21:46 e1.0p3
igor@0 274 brw-rw---- 1 root disk 152, 261 2007-10-05 21:46 e1.0p5
igor@0 275 brw-rw---- 1 root disk 152, 262 2007-10-05 21:46 e1.0p6
igor@0 276 brw-rw---- 1 root disk 152, 263 2007-10-05 21:46 e1.0p7
igor@0 277 brw-rw---- 1 root disk 152, 264 2007-10-05 21:46 e1.0p8
igor@0 278 brw-rw---- 1 root disk 152, 265 2007-10-05 21:46 e1.0p9
igor@0 279 cr--r----- 1 root disk 152, 2 2007-10-05 21:46 err
igor@0 280 c-w--w---- 1 root disk 152, 4 2007-10-05 21:46 interfaces
igor@0 281 c-w--w---- 1 root disk 152, 5 2007-10-05 21:46 revalidate
igor@0 282 \end{verbatim}
igor@0 283
igor@0 284 Далее необходимо создать конфигурационный файл
igor@0 285 нового домена Xen
igor@0 286 или модифицровать существующий.
igor@0 287
igor@0 288 \begin{verbatim}
igor@0 289 %$ egrep -v '^#|^\ *$' /etc/xen/win2k
igor@0 290 kernel = "hvmloader"
igor@0 291 builder='hvm'
igor@0 292 memory = 512
igor@0 293 shadow_memory = 8
igor@0 294 name = "win2k"
igor@0 295 acpi=1
igor@0 296 vif = [ 'type=ioemu, bridge=br0' ]
igor@0 297 disk = ['phy:/dev/etherd/e1.0,hda,w' ]
igor@0 298 device_model = 'qemu-dm'
igor@0 299 boot="c"
igor@0 300 sdl=0
igor@0 301 vnc=1
igor@0 302 vnclisten="127.0.0.1"
igor@0 303 stdvga=0
igor@0 304 serial='pty'
igor@0 305 soundhw='sb16'
igor@0 306 \end{verbatim}
igor@0 307
igor@0 308 После чего запустить домен:
igor@0 309
igor@0 310 \begin{verbatim}
igor@0 311 %@ xm create win2k
igor@0 312 \end{verbatim}
igor@0 313
igor@0 314 \subsubsection{Результат запуска}
igor@0 315 Старая машина, загруженная самостоятельно.
igor@0 316 \begin{itemize}
igor@0 317 \item Процессор Sempron 2600
igor@0 318 \item 457968KB ОЗУ
igor@0 319 \end{itemize}
igor@0 320 \begin{center} \resizebox{10cm}{!}{\includegraphics[width=12cm]{/var/lib/mediawiki/images/b/b9/W2k.jpg}}\\ \textit{}\end{center}
igor@0 321
igor@0 322 Домен Xen, загруженный удалённо
igor@0 323 с жёсткого диска старой системы:
igor@0 324 \begin{itemize}
igor@0 325 \item Процессор AMD 3000+
igor@0 326 \item 523800KB ОЗУ
igor@0 327 \end{itemize}
igor@0 328 \begin{center} \resizebox{10cm}{!}{\includegraphics[width=12cm]{/var/lib/mediawiki/images/c/cd/W2k_2.png}}\\ \textit{}\end{center}
igor@0 329
igor@0 330 Другие изображения:
igor@0 331
igor@0 332 \begin{center} \resizebox{10cm}{!}{\includegraphics[width=12cm]{/var/lib/mediawiki/images/f/f9/W2k_0.png}}\\ \textit{}\end{center}
igor@0 333 \begin{center} \resizebox{10cm}{!}{\includegraphics[width=12cm]{/var/lib/mediawiki/images/7/75/W2k_1.png}}\\ \textit{}\end{center}
igor@0 334
igor@0 335 Мы бы не смогли подключиться к этой системе удалённо
igor@0 336 в момент запуска, поскольку сетевая подсистема ещё не работает.
igor@0 337 Такие изображения можно сделать только при запуске машины
igor@0 338 в виртуальной системе или в эмуляторе.
igor@0 339
igor@0 340 \subsubsection{Перенесение образа старой машины}
igor@0 341 Если старый сервер должен быть выведен
igor@0 342 из эксплуатации, необходимо скопировать
igor@0 343 данные на новое место.
igor@0 344
igor@0 345 Домен соответствующий виртуализируемому серверу должен быть потушен в момент копирования!
igor@0 346
igor@0 347 Например, если перенос выполняется на том LVM:
igor@0 348
igor@0 349 \begin{verbatim}
igor@0 350 %# lvcreate -L 20G -n server2003 /dev/XEN
igor@0 351 %# dd if=/dev/etherd/e1.0 of=/dev/XEN/server2003
igor@0 352 %# sed -i -e s@/dev/etherd/e1.0@/dev/XEN/server2003@ /etc/xen/win2003
igor@0 353 \end{verbatim}
igor@0 354
igor@0 355
igor@0 356 \subsection{Дополнительная информация}
igor@0 357 \begin{itemize}
igor@0 358 \item \htmladdnormallinkfoot{Экспорт установленной системы в домен Xen}{http://xgu.ru/wiki/xen/export} (рус.)
igor@0 359 \end{itemize}