LINUX.ORG.RU

Asterisk + Pacemaker, запрет переезда ресурсов при восстановлении мастера хоста

 , ,


0

2

Пытаюсь сделать отказоустойчивый Asterisk.

Есть две ноды с CentOS7 + DRDB + Asterisk +MySQL + Apache Первый сервер выступает мастером, второй слейв. Все как бы работает, когда тушишь первый сервер, второй слейв становится мастером.

Возникла проблема: Когда второй сервер мастер, если включить первую ноду (которая была отключена), она автоматически перехватывает на себя все ресурсы слейва. Соотcветственно все данные которые писались на слейв не видны мастеру.

Хотя хочется чтобы этот процесс был сделан в ручную.

Настройки кластера:

pcs cluster cib clust_cfg
pcs -f clust_cfg property set stonith-enabled=false
pcs -f clust_cfg property set no-quorum-policy=ignore
pcs -f clust_cfg resource defaults resource-stickiness=INFINITY
 
pcs -f clust_cfg resource create ast_data01 ocf:linbit:drbd drbd_resource=disk1 op monitor interval=30s
 
pcs -f clust_cfg resource master AstClone01 ast_data01 master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
 
pcs -f clust_cfg resource create ast_fs01 Filesystem device="/dev/drbd/by-res/disk1/0" directory="/etc/asterisk" fstype="ext4"
pcs -f clust_cfg resource create ast_fs02 Filesystem device="/dev/drbd/by-res/disk1/1" directory="/var/lib/asterisk" fstype="ext4"
pcs -f clust_cfg resource create ast_fs03 Filesystem device="/dev/drbd/by-res/disk1/2" directory="/var/lib/mysql" fstype="ext4"
pcs -f clust_cfg resource create ast_fs04 Filesystem device="/dev/drbd/by-res/disk1/3" directory="/var/www/html" fstype="ext4"
 
pcs -f clust_cfg constraint colocation add ast_fs03 with AstClone01 INFINITY with-rsc-role=Master
pcs -f clust_cfg constraint colocation add ast_fs01 with AstClone01 INFINITY with-rsc-role=Master
pcs -f clust_cfg constraint colocation add ast_fs02 with AstClone01 INFINITY with-rsc-role=Master
pcs -f clust_cfg constraint colocation add ast_fs04 with AstClone01 INFINITY with-rsc-role=Master
 
pcs -f clust_cfg constraint order promote AstClone01 then start ast_fs03
pcs -f clust_cfg constraint order promote AstClone01 then start ast_fs01
pcs -f clust_cfg constraint order promote AstClone01 then start ast_fs02
pcs -f clust_cfg constraint order promote AstClone01 then start ast_fs04
 
pcs -f clust_cfg resource create mysql_service01 ocf:heartbeat:mysql binary="/usr/bin/mysqld_safe" config="/etc/my.cnf" user="mysql" group="mysql" datadir="/var/lib/mysql" pid="/var/lib/mysql/mysql.pid" socket="/var/lib/mysql/mysql.sock" op start timeout=60s op stop timeout=60s op monitor interval=20s timeout=30s
pcs -f clust_cfg resource create ast_service01 ocf:heartbeat:asterisk op start timeout=60s op stop timeout=60s op monitor interval=20s timeout=30s
pcs -f clust_cfg resource create httpd_service01 ocf:heartbeat:apache op start timeout=60s op stop timeout=60s op monitor interval=20s timeout=30s
 
pcs -f clust_cfg constraint colocation add mysql_service01 with ast_fs03 INFINITY
pcs -f clust_cfg constraint colocation add ast_service01 with ast_fs01 INFINITY
pcs -f clust_cfg constraint colocation add ast_service01 with ast_fs02 INFINITY
pcs -f clust_cfg constraint colocation add httpd_service01 with ast_fs04 INFINITY
 
pcs -f clust_cfg constraint order ast_fs03 then mysql_service01
pcs -f clust_cfg constraint order ast_fs01 then ast_service01
pcs -f clust_cfg constraint order ast_fs02 then ast_service01
pcs -f clust_cfg constraint order ast_fs04 then httpd_service01
 
pcs -f clust_cfg resource create ast_VIP01 ocf:heartbeat:IPaddr2 ip=192.168.0.43 cidr_netmask=32 op monitor interval=30s
 
pcs -f clust_cfg constraint colocation add ast_VIP01 with mysql_service01 INFINITY
pcs -f clust_cfg constraint colocation add ast_VIP01 with ast_service01 INFINITY
pcs -f clust_cfg constraint colocation add ast_VIP01 with httpd_service01 INFINITY
 
pcs -f clust_cfg constraint order mysql_service01 then ast_VIP01
 
pcs -f clust_cfg constraint
pcs -f clust_cfg resource show
pcs cluster cib-push clust_cfg

Вот пример: (*) Узнаем что первая нода мастер:

[root@ast1 ~]# pcs resource show
 Master/Slave Set: AstClone01 [ast_data01]
     Masters: [ ast1 ]
     Slaves: [ ast2 ]
 ast_fs01	(ocf::heartbeat:Filesystem):	Started ast1
 ast_fs02	(ocf::heartbeat:Filesystem):	Started ast1
 ast_fs03	(ocf::heartbeat:Filesystem):	Started ast1
 ast_fs04	(ocf::heartbeat:Filesystem):	Started ast1
 mysql_service01	(ocf::heartbeat:mysql):	Started ast1
 ast_service01	(ocf::heartbeat:asterisk):	Started ast1
 httpd_service01	(ocf::heartbeat:apache):	Started ast1
 ast_VIP01	(ocf::heartbeat:IPaddr2):	Started ast1

Теперь отключаем сетевой адаптер мастер ноды, чтобы все ресурсы переехали на слейв:

 service network stop

Вторая нода превращается из слейва в мастер и все ресурсы переезжают на нее:

[root@ast2 ~]# pcs resource show
 Master/Slave Set: AstClone01 [ast_data01]
     Masters: [ ast2 ]
     Stopped: [ ast1 ]
 ast_fs01	(ocf::heartbeat:Filesystem):	Started ast2
 ast_fs02	(ocf::heartbeat:Filesystem):	Started ast2
 ast_fs03	(ocf::heartbeat:Filesystem):	Started ast2
 ast_fs04	(ocf::heartbeat:Filesystem):	Started ast2
 mysql_service01	(ocf::heartbeat:mysql):	Started ast2
 ast_service01	(ocf::heartbeat:asterisk):	Started ast2
 httpd_service01	(ocf::heartbeat:apache):	Started ast2

Теперь если включить сетевой адаптер мастер ноды, который мы до этого отключили командой «service stop network», упавший мастер перехватывает все ресурсы слейва.

Хочется чтобы упавший мастер, если его он восстановлен, не перетягивал все ресурсы на себя автоматически. Я думаю этот процесс должен быть ручным.

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

ок, ТС, смотри, есть два варианта.

первый - stickiness. в этом случае pcmk не будет никуда переезжать даже при поднятии старого мастера.

второй - можешь написать мелкий агент-блокер. суть проста - это должен быть агент которого ты можешь запустить только руками, и на него завязаны constraints. без него переезд невозможен. вариант - скажем он запускается только с определенным env или читает файл из tmpfs. но этот вариант имеет смысл юзать только в хитрых случаях.

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

Так мне просто можно задать деволтный stickiness, так:

pcs resource defaults resource-stickiness=100

Или требуется задавать для каждого ресурса:

pcs resource create VirtualIP ocf:heartbeat:IPaddr2 ip=192.168.0.120 cidr_netmask=24 meta resource-stickiness=50

Что-то с первого раза дефотный не работает.

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

зависит от того как constraints заданы. грубо говоря если вся твоя обвязка прибита гвоздями к vip, до задавай ему. в целом дефолт тоже должен работать.

upcFrost ★★★★★ ()

У меня сейчас вся эта связка крутится на двух виртуальных машинах VBOX.

Для имитации падения мастера в VBOX просто ставлю машину на паузу. После чего ресурсы уходят на слейв.

Далее если сразу мастера оживить, убрать паузу. Ресурсы переходят на ожившего мастера.

Но, если не ставить на паузу, а сделать реальную перезагрузку или отключит машину (ВМ), все работает как надо. Ни какого переезда нет.

Видимо ставить на паузу ВМ не есть гуд.

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