Puppet

Puppet:DRBD 資源未在 Corosync/Pacemaker 中推廣

  • August 10, 2016

我正在嘗試使用 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

這是 puppet 配方的結果:

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 在訂單資源中添加了預設值“對稱=真”

根據我的理解,colo 應該無關緊要,因為它只是指定兩個資源必須在同一個節點上執行,但並不意味著它們必須以任何特定的順序執行。這就是訂單資源的用途。

“對稱=真”只是意味著必須先停止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 中的兩個監控操作都放入集群配置中?

您可以發現的配置還有其他問題嗎?

原來答案很簡單,一旦我找到它。您需要為有問題的操作提供一組值:

operations      => {  'monitor' =>  
                       [ { 'interval'  =>  '60s', 'role' =>  'Master'},
                         { 'interval'  =>  '61s', 'role' =>  'Slave' },
                       ] 
                  },

引用自:https://serverfault.com/questions/795973