17.03.2011

Эмуляция Fence-Device на KVM (Xen тоже подходит) для кластерных гостевых машин

Fence - это вывод сломанной ноды из кластера. Для фэнсинга используется устройство вроде IPMI, но если кластер строится в виртуальной среде, то естественно никаких устройств как IPMI нет. Поэтому есть эмуляция этих устройств.

Схема работы выглядит следующим образом. Допустим у нас несколько хост-машин (Dom0), на каждой из которых крутятся  по нескольку гостевых машин (DomU). Все гостевые машины состоят в едином кластере.
ВНИМАНИЕ: вводить хост-машины в кластер нельзя, потому что в случае ее отказа, фэнсинг выведет ее из строя, а вместе с ней зацепит и все гостевые машины. После этого может случиться так, что кворум не получит уже никто и кластер полностью рухнет.

На каждой хост-машине запускается демон fence_xvmd. Он будет слушать от гостевых машин, получивших кворум, предложения вывести дохлого соседа из кластера. И еще раз внимание: fence_xvmd должен быть запущен на каждой хост-машине, потому что хост-машина умеет выводить только своих гостей, но не других.



Итак к делу! Задача: предоставить доступ гостевым машинам, построенным на виртуализации KVM, Fence-device.

Подразумевается, что на хост-машине уже установлен пакет, содержащий демон fence_xvmd (он есть в стандартных репо Debian и CentOS), а на гостевых есть пакет, содержащий утилиту fence-xmv.

Cоздаем на любой (но на одной из всех) ноде кластра ключ, который будет служить паролем:
dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=1M count=1
chmod 400 /etc/cluster/fence_xvm.key
И копируем его на остальные ноды кластера:
scp /etc/cluster/fence_xvm.key root@nodeB:/etc/cluster/fence_xvm.key
scp /etc/cluster/fence_xvm.key root@nodeC:/etc/cluster/fence_xvm.key
А кроме того на хост-машину:
scp /etc/cluster/fence_xvm.key root@Dom0:/etc/cluster/fence_xvm.key

Теперь опять же на каждой машине создаем описания девайсов (в файле /etc/cluster/cluster.conf), не забывая подставлять имя ноды вместо nodeN. Не смотря на то, что у каждой ноды свой фэнсдевайс, описать в конфиге нужно все:
  <fencedevices>
    <fencedevice name="xvm1" agent="/sbin/fence_xvm"
key_file="/etc/cluster/fence_xvm-hostN.key" />
    <fencedevice name="xvm2" agent="/sbin/fence_xvm"
key_file="/etc/cluster/fence_xvm-hostN.key" />
  </fencedevices>

Запускаем на хост машине если используем кластер:
fence_xvmd
Не используйте ключи -L (некластерный режим) и -X (не брать конфиг с CCS, а использовать только свой)

Не успел дописать. Потом допишу

1 комментарий:

  1. ну вот ... так всегда ... =) прошел год с лишним ... =)

    ОтветитьУдалить