Active/Passive Cluster в Linux. Часть 3: настройка ресурсов кластера

Jan 4, 2016 17:24 · 872 words · 5 minute read pacemaker corosync cluster

В первой статье нашего цикла мы подготовили DRBD-ресурсы на нодах кластера к дальнейшему использованию, во второй — установили и настроили менеджер кластерных ресурсов pacemaker и corosync.

Пришло время заняться настройкой ресурсов кластера, объединить их в группы и определить порядок запуска — давайте разберемся!

Примечание. С точки зрения кластера все сущности, которые мы будем использовать — сервисы, службы, точки монтирования, тома и разделы — это ресурсы, поэтому в данной статье под словом «ресурс» мы понимаем все, что находится под управлением кластера.

Создаем ресурсы drbd-разделов (база данных и пользовательские файлы). Называть ресурсы будем следующим образом: drbd_<имя-ресурса-в-конфиге-/etc/drbd.d/>. Следовательно, у нас будет два ресурса: drbd_mysql и drbd_www:

crm configure primitive drbd_mysql ocf:linbit:drbd params drbd_resource="mysql" \
op monitor interval="60s" op start interval="0" timeout="240s" op stop interval="0" \
timeout="240s" op monitor role=Master interval="10s" op monitor role=Slave interval="30s"
crm configure primitive drbd_www ocf:linbit:drbd params drbd_resource="www" \
op monitor interval="60s" op start interval="0" timeout="240s" op stop interval="0" \
timeout="240s" op monitor role=Master interval="10s" op monitor role=Slave interval="30s"

Создаем определение Мастер/Слейв для созданных drbd-ресурсов в первом пункте. Называть ресурсы будем следующим образом: ms_drbd_<имя-ресурса-в-конфиге-/etc/drbd.d/>. Следовательно, у нас будет ms_drbd_mysql и ms_drbd_www:

crm configure ms ms_drbd_mysql drbd_mysql meta master-max="1" master-node-max="1" \
clone-max="2" clone-node-max="1" notify="true"
crm configure ms ms_drbd_www drbd_www meta master-max="1" master-node-max="1" \
clone-max="2" clone-node-max="1" notify="true"

Создаем точки монтирования drbd-разделов. Называть их будем следующим образом: fs_<имя-ресурса-в-конфиге-/etc/drbd.d/>. Следовательно, у нас будет два ресурса — fs_mysql и fs_www:

crm configure primitive fs_mysql ocf:heartbeat:Filesystem params device="/dev/drbd0" \
directory="/var/lib/mysql" fstype="ext4" options="noatime"
crm configure primitive fs_www ocf:heartbeat:Filesystem params device="/dev/drbd2" \
directory="/srv/www" fstype="ext4" options="noatime"

Настраиваем ресурсы отдельных служб/сервисов. Все ресурсы, кроме отказоустойчивого ip-адреса, будем называть так же, как они называются в каталоге /etc/init.d/.

Отказоустойчивый ip-адрес. Назовем ресурс failover_ip:

crm configure primitive failover_ip ocf:heartbeat:IPaddr2 params ip=192.168.0.16 nic=eth1

Сервис mysql:

crm configure primitive mysql lsb:mysql op start interval="0" timeout="900s"

Сервис sphinxsearch:

crm configure primitive sphinxsearch lsb:sphinxsearch op start interval="0" timeout="240s"

Сервис gearman-job-server:

crm configure primitive gearman-job-server lsb:gearman-job-server

Сервис nfs-kernel-server:

crm configure primitive nfs-kernel-server lsb:nfs-kernel-server

Сервис nfs-common:

crm configure primitive nfs-common lsb:nfs-common

Организуем созданные ресурсы служб/сервисов в группы. Будет две группы ресурсов, запуск которых будет зависеть от состояния соответственных drbd-ресурсов (например, запускать nfs-kernel-server нужно после того как drbd-ресурс www был запущен, получил состояние “Primary” и был примонтирован в соответствующую точку монтирования). Будем называть группы ресурсов следующим образом: group_<имя-ресурса-в-конфиге-/etc/drbd.d/>. Следовательно у нас будет два ресурса: group_mysql и group_www. Запуск ресурсов в группе происходит в том порядке, в котором они перечислены.

В группу group_mysql определим ресурсы fs_mysql failover_ip mysql sphinxsearch gearman-job-server:

crm configure group group_mysql fs_mysql failover_ip mysql sphinxsearch gearman-job-server

В группу group_www определим ресурсы fs_www nfs-kernel-server nfs-common:

crm configure group group_www fs_www nfs-kernel-server nfs-common

Монтировать ресурсы будем на той ноде, где drbd-ресурсы находятся в состоянии Мастер. Назовем этот ресурс cluster_resources:

crm configure colocation cluster_resources inf: fs_www ms_drbd_www:Master fs_mysql ms_drbd_mysql:Master

Даем указание группам ресурсов стартовать после старта соответственных drdb-разделов. Назовем этот ресурс all_after_drbd:

crm configure order all_after_drbd inf: ms_drbd_www:promote group_www:start ms_drbd_mysql:promote group_mysql:start

Устанавливаем предпочтение запуска ресурсов Мастер/Слейв (например ms_drbd_mysql) с весом 100 на db1 и весом 50 на db2:

crm configure location prefer_mysql_db1 ms_drbd_mysql 100: db1; \
crm configure location prefer_mysql_db2 ms_drbd_mysql 50: db2; \
crm configure location prefer_www_db1 ms_drbd_www 100: db1; \
crm configure location prefer_www_db2 ms_drbd_www 50: db2

Устанавливаем предпочтение запуска групп ресурсов с весом 100 на db1 и весом 50 на db2:

crm configure location prefer_group_mysql_db1 group_mysql 100: db1; \
crm configure location prefer_group_mysql_db2 group_mysql 50: db2; \
crm configure location prefer_group_www_db1 group_www 100: db1; \
crm configure location prefer_group_www_db2 group_www 50: db2

Настраиваем ресурс pingnet, для проверки доступности удаленных хостов:

crm configure primitive pingnet ocf:pacemaker:ping \
params host_list=192.168.0.1 host_list=192.168.0.7 \
multiplier="111" op monitor interval="60s" timeout="120s"

Этот ресурс должен быть “клоном” и работать одновременно на двух нодах, для этого выполняем:

crm configure clone pingnetclone pingnet meta interleave=true

Устанавливаем одинаковый приоритет (вес) для одновременного запуска ресурса на обоих нодах:

crm configure location prefer_clonepingnet_db1 pingnetclone 100: db1; \
crm configure location prefer_clonepingnet_db2 pingnetclone 100: db2

Никогда не запускать ресурсы на нодах, где переменная pingd не определена или значение переменной равно 0:

crm configure location never_www ms_drbd_www rule -inf: not_defined pingd or pingd lte 0; \
crm configure location never_mysql ms_drbd_mysql rule -inf: not_defined pingd or pingd lte 0
crm configure location never_group_mysql group_mysql rule -inf: not_defined pingd or pingd lte 0; \
crm configure location never_group_www group_www rule -inf: not_defined pingd or pingd lte 0

Примечание. Ресурс pingnet используем для проверки «живучести» веб-серверов. Если наши веб-сервера недоступны, то ресурсы кластера будут остановлены.

Проверим состояние кластера командой crm_mon -1 или crm status:

============
Last updated: Mon Dec 14 17:08:52 2015
Last change: Thu Dec 10 13:58:18 2015 via cibadmin on db2
Stack: openais
Current DC: db2 - partition with quorum
Version: 1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff
2 Nodes configured, 2 expected votes
14 Resources configured.
============

Online: [ db1 db2 ]

 Master/Slave Set: ms_drbd_mysql [drbd_mysql]
     Masters: [ db1 ]
     Slaves: [ db2 ]
 Master/Slave Set: ms_drbd_www [drbd_www]
     Masters: [ db1 ]
     Slaves: [ db2 ]
 Resource Group: group_mysql
     fs_mysql	(ocf::heartbeat:Filesystem):	Started db1
     failover_ip	(ocf::heartbeat:IPaddr2):	Started db1
     mysql	(lsb:mysql):	Started db1
     sphinxsearch	(lsb:sphinxsearch):	Started db1
     gearman-job-server	(lsb:gearman-job-server):	Started db1
 Resource Group: group_www
     fs_www	(ocf::heartbeat:Filesystem):	Started db1
     nfs-kernel-server	(lsb:nfs-kernel-server):	Started db1
     nfs-common	(lsb:nfs-common):	Started db1
 Clone Set: pingnetclone [pingnet]
     Started: [ db1 db2 ]

Как видим, ресурсы кластера корректно настроены и запущены на ноде db1 — как мы и планировали. На этом все, настройка Active/Passive Cluster из двух нод закончена.

tweet Share