drbd_xen_live_migration
Различия
Показаны различия между двумя версиями страницы.
| — | drbd_xen_live_migration [2022/03/25 14:00] (текущий) – создано - внешнее изменение 127.0.0.1 | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| + | ====== XEN на DRBD с живой миграцией между узлами ====== | ||
| + | |||
| + | ===== Введение ===== | ||
| + | XEN имеет встроенную возможность перемещать гостей DomU между несколькими узлами Dom0 без остановки их работы, | ||
| + | |||
| + | ===== Подготовка системы ===== | ||
| + | Устанавливаем ядро XEN с утилитами, | ||
| + | |||
| + | # apt-get install xen-linux-system-amd64 xen-tools bridge-utils drbd8-utils | ||
| + | | ||
| + | После установки у нас в загрузчике появится вариант загрузки XEN Dom0, на нужно сделать, | ||
| + | |||
| + | # mv / | ||
| + | # update-grub | ||
| + | |||
| + | Перезагружаемя, | ||
| + | |||
| + | # xm list | ||
| + | | ||
| + | | ||
| + | |||
| + | Если команда выполнилась без ошибки - значит все нормально. | ||
| + | |||
| + | Дальше настроим сетевой мост. Предполагается, | ||
| + | |||
| + | allow-hotplug eth0 | ||
| + | iface eth0 inet manual | ||
| + | pre-up | ||
| + | pre-down ifconfig $IFACE down | ||
| + | | ||
| + | auto br0 | ||
| + | iface br0 inet static | ||
| + | bridge_ports eth0 | ||
| + | address 192.168.1.1 | ||
| + | netmask 255.255.255.0 | ||
| + | |||
| + | После перезагрузки у нас должен появится сетевой мост br0, в него будем подключать наших гостей, | ||
| + | |||
| + | ===== Настройка DRBD ===== | ||
| + | В Debian модуль ядра уже есть, нужно сделать, | ||
| + | |||
| + | options drbd disable_sendpage=1 | ||
| + | |||
| + | <note important> | ||
| + | |||
| + | После перезагрузки модуль должен быть загружен: | ||
| + | |||
| + | # lsmod | grep drbd | ||
| + | drbd 313707 | ||
| + | | ||
| + | Теперь нужно выделить любое блочное устройство(диск, | ||
| + | |||
| + | Редактируем / | ||
| + | |||
| + | include "/ | ||
| + | include "/ | ||
| + | | ||
| + | Редактируем общие параметры для всех ресурсов(эти параметры потом можно переопределить для каждого ресурса индивидуально), | ||
| + | |||
| + | global { | ||
| + | # Запрещаем посылать через интернет разработчикам информацию о версии DRBD (для статистики) | ||
| + | usage-count no; | ||
| + | | ||
| + | # minor-count dialog-refresh disable-ip-verification | ||
| + | } | ||
| + | | ||
| + | common { | ||
| + | # Синхронный протокол синхронизации | ||
| + | protocol C; | ||
| + | | ||
| + | handlers { | ||
| + | # The following 3 handlers were disabled due to #576511. | ||
| + | # Please check the DRBD manual and enable them, if they make sense in your setup. | ||
| + | # pri-on-incon-degr "/ | ||
| + | # pri-lost-after-sb "/ | ||
| + | # local-io-error "/ | ||
| + | | ||
| + | # fence-peer "/ | ||
| + | # split-brain "/ | ||
| + | # out-of-sync "/ | ||
| + | # before-resync-target "/ | ||
| + | # after-resync-target / | ||
| + | } | ||
| + | | ||
| + | startup { | ||
| + | # wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb | ||
| + | } | ||
| + | | ||
| + | options { | ||
| + | # cpu-mask on-no-data-accessible | ||
| + | } | ||
| + | | ||
| + | net { | ||
| + | # sndbuf-size rcvbuf-size timeout connect-int ping-int ping-timeout max-buffers | ||
| + | # max-epoch-size ko-count allow-two-primaries cram-hmac-alg shared-secret | ||
| + | # after-sb-0pri after-sb-1pri after-sb-2pri data-integrity-alg no-tcp-cork | ||
| + | } | ||
| + | | ||
| + | syncer { | ||
| + | # rate after al-extents use-rle cpu-mask verify-alg csums-alg | ||
| + | | ||
| + | # Максимальная скорость синхронизации(МБ/ | ||
| + | rate 100M; | ||
| + | } | ||
| + | | ||
| + | } | ||
| + | |||
| + | Теперь создаем конфигурационный файл ресурса / | ||
| + | |||
| + | # Имя ресурса | ||
| + | resource Wheezy { | ||
| + | | ||
| + | syncer { | ||
| + | # Алгоритм проверки целостности данных | ||
| + | verify-alg md5; | ||
| + | } | ||
| + | | ||
| + | net { | ||
| + | # Разрешаем обоим узлам быть мастерами одновременно | ||
| + | allow-two-primaries; | ||
| + | } | ||
| + | | ||
| + | # DRBD-устройство | ||
| + | device | ||
| + | | ||
| + | # Путь к блочному устройству, | ||
| + | disk / | ||
| + | | ||
| + | # Метаданные будем хранить на самом устройстве | ||
| + | meta-disk internal; | ||
| + | | ||
| + | # Далее указываем адреса и порты обоих узлов | ||
| + | on node1 { | ||
| + | address | ||
| + | } | ||
| + | | ||
| + | on node2 { | ||
| + | address | ||
| + | } | ||
| + | } | ||
| + | |||
| + | Этот конфиг полностью одинаковый для обоих узлов. | ||
| + | |||
| + | < | ||
| + | |||
| + | Инициализируем ресурс: | ||
| + | |||
| + | # drbdadm create-md Wheezy | ||
| + | Writing meta data... | ||
| + | initializing activity log | ||
| + | NOT initializing bitmap | ||
| + | New drbd meta data block successfully created. | ||
| + | | ||
| + | Запускаем ресурс: | ||
| + | |||
| + | # drbdadm up Wheezy | ||
| + | |||
| + | Смотрим его состояние(на любом узле): | ||
| + | |||
| + | # cat /proc/drbd | ||
| + | version: 8.3.11 (api: | ||
| + | srcversion: 41C52C8CD882E47FB5AF767 | ||
| + | | ||
| + | 1: cs: | ||
| + | ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:5242684 | ||
| + | | ||
| + | Сейчас он на обоих ресурсах в состоянии Secondary и данные имеют статус Inconsistent, | ||
| + | |||
| + | # drbdadm -- --overwrite-data-of-peer primary Wheezy | ||
| + | |||
| + | Эта команда переведет узел, на котором была выполнена, | ||
| + | |||
| + | # cat /proc/drbd | ||
| + | version: 8.3.11 (api: | ||
| + | srcversion: 41C52C8CD882E47FB5AF767 | ||
| + | | ||
| + | 1: cs: | ||
| + | ns:412672 nr:0 dw:0 dr:417432 al:0 bm:24 lo:3 pe:1 ua:5 ap:0 ep:1 wo:b oos:4831036 | ||
| + | [> | ||
| + | finish: 0:01:10 speed: 68,608 (68,608) K/sec | ||
| + | | ||
| + | По окончании синхронизации ресурс должен получить следующий статус: | ||
| + | |||
| + | cs: | ||
| + | | ||
| + | <note tip> | ||
| + | Можно обойтись без синхронизации, | ||
| + | # drbdadm -- --clear-bitmap new-current-uuid Wheezy | ||
| + | После выполнения этой команды ресурс на обоих узлах сразу перейдет в состояние UpToDate без синхронизации. | ||
| + | </ | ||
| + | ===== Настройка XEN ===== | ||
| + | К текущему моменту у нас один узел работает в режиме мастера, | ||
| + | |||
| + | # drbdadm primary Wheezy | ||
| + | |||
| + | Теперь устанавливаем гостевую систему с помощью утилит XEN методом debootstrap(для простоты устанавливаем без swap-раздела, | ||
| + | |||
| + | # xen-create-image --hostname=Wheezy --memory=512mb --vcpus=1 --dhcp --pygrub --dist=wheezy --mirror=http:// | ||
| + | |||
| + | * **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 = ' | ||
