ocf:heartbeat:apacheでZabbixのレスポンスチェックではまった

 article  Comments Off on ocf:heartbeat:apacheでZabbixのレスポンスチェックではまった
Sep 282018
 

CentOS 7.5のPacemaker/Corosync環境でZabbix 4.0のHA構成を試していていたら、ocf:heartbeat:apacheを使ったhttpdの起動がうまくいかなかった。
クラスターリソースは以下で作成している。

pcs resource create WebSite ocf:resource:apache statusurl="http://localhost/zabbix/" client=curl

Apacheのアクセスログではステータスコード200も返っているのに、なんでかなと思ったら、返答されるHTMLの終端タグ</html>が含まれていないからだった(curl http://localhost/zabbix/の応答が</body>で終わってる)。

pcs resource update WebSite testregex="< *html *>"

とやって解決。

PacemakerでMySQLレプリケーション構成 – CentOS7+MariaDB編

 article  Comments Off on PacemakerでMySQLレプリケーション構成 – CentOS7+MariaDB編
Mar 072015
 

以前書いた「PacemakerでMySQLレプリケーション構成」のCentOS7+MariaDB環境用です。
CentOS7になってMySQLがMariaDBになったこと、pcsコマンドのオプションが若干変更になっていることが主な変更点になります。

最近のmysqlリソースエージェントでは、MySQLデータベースをMaster/Slaveセットとして構成することができます。
DRBD同様、TakeoverによってReplicationのMaster/Slaveを入れ替えることが可能となります。

ということで、CentOS 7のPacemakerを使ってMariaDBデータベースをMaster/Slaveセットとして構成してみました。

セットアップする環境は以下になります。PacemakerとCorosync一式はCentOS提供のパッケージをインストールしクラスター構成済みです。

  • 1号機:pcmk11 (CentOS 7.0.1406 x86_64)
  • 2号機:pcmk12 (CentOS 7.0.1406 x86_64)

レプリケーションの設定

まずはPacemaker範囲外で、MariaDBをインストールしてレプリケーションを構成します。ただしCHANGE MASTER TOは実施しません。
MariaDBのレプリケーション構成手順の詳細は公式ドキュメントを参照してください。
https://mariadb.com/kb/en/mariadb/setting-up-replication/

MariaDBのインストールおよび設定

MariaDBをインストールし設定します。

[root@pcmk11 ~]# yum -y install mariadb-server
[root@pcmk11 ~]# vi /etc/my.cnf

/etc/my.cnfは[mysqld]セクションに以下を追加します。server-idは1とします。

log-bin=mariadb-bin
server-id=1

2号機も同様です。

[root@pcmk12 ~]# yum -y install mysql-server
[root@pcmk12 ~]# vi /etc/my.cnf

/etc/my.cnfは[mysqld]セクションに以下を追加します。server-idは2とします。

log-bin=mariadb-bin
server-id=2

レプリケーションユーザーの作成

1号機側のみで作業します。まずMySQLを起動します。

[root@pcmk11 ~]# systemctl start mariadb.service

レプリケーションユーザーを作成します。

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'slavepass';

アクセス元をもっと厳格に限定したい場合は、ホスト部分を環境にあわせて設定してください。

mysqlリソースエージェントでは、通常のレプリケーション以外にもread-onlyに切り替える権限をもったユーザーが必要になるため、localhostでもレプリケーションユーザーを作成します。

mysql> GRANT PROCESS, SUPER, REPLICATION SLAVE, REPLICATION CLIENT, RELOAD ON *.* TO 'repl'@'localhost' IDENTIFIED BY 'slavepass';

ユーザーを作成したら反映します。

mysql> FLUSH PRIVILEGES;

これらの権限が必要な理由についてはリソースエージェントで以下のように説明されています。

<parameter name="replication_user" unique="0" required="0">
<longdesc lang="en">
MySQL replication user. This user is used for starting and stopping
MySQL replication, for setting and resetting the master host, and for
setting and unsetting read-only mode. Because of that, this user must
have SUPER, REPLICATION SLAVE, REPLICATION CLIENT, and PROCESS
privileges on all nodes within the cluster. Mandatory if you define
a master-slave resource.
</longdesc>
<shortdesc lang="en">MySQL replication user</shortdesc>
<content type="string" default="${OCF_RESKEY_replication_user_default}" />
</parameter>

MariaDBを停止してデータベースファイル一式を2号機にコピーします。

[root@pcmk11 ~]# systemctl stop mariadb.service
[root@pcmk11 ~]# ssh pcmk12 rm -rf /var/lib/mysql
[root@pcmk11 ~]# tar cf - -C /var/lib mysql | ssh pcmk12 tar xpvf - -C /var/lib/ 

クラスターリソースのセットアップ

最初にSlaveとして稼働させる2号機をStandbyにします。

[root@pcmk12 ~]# pcs cluster standby pcmk12

クラスターリソースを登録します。

[root@pcmk11 ~]# pcs cluster cib mysql_repl
[root@pcmk11 ~]# pcs -f mysql_repl resource create mysql ocf:heartbeat:mysql
[root@pcmk11 ~]# pcs -f mysql_repl resource update mysql binary=/usr/bin/mysqld_safe
[root@pcmk11 ~]# pcs -f mysql_repl resource update mysql datadir=/var/lib/mysql
[root@pcmk11 ~]# pcs -f mysql_repl resource update mysql log=/var/log/mariadb/mariadb.log
[root@pcmk11 ~]# pcs -f mysql_repl resource update mysql pid=/run/mariadb/mariadb.pid
[root@pcmk11 ~]# pcs -f mysql_repl resource update mysql replication_user=repl
[root@pcmk11 ~]# pcs -f mysql_repl resource update mysql replication_passwd=slavepass
[root@pcmk11 ~]# pcs -f mysql_repl resource op add mysql start interval=0 timeout=120s
[root@pcmk11 ~]# pcs -f mysql_repl resource op add mysql stop interval=0 timeout=120s
[root@pcmk11 ~]# pcs -f mysql_repl resource op add mysql monitor interval=20s timeout=30s
[root@pcmk11 ~]# pcs -f mysql_repl resource op add mysql monitor interval=10s role=Master timeout=30s
[root@pcmk11 ~]# pcs -f mysql_repl resource op add mysql monitor interval=30s role=Slave timeout=30s
[root@pcmk11 ~]# pcs -f mysql_repl resource op add mysql promote interval=0 timeout=120s
[root@pcmk11 ~]# pcs -f mysql_repl resource op add mysql demote interval=0 timeout=120s
[root@pcmk11 ~]# pcs -f mysql_repl resource op add mysql notify interval=0 timeout=90s
[root@pcmk11 ~]# pcs cluster cib-push mysql_repl

operation timeoutの設定はmysql RAの推奨値を設定しています。

Master/Slaveセットを作成します。

[root@pcmk11 ~]# pcs resource master mysql-clone mysql master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true

クラスターリソースを開始します。

[root@pcmk11 ~]# pcs resource start mysql-clone

1号機がMasterとして起動します。

[root@pcmk11 ~]# crm_mon -1
Last updated: Fri Mar  7 01:26:21 2015
Last change: Fri Mar  7 09:49:24 2015 via crm_attribute on pcmk11
Stack: corosync
Current DC: pcmk11 (1) - partition with quorum
Version: 1.1.8-7.el6-394e906
2 Nodes configured
2 Resources configured


Node pcmk12: standby
Online: [ pcmk11 ]

 Master/Slave Set: mysql-clone [mysql]
     Masters: [ pcmk11 ]
     Stopped: [ mysql:1 ]
[root@pcmk11 ~]#

2号機のStandbyを解除します。

[root@pcmk11 ~]# pcs cluster unstandby pcmk12

2号機がSlaveのレプリケーション構成としてMySQLが起動します。

[root@pcmk11 ~]# crm_mon -1
Last updated: Fri Mar  7 01:26:21 2015
Last change: Fri Mar  7 00:49:24 2015 via crm_attribute on pcmk11
Stack: corosync
Current DC: pcmk11 (1) - partition with quorum
Version: 1.1.8-7.el6-394e906
2 Nodes configured
2 Resources configured


Online: [ pcmk11 pcmk12 ]

 Master/Slave Set: mysql-clone [mysql]
     Masters: [ pcmk11 ]
     Slaves: [ pcmk12 ]
[root@pcmk11 ~]#

起動時の/var/log/mariadb/mariadb.logを確認すると、CHANGE MASTER TOが実行されていることがわかります。

Version: '5.5.41-MariaDB-log'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MariaDB Server
150306  9:51:04 [Note] Slave SQL thread initialized, starting replication in log 'mariadb-bin.000001' at position 1435816, relay log '/var/lib/mysql/mariadb-relay-bin.000002' position: 1436102
150306  9:51:04 [Note] Slave I/O thread: connected to master 'repl@pcmk11:3306',replication started in log 'mariadb-bin.000001' at position 1435816

あとはpcs cluster standby pcmk11コマンドでMaster側をStandbyにするとMasterが切り替わります。
Masterが切り替わったらpcs cluster unstandby pcmk11してStandby解除するとpcmk11はSlaveとして稼働を開始します。

また、cib.xmlを見てみるとバイナリログの位置情報がcluster_property_setとして記録されていることがわかります。

<cluster_property_set id="mysql_replication">
  <nvpair id="mysql_replication-mysql_REPL_INFO" name="mysql_REPL_INFO" value="pcmk11|mariadb-bin.000002|245"/>
</cluster_property_set>

人手で確認してCHANGE MASTER TOを実行する必要がないため、セットアップも非常に楽になります。

ping疎通ノードにMasterを強制

 article  Comments Off on ping疎通ノードにMasterを強制
May 302013
 

Master/Slaveセットのリソースにおいて、ネットワーク疎通がOKなノードのみがMasterになれるようにするために、以下に掲載されているlocation制約を設ける方法がありました。
DRBD HowTo 1.0 – ClusterLabs

上記はcrmコマンドで設定する手順なのですが、pcsコマンドでは同様のことを定義する方法がわかりません。
MLでも質問が出ていますが、明確な回答は出ていないようです。
pcs group colocation and ping rules | Linux-HA | Pacemaker

仕方ないので、crmコマンドで定義した際に生成される内容をXMLで用意して、直接cibadminで登録しています。

# cat location-ping.xml
<constraints>
  <rsc_location id="ms-drbd-0_master_on_connected_node" rsc="ms-drbd0">
    <rule boolean-op="or" id="ms-drbd-0_master_on_connected_node-rule" role="Master" score="-INFINITY">
      <expression attribute="pingd" id="ms-drbd-0_master_on_connected_node-expression" operation="not_defined"/>
      <expression attribute="pingd" id="ms-drbd-0_master_on_connected_node-expression-0" operation="lte" value="0"/>
    </rule>
  </rsc_location>
</constraints>
# cibadmin -U -x location-ping.xml
# pcs constraint all
Location Constraints:
  Resource: ms-drbd0
    Rule: pingd not_defined  (score:-INFINITY) (id:ms-drbd-0_master_on_connected_node)
    Rule: pingd lte 0 (score:-INFINITY) (id:ms-drbd-0_master_on_connected_node)
Ordering Constraints:
Colocation Constraints:
#

PacemakerでMySQLレプリケーション構成

 article  Comments Off on PacemakerでMySQLレプリケーション構成
May 262013
 

最近のmysqlリソースエージェントでは、MySQLデータベースをMaster/Slaveセットとして構成することができます。
DRBD同様、TakeoverによってReplicationのMaster/Slaveを入れ替えることが可能となります。

ということで、CentOS 6.4のPacemakerを使ってMySQLデータベースをMaster/Slaveセットとして構成してみました。

セットアップする環境は以下になります。PacemakerとCorosync一式はCentOS提供のパッケージをインストールしクラスター構成済みです。

  • 1号機:pcmk11 (CentOS 6.4 x86_64)
  • 2号機:pcmk12 (CentOS 6.4 x86_64)

レプリケーションの設定

まずはPacemaker範囲外で、MySQLをインストールしてレプリケーションを構成します。ただしCHANGE MASTER TOは実施しません。
MySQLのレプリケーション構成手順の詳細は公式ドキュメントを参照してください。
http://dev.mysql.com/doc/refman/5.1/ja/replication-howto.html

MySQLのインストールおよび設定

MySQLをインストールし設定します。

[root@pcmk11 ~]# yum -y install mysql-server
[root@pcmk11 ~]# vi /etc/my.cnf

/etc/my.cnfは[mysqld]セクションに以下を追加します。server-idは1とします。

log-bin=mysql-bin
server-id=1

2号機も同様です。

[root@pcmk12 ~]# yum -y install mysql-server
[root@pcmk12 ~]# vi /etc/my.cnf

/etc/my.cnfは[mysqld]セクションに以下を追加します。server-idは2とします。

log-bin=mysql-bin
server-id=2

レプリケーションユーザーの作成

1号機側のみで作業します。まずMySQLを起動します。

[root@pcmk11 ~]# service mysqld start

レプリケーションユーザーを作成します。

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'slavepass';

アクセス元をもっと厳格に限定したい場合は、ホスト部分を環境にあわせて設定してください。

mysqlリソースエージェントでは、通常のレプリケーション以外にもread-onlyに切り替える権限をもったユーザーが必要になるため、localhostでもレプリケーションユーザーを作成します。

mysql> GRANT SUPER,REPLICATION SLAVE,REPLICATION CLIENT,PROCESS ON *.* TO 'repl'@'localhost' IDENTIFIED BY 'slavepass';

ユーザーを作成したら反映します。

mysql> FLUSH PRIVILEGES;

これらの権限が必要な理由についてはリソースエージェントで以下のように説明されています。

<parameter name="replication_user" unique="0" required="0">
<longdesc lang="en">
MySQL replication user. This user is used for starting and stopping
MySQL replication, for setting and resetting the master host, and for
setting and unsetting read-only mode. Because of that, this user must
have SUPER, REPLICATION SLAVE, REPLICATION CLIENT, and PROCESS
privileges on all nodes within the cluster.
</longdesc>
<shortdesc lang="en">MySQL replication user</shortdesc>
<content type="string" default="${OCF_RESKEY_replication_user_default}" />
</parameter>

mysqlを停止してデータベースファイル一式を2号機にコピーします。

[root@pcmk11 ~]# service mysqld stop
[root@pcmk11 ~]# ssh pcmk12 rm -rf /var/lib/mysql
[root@pcmk11 ~]# tar cf - -C /var/lib mysql | ssh pcmk12 tar xpvf - -C /var/lib/ 

クラスターリソースのセットアップ

最初にSlaveとして稼働させる2号機をStandbyにします。

[root@pcmk12 ~]# pcs cluster standby pcmk12

クラスターリソースを登録します。

[root@pcmk11 ~]# pcs cluster cib mysql_repl
[root@pcmk11 ~]# pcs -f mysql_repl resource create mysql ocf:heartbeat:mysql binary=/usr/bin/mysqld_safe pid=/var/run/mysqld/mysqld.pid
[root@pcmk11 ~]# pcs -f mysql_repl resource update mysql replication_user=repl
[root@pcmk11 ~]# pcs -f mysql_repl resource update mysql replication_passwd=slavepass
[root@pcmk11 ~]# pcs -f mysql_repl resource add_operation mysql start interval=0 timeout=120s
[root@pcmk11 ~]# pcs -f mysql_repl resource add_operation mysql stop interval=0 timeout=120s
[root@pcmk11 ~]# pcs -f mysql_repl resource add_operation mysql monitor interval=20s timeout=30s
[root@pcmk11 ~]# pcs -f mysql_repl resource add_operation mysql monitor interval=10s role=Master timeout=30s
[root@pcmk11 ~]# pcs -f mysql_repl resource add_operation mysql monitor interval=30s role=Slave timeout=30s
[root@pcmk11 ~]# pcs -f mysql_repl resource add_operation mysql promote interval=0 timeout=120s
[root@pcmk11 ~]# pcs -f mysql_repl resource add_operation mysql demote interval=0 timeout=120s
[root@pcmk11 ~]# pcs -f mysql_repl resource add_operation mysql notify interval=0 timeout=90s
[root@pcmk11 ~]# pcs cluster push cib mysql_repl

operation timeoutの設定はmysql RAの推奨値を設定しています。

Master/Slaveセットを作成します。

[root@pcmk11 ~]# pcs resource master mysql-clone mysql master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true

クラスターリソースを開始します。

[root@pcmk11 ~]# pcs resource start mysql-clone

1号機がMasterとして起動します。

[root@pcmk11 ~]# crm_mon -1
Last updated: Mon May 25 20:32:52 2013
Last change: Mon May 25 20:07:59 2013 via crm_attribute on pcmk11
Stack: classic openais (with plugin)
Current DC: pcmk11 - partition with quorum
Version: 1.1.8-7.el6-394e906
2 Nodes configured, 2 expected votes
2 Resources configured.


Node pcmk12: standby
Online: [ pcmk11 ]

 Master/Slave Set: mysql-clone [mysql]
     Masters: [ pcmk11 ]
     Stopped: [ mysql:1 ]
[root@pcmk11 ~]#

2号機のStandbyを解除します。

[root@pcmk11 ~]# pcs cluster unstandby pcmk12

2号機がSlaveのレプリケーション構成としてMySQLが起動します。

[root@pcmk11 ~]# crm_mon -1
Last updated: Mon May 25 20:46:52 2013
Last change: Mon May 25 20:16:59 2013 via crm_attribute on pcmk11
Stack: classic openais (with plugin)
Current DC: pcmk11 - partition with quorum
Version: 1.1.8-7.el6-394e906
2 Nodes configured, 2 expected votes
2 Resources configured.


Online: [ pcmk11 pcmk12 ]

 Master/Slave Set: mysql-clone [mysql]
     Masters: [ pcmk11 ]
     Slaves: [ pcmk12 ]
[root@pcmk11 ~]#

起動時の/var/log/mysqld.logを確認すると、CHANGE MASTER TOが実行されていることがわかります。

130525 21:07:40 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
InnoDB: The InnoDB memory heap is disabled
InnoDB: Mutexes and rw_locks use GCC atomic builtins
InnoDB: Compressed tables use zlib 1.2.3
130525 21:07:40  InnoDB: Initializing buffer pool, size = 128.0M
130525 21:07:41  InnoDB: Completed initialization of buffer pool
130525 21:07:41  InnoDB: highest supported file format is Barracuda.
130525 21:07:41 InnoDB Plugin 5.1.69 started; log sequence number 262393953
130525 21:07:41 [Note] Event Scheduler: Loaded 0 events
130525 21:07:41 [Note] /usr/libexec/mysqld: ready for connections.
Version: '5.1.69-log'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  Source distribution
130525 21:07:44 [Note] 'CHANGE MASTER TO executed'. Previous state master_host='', master_port='3306', master_log_file='', master_log_pos='4'. New state master_host='pcmk11', master_port='3306', master_log_file='', master_log_pos='4'.
130525 21:07:44 [Note] Slave SQL thread initialized, starting replication in log 'FIRST' at position 0, relay log '/var/lib/mysql/mysql-relay.000001' position: 4
130525 21:07:44 [Note] Slave I/O thread: connected to master 'repl@pcmk11:3306',replication started in log 'FIRST' at position 4

あとはpcs cluster standby pcmk11コマンドでMaster側をStandbyにするとMasterが切り替わります。
Masterが切り替わったらpcs cluster unstandby pcmk11してStandby解除するとpcmk11はSlaveとして稼働を開始します。

また、cib.xmlを見てみるとバイナリログの位置情報がノードの属性として記録されていることがわかります。

<nodes>
  <node id="pcmk12" uname="pcmk12">
    <instance_attributes id="nodes-pcmk12">
      <nvpair id="nodes-pcmk12-pcmk11-log-file-mysql" name="pcmk11-log-file-mysql" value="mysql-bin.000001"/>
      <nvpair id="nodes-pcmk12-pcmk11-log-pos-mysql" name="pcmk11-log-pos-mysql" value="1320619"/>
    </instance_attributes>
  </node>
  <node id="pcmk11" uname="pcmk11">
    <instance_attributes id="nodes-pcmk11"/>
  </node>
</nodes>

人手で確認してCHANGE MASTER TOを実行する必要がないため、セットアップも非常に楽になります。

corosync-notifydでSNMPトラップ送信

 article  Comments Off on corosync-notifydでSNMPトラップ送信
Apr 182013
 

corosync-notifydを使って何が通知されるのか試してみました。

corosync-notifydを-sオプションで起動して、localhostにSNMPトラップを送信するようにします。

[root@pcmk-1 ~]# vi /etc/sysconfig/corosync-notifyd
[root@pcmk-1 ~]# cat /etc/sysconfig/corosync-notifyd
OPTIONS="-s"
[root@pcmk-1 ~]# chkconfig corosync-notifyd on
[root@pcmk-1 ~]# service corosync-notifyd start

snmptrapdをインストールして起動します。
お試しなので認証は無効にして、届いたトラップをそのままメールにするようにしました。
メール送信にはnet-snmp-perlパッケージのtraptoemailを使用します。

[root@pcmk-1 ~]# yum -y install net-snmp net-snmp-perl
[root@pcmk-1 ~]# cp -p /etc/snmp/snmptrapd.conf{,.orig}
[root@pcmk-1 ~]# vi /etc/snmp/snmptrapd.conf
[root@pcmk-1 ~]# cat /etc/snmp/snmptrapd.conf
# Example configuration file for snmptrapd
#
# No traps are handled by default, you must edit this file!
#
# authCommunity   log,execute,net public
# traphandle SNMPv2-MIB::coldStart    /usr/bin/bin/my_great_script cold

disableAuthorization yes
traphandle default /usr/bin/traptoemail root
[root@pcmk-1 ~]# chkconfig snmptrapd on
[root@pcmk-1 ~]# service snmptrapd start

corosync-notifydでノードの停止、起動を検知すると、以下のようなメールが飛びました。

1号機で2号機側の停止を検知した場合

To: root@pcmk-1.localdomain
From: root@pcmk-1.localdomain
Subject: trap received from localhost: SNMPv2-SMI::enterprises.35488.0.1

Host: localhost (UDP: [127.0.0.1]:58523->[127.0.0.1])
DISMAN-EVENT-MIB::sysUpTimeInstance  158:2:59:34.68
          SNMPv2-MIB::snmpTrapOID.0  SNMPv2-SMI::enterprises.35488.0.1
  SNMPv2-SMI::enterprises.35488.1.1  "pcmk-2"
  SNMPv2-SMI::enterprises.35488.1.2  365996224
  SNMPv2-SMI::enterprises.35488.1.4  "192.168.208.102"
  SNMPv2-SMI::enterprises.35488.1.3  "left"

1号機で2号機側の起動を検知した場合

To: root@pcmk-1.localdomain
From: root@pcmk-1.localdomain
Subject: trap received from localhost: SNMPv2-SMI::enterprises.35488.0.1

Host: localhost (UDP: [127.0.0.1]:58523->[127.0.0.1])
DISMAN-EVENT-MIB::sysUpTimeInstance  158:2:59:34.68
          SNMPv2-MIB::snmpTrapOID.0  SNMPv2-SMI::enterprises.35488.0.1
  SNMPv2-SMI::enterprises.35488.1.1  "pcmk-2"
  SNMPv2-SMI::enterprises.35488.1.2  365996224
  SNMPv2-SMI::enterprises.35488.1.4  "192.168.208.102"
  SNMPv2-SMI::enterprises.35488.1.3  "joined"

Pacemaker + drbdでリソースレベルフェンシング

 article  Comments Off on Pacemaker + drbdでリソースレベルフェンシング
Aug 142012
 

Pacemaker + drbdの構成でリソースレベルフェンシングをやってみました。
8.3. Using resource-level fencing in Pacemaker clusters

drbdのリソースに以下を設定してみます。

resource <resource> {
  disk {
    fencing resource-only;
    ...
  }
  handlers {
    fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
    after-resync-target "/usr/lib/drbd/crm-unfence-peer.sh";
    ...
  }
  ...
}

Masterな状態で動作している1号機(pcmk-1)のN/Wを切断すると2号機(pcmk-2)がMasterになります。
その際以下のlocationが設定されてpcmk-2以外のスコアが-INFINITYに設定されることが確認できました。

<rsc_location rsc="WebDataClone" id="drbd-fence-by-handler-wwwdata-WebDataClone">
  <rule role="Master" score="-INFINITY" id="drbd-fence-by-handler-wwwdata-rule-WebDataClone">
    <expression attribute="#uname" operation="ne" value="pcmk-2" id="drbd-fence-by-handler-wwwdata-expr-WebDataClone"/>
  </rule>
</rsc_location>

この状態で1号機が復活しても、cibには上記locationが設定されているのでMasterになれないことになります。
データが同期されるとafter-resync-target指定のスクリプトが実行され、locationの制約が削除されます。

Dual-Primay DRBD + GFS2

 article  Comments Off on Dual-Primay DRBD + GFS2
Jul 162012
 

CentOS 6.3でDual-Primary DRBDな環境を作ってみたときのメモ。
PacemakerとCorosyncは、そのままyumでインストールするとぞれぞれ1.1.7と1.4.1だったので以下の手順でチャレンジ。
Clusters from Scratch
drbdは8.4.1のソースからrpmをビルドして、drbd-km/drbd-pacemaker/drbd-udev/drbd-utilsをインストールしている。

で、ほぼ問題なく進んだものの、8.5章の部分でWebIPクローンセットが1つのノードで実行されてしまい、Active/Active状態にならない(drbd自体はDual-Primaryで動作している)。
crm_monでリソースをみると以下の状態で、要はWebIPが2号機のほうでStartしないので、WebSiteClone(ApacheのRAクローンセット)も2号機側で動作しない状態となっているようだ。

============
Last updated: Mon Jul 15 22:05:23 2012
Last change: Mon Jul 15 20:35:32 2012 via cibadmin on pcmk-1
Stack: cman
Current DC: pcmk-1 - partition with quorum
Version: 1.1.7-6.el6-148fccfd5985c5590cc601123c6c16e966b85d14
2 Nodes configured, 2 expected votes
8 Resources configured.
============

Online: [ pcmk-1 pcmk-2 ]

 Master/Slave Set: WebDataClone [WebData]
     Masters: [ pcmk-1 pcmk-2 ]
 Clone Set: WebIP [ClusterIP] (unique)
     ClusterIP:0        (ocf::heartbeat:IPaddr2):       Started pcmk-1
     ClusterIP:1        (ocf::heartbeat:IPaddr2):       Started pcmk-1
 Clone Set: WebFSClone [WebFS]
     Started: [ pcmk-1 pcmk-2 ]
 Clone Set: WebSiteClone [WebSite]
     Started: [ pcmk-1 ]
     Stopped: [ WebSite:1 ]

なんでかなーと思っていろいろ悩んだが、結局WebIPクローンセットのclone-node-maxを1に変更してみたらうまくいった。

clone WebIP ClusterIP meta globally-unique="true" clone-max="2" clone-node-max="2"
clone WebIP ClusterIP meta globally-unique="true" clone-max="2" clone-node-max="1"
============
Last updated: Mon Jul 15 23:46:47 2012
Last change: Mon Jul 15 20:35:32 2012 via cibadmin on pcmk-1
Stack: cman
Current DC: pcmk-1 - partition with quorum
Version: 1.1.7-6.el6-148fccfd5985c5590cc601123c6c16e966b85d14
2 Nodes configured, 2 expected votes
8 Resources configured.
============

Online: [ pcmk-1 pcmk-2 ]

 Master/Slave Set: WebDataClone [WebData]
     Masters: [ pcmk-1 pcmk-2 ]
 Clone Set: WebIP [ClusterIP] (unique)
     ClusterIP:0        (ocf::heartbeat:IPaddr2):       Started pcmk-1
     ClusterIP:1        (ocf::heartbeat:IPaddr2):       Started pcmk-2
 Clone Set: WebFSClone [WebFS]
     Started: [ pcmk-1 pcmk-2 ]
 Clone Set: WebSiteClone [WebSite]
     Started: [ pcmk-1 pcmk-2 ]

WebIPのclone-node-maxを1にしてみたのはWebDataCloneを模倣してみたからなのだが自分でも理解不能。。。

そもそもCluster用IPアドレスをクローンして各ノードに付与している意味が理解できない。
普通のHAクラスタならIPはクローンセットせずに1ノードだけに付与するのだけれど。実際の使い方として何が正しいのか、まだまだ勉強が必要です。

リソースを停止せずにクラスタウェアを停止する方法

 article  Comments Off on リソースを停止せずにクラスタウェアを停止する方法
Jul 162012
 

大抵のクラスタウェアでは管理対象となっているリソースを止めずにクラスタウェアを停止する方法が用意されています。
主にクラスタウェア自身をメンテナンス停止するために用意されているのですが調べたものをいくつか紹介。

Pacemaker

管理対象から外す設定を実施する。リソース全体もしくはリソース個別に設定できる。

  1. 管理対象から外すコマンド
    リソース全体

    crm_attribute -t crm_config -n is-managed-default -v false
    

    リソース個別

    crm_resource -t primitive -r <rsc_id> -p is-managed -v false
    
  2. PacemakerやCorosyncを停止してメンテナンス等を実施
  3. 管理を再開するコマンド
    リソース全体

    crm_attribute -t crm_config -n is-managed-default -v true
    

    リソース個別

    crm_resource -t primitive -r <rsc_id> -p is-managed -v true
    

参考

  • http://www.clusterlabs.org/doc/en-US/Pacemaker/1.1/html/Pacemaker_Explained/s-upgrade-reattach.html

HP Serviceguard

A.11.20以降であればLive Application Detach (LAD)機能で対応している模様。
chhaltclコマンドを-dオプション指定で実行すると管理対象リソースは動作したままServiceGuardが停止する。

cmhaltcl -d

再開は

cmruncl

参考

  • http://h50146.www5.hp.com/products/software/oe/hpux/component/ha/sgm_sol.html
  • http://www.hpuxtips.es/?q=node/268

LifeKeeper

lkstopコマンドを-fオプション指定で実行する。

lkstop -f

再開は

lkstart

DRBDのMaster/Slave Setを手動で切り替える方法

 article  Comments Off on DRBDのMaster/Slave Setを手動で切り替える方法
Mar 072011
 

drbdsetupコマンドでprimary/secondaryにする操作はよく見かけますが、Pacemaker上のMaster/Slave Setで切り替える方法はないんだろうかと散策していたら、PacemakerのMLで同じような質問している方を発見しました。
[Pacemaker] Move DRBD master
migrateできないんだがどうしたらよいのかという質問で、回答としては次に示すスレッドでのやり方が紹介されています。
[Pacemaker] promote a ms resource to a node

結論としてはlocationでrole=Masterなノードを指定してやることになるようです。
Master/Slave Setがms_drbd0、Masterにしたいノードがnode1であった場合、以下のコマンドにより切り替えることができます。

# crm configure
crm(live)configure# location ms_drbd0-location ms_drbd0 rule role="Master" inf: #uname eq node1
crm(live)configure# commit
crm(live)configure# exit

こちらは定義として残ってしまうので、切り替わったあとは消しておくのが無難かもしれません。

# crm configure
crm(live)configure# delete ms_drbd0-location
crm(live)configure# commit
crm(live)configure# exit