Puppet:DRBD 资源未在 Corosync/Pacemaker 中推广

Puppet:DRBD 资源未在 Corosync/Pacemaker 中推广

我正在尝试使用 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' },
                        ] 
                   },

相关内容