我正在尝试使用 puppet 从空白处重新创建完整的集群设置。到目前为止,一切都正常,但现在集群不会在任何一个节点上提升 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
我发现的唯一区别是
- 缺少 drbd 资源的从属监视操作
- 主机托管的资源被切换
- pupped 在订单资源中添加了默认值“symmetrical=true”
根据我的理解,colo 应该无关紧要,因为它只是指定两种资源必须在同一节点上运行,但并不意味着它们必须按照任何特定顺序运行。这就是 order 资源的用途。
“symmetrical=true” 只是意味着必须先停止 mysql,然后才能在 ms 资源中提升另一个节点。这也不重要。
这就剩下缺少的监控操作了。这是导致此结果的 puppet 配置:
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 秒的从属监视器操作取代主操作
(旁注:如果两者的间隔值相同,Corosync/Pacemaker 将拒绝配置。)
我怎样才能将 Puppet 的两个监视操作纳入集群配置中?
您能发现配置中还有其他错误吗?
答案1
一旦我找到答案,就会发现答案非常简单。您需要为相关操作提供一个值数组:
operations => { 'monitor' =>
[ { 'interval' => '60s', 'role' => 'Master'},
{ 'interval' => '61s', 'role' => 'Slave' },
]
},