Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия Следующая версия Следующая версия справа и слева | ||
drbd_xen_live_migration [2013/06/04 14:42] metallic [Подготовка системы] |
drbd_xen_live_migration [2013/06/04 16:17] metallic [Настройка DRBD] |
||
---|---|---|---|
Строка 38: | Строка 38: | ||
===== Настройка DRBD ===== | ===== Настройка DRBD ===== | ||
- | Предполагается, | + | В Debian |
options drbd disable_sendpage=1 | options drbd disable_sendpage=1 | ||
Строка 56: | Строка 56: | ||
include "/ | include "/ | ||
| | ||
- | Редактируем общие параметры для всех ресурсов(эти параметры потом можно переопределить для каждого ресурса индивидуально), | + | Редактируем общие параметры для всех ресурсов(эти параметры потом можно переопределить для каждого ресурса индивидуально), |
global { | global { | ||
Строка 70: | Строка 70: | ||
| | ||
handlers { | handlers { | ||
- | pri-on-incon-degr "/ | + | |
- | pri-lost-after-sb "/ | + | # Please check the DRBD manual and enable them, if they make sense in your setup. |
- | local-io-error "/ | + | # pri-on-incon-degr "/ |
- | #fence-peer "/ | + | |
+ | | ||
+ | | ||
+ | # fence-peer "/ | ||
# split-brain "/ | # split-brain "/ | ||
# out-of-sync "/ | # out-of-sync "/ | ||
# before-resync-target "/ | # before-resync-target "/ | ||
- | # | + | # after-resync-target / |
} | } | ||
| | ||
Строка 87: | Строка 90: | ||
# cpu-mask on-no-data-accessible | # cpu-mask on-no-data-accessible | ||
} | } | ||
- | | + | |
- | | + | |
- | # size max-bio-bvecs on-io-error fencing disk-barrier disk-flushes | + | # sndbuf-size rcvbuf-size timeout connect-int ping-int ping-timeout max-buffers |
- | # disk-drain md-flushes resync-rate resync-after al-extents | + | # max-epoch-size ko-count allow-two-primaries cram-hmac-alg shared-secret |
- | # c-plan-ahead c-delay-target c-fill-target c-max-rate | + | # after-sb-0pri after-sb-1pri after-sb-2pri data-integrity-alg no-tcp-cork |
- | # c-min-rate disk-timeout | + | |
} | } | ||
| | ||
- | | + | |
- | # protocol timeout max-epoch-size max-buffers unplug-watermark | + | # rate after al-extents use-rle cpu-mask verify-alg csums-alg |
- | # connect-int ping-int sndbuf-size rcvbuf-size ko-count | + | |
- | # allow-two-primaries cram-hmac-alg shared-secret after-sb-0pri | + | # Максимальная скорость синхронизации(МБ/ |
- | # after-sb-1pri after-sb-2pri always-asbp rr-conflict | + | |
- | # ping-timeout data-integrity-alg tcp-cork on-congestion | + | |
- | | + | |
- | # use-rle | + | |
} | } | ||
+ | | ||
} | } | ||
Строка 136: | Строка 136: | ||
| | ||
on node2 { | on node2 { | ||
- | address | + | address |
} | } | ||
} | } | ||
Строка 142: | Строка 142: | ||
Этот конфиг полностью одинаковый для обоих узлов. | Этот конфиг полностью одинаковый для обоих узлов. | ||
- | < | + | < |
Инициализируем ресурс: | Инициализируем ресурс: | ||
Строка 159: | Строка 159: | ||
# cat /proc/drbd | # cat /proc/drbd | ||
- | version: 8.4.1 (api:1/proto:86-100) | + | version: 8.3.11 (api:88/proto:86-96) |
- | | + | |
| | ||
1: cs: | 1: cs: | ||
Строка 172: | Строка 172: | ||
# cat /proc/drbd | # cat /proc/drbd | ||
- | version: 8.4.1 (api:1/proto:86-100) | + | version: 8.3.11 (api:88/proto:86-96) |
- | | + | |
| | ||
1: cs: | 1: cs: | ||
Строка 187: | Строка 187: | ||
К текущему моменту у нас один узел работает в режиме мастера, | К текущему моменту у нас один узел работает в режиме мастера, | ||
- | # drbdadm primary Wheezy | + | |
- | Теперь отформатируем и примонтируем диск(на мастере): | + | Теперь |
- | # mkfs.ext3 /dev/drbd1 | + | # xen-create-image --hostname=Wheezy --memory=512mb --vcpus=1 --dhcp --pygrub --dist=wheezy --mirror=http:// |
- | # mount /dev/drbd1 /mnt | + | |
+ | * **hostname** - имя хоста, которое будет задано установленной системе | ||
+ | * **memory** - кол-во оперативной памяти, | ||
+ | * **vcpus** - кол-во процессоров(ядер), | ||
+ | * **dhcp** - указываем, | ||
+ | * **pygrub** - указываем, | ||
+ | * **dist** - кодовое имя устанавливаемого дистрибутива, | ||
+ | * **mirror** - зеркало, | ||
+ | * **fs** - файловая система для гостевой ОС | ||
+ | * **image-dev** - этим параметром указываем, | ||
+ | * **noswap** - уже сказано, | ||
+ | * **output** - указываем каталог, | ||
+ | |||
+ | После выполнения команды, | ||
+ | |||
+ | WARNING | ||
+ | ------- | ||
+ | | ||
+ | You appear to have a missing vif-script, or network-script, | ||
+ | Xen configuration file / | ||
+ | | ||
+ | Please fix this and restart Xend, or your guests will not be able | ||
+ | to use any networking! | ||
+ | | ||
+ | | ||
+ | General Information | ||
+ | -------------------- | ||
+ | Hostname | ||
+ | Distribution | ||
+ | Mirror | ||
+ | Root Device | ||
+ | Partitions | ||
+ | Memory size : 512mb | ||
+ | Kernel path : / | ||
+ | Initrd path : / | ||
+ | | ||
+ | Networking Information | ||
+ | ---------------------- | ||
+ | IP Address | ||
+ | | ||
+ | | ||
+ | Creating ext4 filesystem on /dev/drbd1 | ||
+ | Done | ||
+ | Installation method: debootstrap | ||
+ | Done | ||
+ | | ||
+ | Running hooks | ||
+ | Done | ||
+ | | ||
+ | No role scripts were specified. | ||
+ | | ||
+ | Creating Xen configuration file | ||
+ | Done | ||
+ | | ||
+ | No role scripts were specified. | ||
+ | All done | ||
+ | | ||
+ | | ||
+ | Logfile produced at: | ||
+ | / | ||
+ | | ||
+ | Installation Summary | ||
+ | --------------------- | ||
+ | Hostname | ||
+ | Distribution | ||
+ | IP-Address(es) | ||
+ | RSA Fingerprint : e6: | ||
+ | Root Password | ||
+ | |||
+ | Смотрим что нам за конфиг нагенерили: | ||
+ | |||
+ | bootloader = '/ | ||
+ | | ||
+ | vcpus = ' | ||
+ | memory | ||
+ | | ||
+ | root = '/ | ||
+ | disk = [ ' | ||
+ | | ||
+ | name = ' | ||
+ | | ||
+ | dhcp = ' | ||
+ | vif = [ ' | ||
+ | | ||
+ | on_poweroff = ' | ||
+ | on_reboot | ||
+ | on_crash | ||
+ | |||
+ | Пробуем запустить для проверки работоспособности(с подключением к консоле) | ||
+ | |||
+ | # xm create -c / | ||
+ | | ||
+ | Если все получилось, | ||
+ | |||
+ | Итак, виртуалка работает, | ||
+ | |||
+ | disk = [ ' | ||
+ | |||
+ | Что такое drbd-тип устройства в XEN? В каталоге / | ||
+ | |||
+ | Теперь пробуем снова запустить виртуалку, | ||
+ | |||
+ | # xm list | ||
+ | Name ID Mem VCPUs State | ||
+ | Domain-0 | ||
+ | Wheezy | ||
+ | |||
+ | А drbd-устройство на этом узле должно быть в режиме primary(хотя если это было бы не так, то виртуалка не запустилась) | ||
+ | |||
+ | # cat /proc/drbd | ||
+ | version: 8.3.11 (api: | ||
+ | srcversion: 41C52C8CD882E47FB5AF767 | ||
+ | | ||
+ | 1: cs: | ||
+ | ns:328 nr:0 dw:328 dr:664 al:6 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0 | ||
+ | |||
+ | Ну и самое интересное, | ||
+ | |||
+ | # Разрешаем живую миграцию | ||
+ | (xend-relocation-server yes) | ||
+ | | ||
+ | # Разрешаем живую миграцию для любой виртуалки(можно указать список, | ||
+ | (xend-relocation-hosts-allow '' | ||
+ | |||
+ | Перезапускаем XEN | ||
+ | |||
+ | # / | ||
+ | | ||
+ | Посе перезапуска оба узла должны слушать порт 8002. | ||
+ | |||
+ | Сама миграция выполняется очень просто, | ||
+ | |||
+ | # xm migrate --live Wheezy 192.168.1.2 | ||
+ | |||
+ | * **Wheezy** - имя виртуалки XEN | ||
+ | * **192.168.1.2** - адрес(или имя) ноды, на которую мигрируем | ||
+ | |||
+ | Если все работает корректно, | ||
+ | |||
+ | ===== Аппаратная виртуализация ===== | ||
+ | Если используется полностью аппаратная виртуализация, | ||
+ | |||
+ | Пример виртуальной машины для запуска Windows 2012 Server (или любой другой системы с аппаратной виртуализацией): | ||
+ | |||
+ | kernel = "/ | ||
+ | builder=' | ||
+ | memory = 2048 | ||
+ | name = " | ||
+ | vcpus=1 | ||
+ | acpi=1 | ||
+ | apic=1 | ||
+ | device_model = '/ | ||
+ | | ||
+ | vif = [ ' | ||
+ | disk = [ ' | ||
+ | | ||
+ | # boot on floppy (a), hard disk (c) or CD-ROM (d) | ||
+ | boot=" | ||
+ | | ||
+ | usbdevice=' | ||
+ | | ||
+ | vnc=1 | ||
+ | vncunused=0 | ||
+ | vnclisten = ' | ||
+ | vncdisplay=0 | ||
+ | vncconsole=0 | ||
+ | vncpasswd='' | ||
+ | | ||
+ | sdl=0 | ||
+ | vncviewer=0 | ||
+ | | ||
+ | stdvga=0 | ||
+ | serial=' | ||
+ | ne2000 = " | ||
+ | | ||
+ | on_poweroff = ' | ||
+ | on_reboot = ' | ||
+ | on_crash = ' | ||