LINUX.ORG.RU
ФорумAdmin

Алгоритм работы HA кластера KVM


1

2

Делаю (пытаюсь) HA кластер на технологиях DRBD OCFS2 HEARTBEAT KVM Задумываю два узла node1 и node2. DRBD будет работать в режиме Primary/Primary для того что бы вторая железка не стояла (и для ремонта можно было использовать живую миграцию). В рабочем режиме vmashine1 запущена на node1, vmashine2 запущена на node2. Если что то случается с одним из узлов то обе виртуальные машины перебегаю на рабочий узел (т.е одна как работала так и работает, а вторая перебегает)

Что имею сейчас:

1) Работающий Heartbeat который переносит IP адрес.

2) DRBD кластер Primary/Primary.

Как может выглядеть решение этой задачи, алгоритм? Как для этого использовать выбранные технологии? Как я понимаю вся работа возлагается на Heartbeat. Как его можно настроить для такой работы?

Я думаю так...

haresources:

node1 1vmashine

node2 2vmashine

1vmashine...

старт {

#Проверить роль DRBD диска, изменить если требуется на Primary

#Смонтировать диск

#Запустить 1vmashine на node1

}

стоп {

#Остановить 1vmashine на node1

}

Нужно как то следить что бы не было ситуации при которой получиться что на обеих node1 и node2 запустились Одни и теже машины, а так же по возможности использовать живую миграцию)

Подскажите пожалуйста. Я не прошу готового решения просто описание решения. За примеры буду благодарен. Большое спасибо.

Александр

★★★★★

Последнее исправление: petav (всего исправлений: 1)

>Нужно как то следить что бы не было ситуации при которой получиться что на обеих node1 и node2 запустились Одни и теже машины

http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Cluster_Sui...

может у тебя приложения, которые можно сделать HA без виртуальных машин? веб серверы или базы данных?

dimon555 ★★★★★
()
Ответ на: комментарий от dimon555

неа, к сожалению первая виртуальная машина Windows с программной написанной только для нее. Вторая Asterisk (тут без проблем можно и саму кластерезировать, но смысла два раза решать одно и тоже не вижу)

petav ★★★★★
() автор топика

Делал эту таску на Xen. Смотри спеки на Live Migration для KVM.
Результаты плачевны, без быстрого винта/линка все это нестабильно (я тестировал на 100Мб/с).

gh0stwizard ★★★★★
()

Читай маны по pacemaker, очень поучительно.
Для прикручивания туда виртуалки можно заюзать агента VirtualDomain.

Впрочем, у нас товарищ DRVTiny уже пытался это сделать по твоему методу (с расшариванием образов на ocfs и drbd primary-primary). Говорит, феерически тормозило.

Лично я рекомендую более гибкую конфигурацию, когда виртуальные диски хранятся прямо на блочных устройствах, которые импортируются в drbd-хостов через iscsi. При этом drbd-кластер может уже работать в primary-secondary (iscsi target исполняется на primary).
Эту конфигурацию (вместе с виртуалками через VirtualDomain) я разворачивал неоднократно, все нормально работало с приемлемой скоростью.

nnz ★★★★
()
Ответ на: комментарий от nnz

Ах да, сами маны.
http://www.clusterlabs.org/doc/en-US/Pacemaker/1.1/html-single/Clusters_from_...
http://www.clusterlabs.org/doc/en-US/Pacemaker/1.1/html-single/Pacemaker_Expl...

Освоив принципы работы в шелле pacemaker'а, ты без труда сконфигурируешь все, что нужно.

Еще могут понадобиться некоторые знания libvirt (http://libvirt.org/formatdomain.html).

nnz ★★★★
()
Ответ на: комментарий от gh0stwizard

у меня по два SAS 15000 в raid и сеть 1Gb между

petav ★★★★★
() автор топика
Ответ на: комментарий от nnz

А в чем разница, между моим способом и DRVTiny и вашим. Технологии похожие. Если взять одинаковое железо разница будет не заметна. Хотя может быть мы не используем OCFS.

Я только начал изучение всего этого и у меня вопросы

Я правильно понял

Создаешь машину потом attach-disk к примеру /dev/sda1 и ставишь на него операционку вирт.машины

потом создаешь DRBD для /dev/sda1 какое нибудь r0 и синхронизируешь

Помоему сложновато +метаданные DRBD где хранить внутри раздела уже не получится

Можете схему описать подробнее

petav ★★★★★
() автор топика
Ответ на: комментарий от petav

>Технологии похожие.

В чем-то похожие, а чем-то сильно различаются.

Если взять одинаковое железо разница будет не заметна.


По самым скромным оценкам, разница по скорости будет раза в четыре.

Создаешь машину потом attach-disk к примеру /dev/sda1 и ставишь на него операционку вирт.машины


Неа. Сначала нужно создать логические тома, потом засинкать их по drbd, потом экспортировать с кластера хранения через tgtd, импортировать на кластере виртуалок через инициатор, и полученные устройства подключать к виртуалкам.

nnz ★★★★
()
Ответ на: комментарий от nnz

После того что написал что разница не заметна, подумал, погуглил и действительно чисто эмпирически разница ощутима. Сегодня вечером попробую все это хозяйство реализовать.

Экспортировать с кластера хранения через tgtd?

Это сделать iSCSI target (сервер)?

Импортировать на кластере виртуалок через инициатор

Это настроить iSCSI клиент на этот таргет?

Полученные устройства подключать к виртуалкам

Вот это уже attach-disk?

Я докопался и уже хотел производить настройку (ubuntu server 10.10) вот по этой ссылке яhttp://www.opennet.ru/tips/info/2037.shtml, но там не пакет tgt. Как я понимаю tgt это пакет для организации таргета, а для организации клиента можно использовать pool KVM?

Огромное спасибо за совет, вечером буду гуглить, но в целом картина ясна.

petav ★★★★★
() автор топика
Ответ на: комментарий от petav

>Это сделать iSCSI target (сервер)?

Ага.

Это настроить iSCSI клиент на этот таргет?

Ага.

Вот это уже attach-disk?

Ага.

Я докопался и уже хотел производить настройку (ubuntu server 10.10) вот по этой ссылке яhttp://www.opennet.ru/tips/info/2037.shtml, но там не пакет tgt

Напрямую конфигурировать таргет смысла нет, т.к. на drbd secondary все равно устройство недоступно будет. Таргет тоже в кластере должен быть. Проще это делать через агент iSCSITarget, который поддерживает все три основные реализации таргета (ietd, tgtd и lio).

И да, когда будешь добавлять диск к машине, указывай его через /dev/disk/by-path, тогда он будет один и тот же на всех нодах кластера виртуалок.

Настройку инициатора вручную можно проводить только на этапе тестирования кластера хранения, после этого можно скинуть все тонкости на libvirt (<pool type=«iscsi»>).

anonymous
()
Ответ на: комментарий от anonymous

Большое спасибо, за прояснения. Приступаю к тестам...

petav ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Создал LVM два диска для данных и два диска для метаданных DRBD

Настроил их синхронизацию

1 диск primary/secondary

2 диск secondary/primary

вынес метаданные, для того что бы можно было даже с остановленной drbd примонтировать физическое устройства и использовать, ну так на всякий случай)

дошел до tgtd. Разбираюсь что это такое. Пока не нарыл как его настраивать.

И вот что плохо все это делаю в виртуальной среде, так что на виртуальных машинах не попробывать. Разве можно поднять в виртуальной машине еще одну виртуальную машину виртуальной )))))), просто у меня пока второго физического сервера нет, а тестить хочется.

petav ★★★★★
() автор топика
Ответ на: комментарий от petav

На esx(i) виртуалку в виртуалке можно запустить, но оверхед получается ужасающий, хотя я для тестирования поднимал 4 esxi x 2 vm x 1 hw. Да, и если i/o эта программа под винду мало юзает то, на мой вгляд, имеет смысл образ диска монтировать через нфс и грузить виртуалки с эдакого сетевого диска.

vsemprivet
()
Ответ на: комментарий от vsemprivet

>На esx(i) виртуалку в виртуалке можно запустить, но оверхед получается ужасающий, хотя я для тестирования поднимал 4 esxi x 2 vm x 1 hw.

Попробую так же и в KVM сделать ))). Естественно только для тестов!

Да, и если i/o эта программа под винду мало юзает то, на мой вгляд, имеет смысл образ диска монтировать через нфс и грузить виртуалки с эдакого сетевого диска.

Конечно можно и такое как вариант.

petav ★★★★★
() автор топика
Ответ на: комментарий от anonymous

На обеих нодах устанвил tgtd (target iSCSI) и open-iscsi-utils (инициатор)?

1нода: настроил для нее tgt

nano /etc/tgt/targets.conf

<target node-1:disk1> backing-store /dev/drdb0 </>

Проверил tgt-admin -s все поднялось и находится в режиме onnline, диск /dev/drdb0 привязан к таргету

2нода: pool-create /home/pool

/home/pool

<pool type=«iscsi»> <name>virtimages</name> <source> <host name=«192.168.200.206»/> <device path=«node-1:disk1»/> </source> <target> <path>/dev/disk/by-path</path> </target> </pool>

На этом этапе какие то ошибки, пока не ковырялся, но вопрос такой

Этот пул нужно создавать на каждой ноде он же автоматом не создаться на противоположной?

И по алгоритму вопрос. В heartbeat мне нужно управлять drbd, tgt, и запуском виртуальных машин. Т.е. следить что бы диск был примари, потом делать из него таргет( для другой ноды) запускать виртуальную машину инициируя таргет другой ноды. И так для каждого узла. Так?

petav ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.