Puppet
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
這是 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' }, ] },