Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
xen_pacemaker_cluster [2013/06/11 14:32] metallic |
xen_pacemaker_cluster [2022/03/25 17:00] (текущий) |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== Кластер виртуальных машин XEN ====== | + | ====== Кластер виртуальных машин |
===== Введение ===== | ===== Введение ===== | ||
- | |||
- | |||
Задача: | Задача: | ||
Строка 8: | Строка 6: | ||
===== Подготовка системы ===== | ===== Подготовка системы ===== | ||
- | Устанавливаем ядро XEN с утилитами, | + | Устанавливаем ядро XEN с утилитами, |
- | # apt-get install xen-linux-system-amd64 xen-tools bridge-utils drbd8-utils | + | # apt-get install xen-linux-system-amd64 xen-tools bridge-utils drbd8-utils |
| | ||
После установки у нас в загрузчике появится вариант загрузки XEN Dom0, на нужно сделать, | После установки у нас в загрузчике появится вариант загрузки XEN Dom0, на нужно сделать, | ||
Строка 113: | Строка 111: | ||
# Имя ресурса | # Имя ресурса | ||
resource Win2012 { | resource Win2012 { | ||
+ | | ||
# Эти обработчики событий нужны для корректной работы с pacemaker | # Эти обработчики событий нужны для корректной работы с pacemaker | ||
handlers { | handlers { | ||
Строка 163: | Строка 161: | ||
# Имя ресурса | # Имя ресурса | ||
resource Win2012-2 { | resource Win2012-2 { | ||
+ | | ||
# Эти обработчики событий нужны для корректной работы с pacemaker | # Эти обработчики событий нужны для корректной работы с pacemaker | ||
handlers { | handlers { | ||
Строка 220: | Строка 218: | ||
NOT initializing bitmap | NOT initializing bitmap | ||
New drbd meta data block successfully created. | New drbd meta data block successfully created. | ||
+ | | ||
# drbdadm create-md Win2012-2 | # drbdadm create-md Win2012-2 | ||
Writing meta data... | Writing meta data... | ||
Строка 231: | Строка 229: | ||
# drbdadm up Win2012 | # drbdadm up Win2012 | ||
+ | | ||
# drbdadm up Win2012-2 | # drbdadm up Win2012-2 | ||
| | ||
Строка 246: | Строка 244: | ||
# drbdadm -- --overwrite-data-of-peer primary Win2012 | # drbdadm -- --overwrite-data-of-peer primary Win2012 | ||
+ | | ||
# drbdadm -- --overwrite-data-of-peer primary Win2012-2 | # drbdadm -- --overwrite-data-of-peer primary Win2012-2 | ||
Строка 270: | Строка 268: | ||
</ | </ | ||
+ | ===== Установка виртуальных машин XEN ===== | ||
+ | Теперь на любом из узлов(на том, на котором ресурсы находятся в состоянии primary) устанавливаем виртуальные машины с Windows 2012 Server(или с любой другой нужной ОС). Подробно это описывать не буду, в интернете есть полно документации по XEN. Приведу только пример конфигурационного файла для hvm-виртуалки: | ||
+ | |||
+ | 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 = ' | ||
+ | | ||
+ | ===== Настройка кластера ===== | ||
+ | ==== Corosync ==== | ||
+ | Редактируем / | ||
+ | |||
+ | interface { | ||
+ | ringnumber: 0 | ||
+ | | ||
+ | # Тут указывается адрес сети, а не IP-адрес! (сеть, через которую будет взаимодействовать кластер) | ||
+ | bindnetaddr: | ||
+ | | ||
+ | # Широковещательный адрес | ||
+ | mcastaddr: 226.94.1.1 | ||
+ | mcastport: 5405 | ||
+ | } | ||
+ | |||
+ | < | ||
+ | |||
+ | Ну и теперь в / | ||
+ | |||
+ | START=yes | ||
+ | | ||
+ | Проверяем чтобы corosync был в автозагрузке и запускаем его | ||
+ | |||
+ | # / | ||
+ | | ||
+ | Запускам монитор и проверяем, | ||
+ | |||
+ | # crm_mon -1 | ||
+ | | ||
+ | ============ | ||
+ | Last updated: Tue Jun 11 18:54:10 2013 | ||
+ | Last change: Tue Jun 11 16:34:29 2013 via crm_resource on node1 | ||
+ | Stack: openais | ||
+ | Current DC: node1 - partition with quorum | ||
+ | Version: 1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff | ||
+ | 2 Nodes configured, 2 expected votes | ||
+ | 0 Resources configured. | ||
+ | ============ | ||
+ | | ||
+ | Online: [ node2 node1 ] | ||
+ | |||
+ | |||
+ | ==== Pacemaker ==== | ||
+ | Заключительный этап. К текущему моменту у нас должны быть две рабочие виртуалки, | ||
+ | |||
+ | # drbdadm down Win2012 | ||
+ | | ||
+ | # drbdadm down Win2012-2 | ||
+ | | ||
+ | Также не забываем запретить автозагрузку виртуалок и ресурсов XEN. Ну и, понятное дело, на обоих узлах кластера должно быть все необходимое для запуска обоих виртуалок, | ||
+ | |||
+ | Приступаем к настройке кластера, | ||
+ | |||
+ | # crm configure show | ||
+ | node node1 | ||
+ | node node2 | ||
+ | property $id=" | ||
+ | dc-version=" | ||
+ | cluster-infrastructure=" | ||
+ | expected-quorum-votes=" | ||
+ | | ||
+ | Выключаем stonith и задаем политику поведения при отсутсвии кворума([[pacemaker_theory|Pacemaker, | ||
+ | |||
+ | # crm configure property stonith-enabled=false | ||
+ | # crm configure property no-quorum-policy=ignore | ||
+ | |||
+ | Меняем липкость ресурсов по-умолчанию с 0 на -1000, это значит, | ||
+ | |||
+ | # crm configure property default-resource-stickiness=" | ||
+ | | ||
+ | Создаем ресурсы кластера для управления ресурсами DRBD: | ||
+ | |||
+ | # crm configure | ||
+ | | ||
+ | crm(live)configure# | ||
+ | crm(live)configure# | ||
+ | crm(live)configure# | ||
+ | crm(live)configure# | ||
+ | crm(live)configure# | ||
+ | crm(live)configure# | ||
+ | | ||
+ | Некоторые параметры: | ||
+ | * **master-max** - максимальное кол-во копий данного мультистейтового ресурса, | ||
+ | * **master-node-max** - максимальное кол-во master-сущностей(копий мультистейтового ресурса), | ||
+ | * **clone-max** - максимальное кол-во копий данного мультистейтового ресурса во всем кластере, | ||
+ | * **clone-node-max** - максимальное кол-во копий данного мультистейтового ресурса, | ||
+ | |||
+ | В итоге получается, | ||
+ | |||
+ | Теперь создаем ресурсы виртуалок, | ||
+ | |||
+ | # crm configure | ||
+ | | ||
+ | crm(live)configure# | ||
+ | crm(live)configure# | ||
+ | crm(live)configure# | ||
+ | crm(live)configure# | ||
+ | crm(live)configure# | ||
+ | crm(live)configure# | ||
+ | crm(live)configure# | ||
+ | crm(live)configure# | ||
+ | | ||
+ | В зависимостях(colocation) указывается, | ||
+ | |||
+ | К текущему моменту у нас уже должны запуститься виртуалки, | ||
+ | |||
+ | # crm configure | ||
+ | | ||
+ | crm(live)configure# | ||
+ | crm(live)configure# | ||
+ | crm(live)configure# | ||
+ | crm(live)configure# | ||
+ | crm(live)configure# | ||
+ | crm(live)configure# | ||
+ | | ||
+ | Т.е. указываем, | ||
+ | |||
+ | Таким образом, | ||
+ | |||
+ | ===== Дополнительная информация ===== | ||
+ | ==== VNC для виртуалок ==== | ||
+ | В мануале выше, в качестве адреса для удаленных VNC-подключений используется 127.0.0.1, что не очень удобно, | ||
+ | |||
+ | # crm configure | ||
+ | | ||
+ | crm(live)configure# | ||
+ | crm(live)configure# | ||
+ | crm(live)configure# | ||
+ | crm(live)configure# | ||
+ | crm(live)configure# | ||
+ | |||
+ | Теперь виртуалка будет перемещаться по кластеру вместе с IP-адресом для VNC-консоли. | ||
+ | |||
+ | ==== Живая миграция ==== | ||
+ | Теоретически(и по идее практически) можно настроить DRBD в режиме dual primary и пользоваться живой миграцией виртуальных машин(кластер это поддерживает). На практике у меня возникли некоторые мелкие проблемы с этим(сбои миграции, | ||
+ | |||
+ | Конфиг DRBD-ресурса для живой миграции: | ||
+ | |||
+ | resource Win2012 { | ||
+ | | ||
+ | handlers { | ||
+ | fence-peer "/ | ||
+ | after-resync-target "/ | ||
+ | } | ||
+ | | ||
+ | disk { | ||
+ | fencing resource-only; | ||
+ | } | ||
+ | | ||
+ | syncer { | ||
+ | verify-alg md5; | ||
+ | } | ||
+ | | ||
+ | net { | ||
+ | allow-two-primaries; | ||
+ | | ||
+ | after-sb-0pri discard-zero-changes; | ||
+ | after-sb-1pri discard-secondary; | ||
+ | after-sb-2pri disconnect; | ||
+ | } | ||
+ | | ||
+ | device | ||
+ | disk / | ||
+ | meta-disk internal; | ||
+ | | ||
+ | on node1 { | ||
+ | address | ||
+ | } | ||
+ | | ||
+ | on node2 { | ||
+ | address | ||
+ | } | ||
+ | | ||
+ | startup { | ||
+ | become-primary-on both; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | Конфигурация кластера: | ||
+ | |||
+ | crm configure primitive DRBDWin2012 ocf: | ||
+ | crm configure ms ms_DRBDWin2012 DRBDWin2012 meta master-max=" | ||
+ | | ||
+ | crm configure primitive XENWin2012 ocf: | ||
+ | crm configure colocation Win2012-on-DRBD inf: XENWin2012 ms_DRBDWin2012: | ||
+ | crm configure order Win2012AfterDRBD inf: ms_DRBDWin2012: | ||
+ | | ||
+ | crm configure primitive DRBDWin2012-2 ocf: | ||
+ | crm configure ms ms_DRBDWin2012-2 DRBDWin2012-2 meta master-max=" | ||
+ | | ||
+ | crm configure primitive XENWin2012-2 ocf: | ||
+ | crm configure colocation Win2012-on-DRBD-2 inf: XENWin2012-2 ms_DRBDWin2012-2: | ||
+ | crm configure order Win2012AfterDRBD-2 inf: ms_DRBDWin2012-2: | ||
+ | |||
+ | ==== Ручное восстановление split brain ==== | ||
+ | Ситуация с возникновением в нормальных условиях достаточно редкая, | ||
+ | - Останавливаем все ресурсы pacemaker(командой crm resource stop [res]), которые связаны с проблемным DRBD-ресурсом(как правило XEN виртуалки и сам DRBD-ресурс) | ||
+ | - На обоих узлах DRBD-ресурсы должны деактивироваться, | ||
+ | - Переводим на обоих узлах ресурс в автономный режим(drbdadm disconnect [res]) | ||
+ | - Переводим на обоих узлах ресурс в secondary режим (drbdadm secondary [res]) | ||
+ | - Выбираем один из узлов в качестве жертвы, | ||
+ | - Второй узел(источник репликации) переводим в режим подключения(drbdadm connect [res]) | ||
+ | - Дожидаемся завершения синхронизации | ||
+ | - Деактивируем ресурс на обоих узлах(drbdadm down [res]) | ||
+ | - Теперь можно запустить все ресурсы pacemaker в нужном порядке(crm resource start [res]) | ||
+ | |||
+ | ==== Полезные ссылки ==== | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// |