Показаны различия между двумя версиями страницы.
drbd_xen_live_migration [2013/06/04 16:08] metallic [Настройка XEN] |
drbd_xen_live_migration [2022/03/25 17:00] |
||
---|---|---|---|
Строка 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: | ||
- | |||
- | ===== Настройка 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** - адрес(или имя) ноды, на которую мигрируем | ||
- | |||
- | Если все работает корректно, | ||
- | |||
- | ===== Аппаратная виртуализация ===== | ||