Я пытаюсь воссоздать полную настройку кластера с нуля с помощью марионетки. Все до этого момента работает, но теперь кластер не продвигает ресурс DRBD ни на одном из узлов.
Это рабочая конфигурация кластера, которую я пытаюсь воссоздать:
primitive drbd_mysql ocf:linbit:drbd \
params drbd_resource="r0" \
op monitor interval="60s" role="Master" \
op monitor interval="61s" role="Slave"
primitive fs_mysql ocf:heartbeat:Filesystem \
params device="/dev/drbd/by-res/r0" directory="/var/lib/mysql/" fstype="ext4"
primitive ip_mysql ocf:heartbeat:IPaddr2 \
params ip="10.0.7.20" cidr_netmask="24" nic="eth0" \
op monitor interval="120s" timeout="60s"
primitive mysqld ocf:heartbeat:mysql \
params binary="/usr/bin/mysqld_safe" \
op start interval="0" timeout="120" \
op stop interval="0" timeout="120" \
op monitor interval="10" timeout="30" depth="0"
group mysql fs_mysql ip_mysql mysqld
ms ms_drbd_mysql drbd_mysql \
meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true" target-role="Master"
colocation mysql_on_drbd inf: mysql ms_drbd_mysql:Master
order mysql_after_drbd inf: ms_drbd_mysql:promote mysql:start
Это результат марионеточного рецепта:
primitive drbd_mysql ocf:linbit:drbd \
op monitor interval=60s role=Master \
params drbd_resource=r0
primitive fs_mysql Filesystem \
params device="/dev/drbd/by-res/r0" directory="/var/lib/mysql/" fstype=ext4
primitive ip_mysql IPaddr2 \
op monitor interval=120s timeout=60s \
params ip=10.0.7.20 cidr_netmask=24 nic=eth0
primitive mysqld mysql \
op monitor interval=30 timeout=30 \
op start interval=0 timout=120 \
op stop interval=0 timout=120 \
params binary="/usr/bin/mysqld_safe"
group mysql fs_mysql ip_mysql mysqld
ms ms_drbd_mysql drbd_mysql \
meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true target-role=Master
order mysql_after_drbd inf: ms_drbd_mysql:promote mysql:start symmetrical=true
colocation mysql_on_drbd inf: ms_drbd_mysql:Master mysql
Единственные отличия, которые я могу заметить, это то, что
Насколько я понимаю, colo не имеет значения, поскольку он просто указывает, что оба ресурса ДОЛЖНЫ работать на одном узле, но не означает, что они должны работать в каком-либо определенном порядке. Вот для чего нужен ресурс заказа.
«Симметричный = истина» просто означает, что mysql должен быть остановлен, прежде чем другой узел сможет быть продвинут в ресурсе ms. Это тоже не должно иметь значения.
Это оставляет нам отсутствующую операцию монитора. Это конфигурация марионетки, которая приводит к такому результату:
cs_primitive { 'drbd_mysql':
primitive_class => 'ocf',
provided_by => 'linbit',
primitive_type => 'drbd',
parameters => { 'drbd_resource' => 'r0' },
promotable => true,
operations => { 'monitor' => { 'interval' => '60s', 'role' => 'Master'},
# 'monitor' => { 'interval' => '61s', 'role' => 'Slave' },
}, # end operations
ms_metadata => { 'master-max' => '1',
'master-node-max' => '1',
'clone-max' => '2',
'clone-node-max' => '1',
'notify' => 'true',
'target-role' => 'Master',
}, # end MS_metadata
}
Да, в этом конфиге есть является вторая операция монитора, и она закомментирована. Если я не комментирую это, ведомый монитор работает с интервалом 61 с. заменяет мастер op.
(Примечание: Corosync / Pacemaker отклоняет конфигурацию, если оба имеют одинаковое значение для интервала.)
Как я могу получить обе операции монитора из марионетки в конфигурации кластера?
Что-то еще не так с конфигурацией, что вы можете заметить?
Оказалось, что ответ был довольно прост, как только я его нашел. Вам нужно предоставить рассматриваемой операции массив значений:
operations => { 'monitor' =>
[ { 'interval' => '60s', 'role' => 'Master'},
{ 'interval' => '61s', 'role' => 'Slave' },
]
},