Active/Passive Cluster в Linux. Часть 3: настройка ресурсов кластера
Jan 4, 2016 17:24 · 872 words · 5 minute read
В первой статье нашего цикла мы подготовили 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 из двух нод закончена.