Вступление
Недавно мне потребовалось перенести несколько сайтов различных клиентов на нормальный выделенный сервер (не виртуальный). Я давно выбирал, где лучше арендовать сервер и выбором стала немецкая компания Hetzner Online и ее тарифный план DS 3000 (AMD Athlon 64 X2 4200+/2Gb DDR/2x160Gb HDD — как выяснилось потом — на сервере оказалось два винчестера по 320Гб).
Но мне не хотелось всех размещать на одном сервере. Поэтому было решено сделать виртуальные машины на базе технологии XEN (к тому же в придачу к серверу на ТП DS 3000 Hetzner Online бесплатно выдает 6 IP-адресов, которые очень удобно будут смотреться для отдельных проектов). В Сети можно найти много информации по теме настройки и самого XEN'а на Debian'e и настройки роутинга на нем, поднятии виртуалок на LVM (lvm дает большее быстродействие, чем виртуалки на базе image-файлов), даже в вики самой фирмы была информация об этом (но на немецком — Google Translate нам в помощь). Но. Было одно «Но». Она вся была разрозненная и кусками. Я нигде не смог найти толкового пошагового руководства для настройки «от» и «до».
Поэтому, всем кому интересна эта тема,
«Сервер с самого начала»
Идем на https://robot.your-server.de/server, выбираем свой сервер и жмем на таб «Rescue», нашим выбором станет «Linux», «64 bit», сохраним пароль, который нам покажут. Потом перейдем к закладке «Reset» и выбираем «Send CTRL+ALT+DEL to the server». Через 2 минуты после этого можно приконнектиться по SSH к нашему серверу по выданному изначально IP-адресу. Заходим пользователем «root» и сохраненным ранее паролем.
После того, как мы успешно вошли в систему, мы увидим примерно такую информацию и все, что от нас требуется — запустить «installimage»:
[...] Hardware data: CPU Athlon 64 X2 Dual Core 4200+ CPU Athlon 64 X2 Dual Core 4200+ RAM 1946 MB Disk /dev/sda: 320.0 GB (=> 305 GIB) Disk /dev/sdb: 320.0 GB (=> 305 GIB) root@rescue ~ # installimage
Из меню мы выберем «Debian» ⇒ «Debian-50-lenny-64-minimal» (большего нам и не нужно).
После этого нам будет показан конфигурационный файл, которым будет руководствоваться инсталляционный скрипт. Нам необходимо проверить в нем несколько строк, а также изменить некоторые под наши нужды:
SWRAID 1 # эти строки проверить - должны быть равны 1! SWRAIDLEVEL 1 # эти строки проверить - должны быть равны 1! [...] HOSTNAME root.domain.com # может и не root, но мне так удобно [...] PART swap swap 4G PART / ext3 10G PART /data ext3 all
В нашем случае мы делаем 4Gb своп, 10Gb оставляем для Dom0 (Host в терминологии XEN), а все остальное место отдаем под директорию /data, которая впоследствии будет сконвертирована в LVM.
Ок, далее у нас по программе: [F10], [Yes], [Yes].
Hetzner Online AG - installimage Your server will be installed now, this will take some minutes You can abort at any time with CTRL+C ... : Reading configuration done 1/13 : Deleting partitions done 2/13 : Creating partitions and /etc/fstab done 3/13 : Creating software RAID level 1 done 4/13 : Formatting partitions : formatting /dev/md0 with swap done : formatting /dev/md1 with ext3 done : formatting /dev/md2 with ext3 done 5/13 : Mounting partitions done 6/13 : Extracting image (local) done 7/13 : Setting up network for eth0 done 8/13 : Executing commands inside chroot done 9/13 : Setting up miscellaneous files done 10/13 : Setting root password done 11/13 : Installing bootloader grub done 12/13 : Running some debian specific functions done 13/13 : Clearing log files done INSTALLATION COMPLETE You can now reboot and log in to your new system with the same password as you logged in to the rescue system. root@rescue ~ #
Все. Можем перезагружаться в нашу свеже-установленную систему.
root@rescue ~ # shutdown -r now
«Осваиваемся на новом месте»
После входа в систему (для чего используем логин «root» и сохраненный ранее пароль), первым делом лучше всего сменить пароль рута:
root:~# passwd Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully
Затем обновим систему:
root:~ # apt-get update root:~ # apt-get dist-upgrade
LVM
На очереди: создание раздела LVM. Для начала попробуем установит сам пакет (если вдруг по какой-то причине он не был уставновлен, в моем случае все было установлено сразу):
root:~# apt-get install lvm2
Отмонтируем созданный на этапе инсталляции раздел под LVM:
root:~# umount /data/
Также из файла "/etc/fstab" удалим строку, которая отвечала за монтирование этого раздела (строку, которая начинается с "/dev/md2").
Создадим на его месте раздел LVM:
root:~# pvcreate /dev/md2 Physical volume "/dev/md2" successfully created
Создадим группу:
root:~# vgcreate vgvm /dev/md2 Volume group "vgvm" successfully created
«Где же обещанные дополнительные 6 IP-адресов?»
Перед тем, как приступить к настройке XEN, нам нужно получить дополнительные адреса (которые так любезно=бесплатно выдаются Hetzner'ом). Для этого идем опять в панель управления (https://robot.your-server.de/server, выбираем свой сервер и закладку «IP»). В нижней части щелкаем по ссылке «Ordering of additional IP, failover IP or subnet» и заказываем дополнительную подсеть для нашего сервера. Через некоторое время (в будние дни от силы час-полтора) на контактный email свалится сообщение на двух языках о том, что подсеть выделена и ее параметры. Параметры могут быть примерно такими (их мы будем использовать в дальнейшей настройке):
IP: 78.46.242.?8
Mask: 255.255.255.248
Broadcast: 78.46.242.?5
(знак вопроса — так, лишняя защита от посторонних глаз)
Установка и конфигурирование XEN
Установим сам xen и его окружение:
root:~# aptitude install xen-hypervisor xen-linux-system-2.6.26-2-xen-amd64 xen-utils xenstore-utils xenwatch xen-shell xen-tools
В файле "/etc/modules" на необходимо поправить строку «loop»:
[...] loop max_loop=64
Исправим файл конфигурации "/etc/xen/xend-config.sxp": закомментируем строки "(network-script network-dummy)" и "(vif-script vif-bridge)", а затем добавим (чуть ниже закомментированной "(vif-script..."):
[...] (network-script 'network-route netdev=eth0') (vif-script vif-route) [...]
В файле "/etc/xen-tools/xen-tools.conf" сделаем следующие изменения:
[...] ## # # If you don't wish to use loopback images then you may specify an # LVM volume group here instead # ## lvm = vgvm # Здесь мы указываем имя логической группы, которую создали ранее с помощью команды "vgcreate" [...] ## # Disk and Sizing options. ## # size = 32Gb # Размер диска для виртуальной машины по умолчанию memory = 256Mb # Оперативная память по умолчанию swap = 1024Mb # Размер свопа по умолчанию # noswap = 1 fs = ext3 # Файловая система для раздела dist = lenny # Дистрибутив по умолчанию image = sparse [...] ## # Networking setup values. ## # # Uncomment and adjust these network settings if you wish to give your # new instances static IP addresses. # gateway = 78.46.242.?9 netmask = 255.255.255.248 broadcast = 78.46.242.?5 [...] # # Uncomment the following line if you wish to interactively setup # a new root password for images. # passwd = 1 [...] # # The architecture to use when using debootstrap, rinse, or rpmstrap. # # This is most useful on 64 bit host machines, for other systems it # doesn't need to be used. # arch=amd64 [...] # # The default mirror for debootstrap to install Debian-derived distributions # mirror = http://ftp2.de.debian.org/debian/ [...] # # If you're using the lenny or later version of the Xen guest kernel you will # need to make sure that you use 'hvc0' for the guest serial device, # and 'xvdX' instead of 'sdX' for serial devices. # # You may specify the things to use here: # serial_device = hvc0 #default # serial_device = tty1 # disk_device = xvda #default # disk_device = sda [...]
Для того, чтобы настроить роутинг для виртуальных машин XEN, нам на хост-машине (Dom0) необходимо к сетевому интерфейсу eth0 добавить еще один адрес из выданной подсети (т.к. первоначальный адрес находится совершенно в другой подсети, например, у моего сервера был примерно таким 213.239.234.?7, а выданная подсеть в 78.46.242.?8).
Для настройки дополнительного адреса я использовал shell-скрипт, взяты отсюда http://wertarbyte.de/debian/ifupdown/addresses. В начале самого скрипта есть README, которая описывает куда его «положить» и что-куда написать потом.
Но если по-русски, то положить его надо в "/etc/network/if-up.d/", назвав так же — «addresses», сделать link («ln -s») в директорию "/etc/network/if-down.d/", чтобы при перезагрузке сервера адрес снимался, сделать этот скрипт исполняемым («chmod +x /etc/network/if-up.d/addresses»), а затем в "/etc/network/interfaces" написать примерно следующее:
[...] # device: eth0 auto eth0 iface eth0 inet static address 213.239.234.?7 broadcast 213.239.234.?1 netmask 255.255.255.248 gateway 213.239.234.?5 addresses 78.46.242.?9/29 # мы добавили эту строчку [...]
Теперь поправим наш sysctl.conf:
### Hetzner Online AG installimage # sysctl config net.ipv4.ip_forward=1 net.ipv4.conf.all.rp_filter=1 net.ipv4.icmp_echo_ignore_broadcasts=1 net.ipv6.conf.all.forwarding=1 net.ipv4.conf.default.proxy_arp=1
А теперь перезагрузим сервер уже с новым XEN-ядром и сделанными настройками:
root:~# shutdown -r now
«Ну и где же сами виртуальные машинки?» — «Уже здесь!»
Вот, собственно почти все. Мы подошли к самому главному, созданию и запуску виртуальных машин.
Давайте уже создадим наш первый виртуальный сервер и присвоим ему свободный IP-адрес из выданной подсети:
root:~# xen-create-image --hostname=example --ip=78.46.242.?0 --memory=512 --role=udev
При создании image'а мы можем переназначить определенные параметры, как, например, в этом случае мы дали нашему виртуальному серверу 512Мб оперативной памяти (а в конфиге по умолчанию стоит 256Мб).
После этой команды пройдет минуты 3-4, у вас спросят пароль с подтверждением для root'а (не для root'а хост машины, а для root'а на новой виртуальной машине).
После этого можно запустить саму виртуальную машину, посмотреть то, что она появилась в списке запущенных (кроме этого на Dom0-машине сразу уменьшится объем доступной оперативной памяти):
root:~# xm create /etc/xen/example.cfg Using config file "/etc/xen/example.cfg". Started domain example root:~# xm list Name ID Mem VCPUs State Time(s) Domain-0 0 1485 2 r----- 123.3 example 1 512 1 r----- 1.7
Теперь мы можем войти в консоль этой машины и начать настраивать ее так, как нам того захочется:
root:~# xm console example
Если представленная в этом руководстве информация окажется хоть кому-то полезна, то мне будет приятно. Считаю, что сделал хорошее дело, собрав в один туториал множество разных.
Английская версия будет находится здесь: wiki.summercode.com