Настройка High Availability кластера с помощью Heartbeat на Centos

В этой заметке хочу рассмотреть использование heatbeat на примере двух серверов. В даном примере у меня есть два сервера, на которых вертится mysql. Сайты устанавливают соединение с ip адресом 192.168.1.150. Я настрою hartbeat таким образом, что бы сетевой интерфейс с этим ip адресом поднимался на втором сервере, если первый выключается (падает).

Heartbeat - полезная утилита, которая позволяет выполнять различные действия на серверах в кластере, в зависимости от состояния остальных серверов.

Дано:
db1: 192.168.1.130
db2: 192.168.1.140
постоянный ip: 192.168.1.150

Для начала включим репозитарий Epel:

rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

Дальше установим heartbeat на обоих серверах:

yum install heartbeat

Внесем следующие строки в файл /etc/hosts:

db1 192.168.1.130
db2 192.168.1.140

Учтите, что db1 и db2 должно возвращаться в результате выполнения следующей команды на обоих серверах:

uname -n

Вы можете испоьзовать имена серверов, которые возвращает выше упомянутая команда.

Переходим на сервер db1.

Создаем файл /etc/ha.d/ha.cf со следующим содержанием:

logfile /var/log/ha.log
keepalive 500ms
deadtime 10
warntime 5
initdead 30
auto_failback off
node db1
node db2
ping db1
deadping 2

Создаем файл /etc/ha.d/haresources со следующим содержанием:

db1 IPaddr::192.168.1.150/24/eth0:0

В результате выполнения скрипта /etc/ha.d/resource.d/<strong>IPaddr</strong> на сервере db1 поднимется виртуальный сетевой интерфейс eth0:0 с ip адресом 192.168.1.150 и сакой подсети 255.255.255.0

Если сервер db1 вдруг станет недоступен, этот интерфейс должен подняться на сервере db2.

Для этого создадим файл авторизации:

echo -ne # Automatically generated authkeys file \n auth 1 \n 1 sha1 $(dd if=/dev/urandom count=4 2>/dev/null | md5sum | cut -c1-32) \n » /etc/ha.d/authkeys

Выставим ему правильные права доступа:

chmod 600 /etc/ha.d/authkeys

Теперь копируем все на второй сервер:

rsync -Hogva /etc/ha.d root@db2:/etc/

и рестартуем heartbeat на обоих серверах:

/etc/init.d/heartbeat restart

Выполняем ifconfig обнаруживаем, что вот такой вот интерфейс появился:

Screenshot from 2014-09-22 12:42:07

Для проверки можно отправить db1 в reboot и удостовериться, что eth0:0 с ip 192.168.1.150 поднялся на db2.

Share Button