crmコマンドを用いたPacemakaer のリソース設定方法


Pacemaer で制御するリソースを設定するには、crm コマンドを使用します。以下にcrmコマンドの基本的な使い方を記述します。前提として、CentOS 5上にPacemakerのインストールが完了し、Pacemakerが起動しているとします。クラスタ制御部は、Corosync、Heartbeat どちらでも構いません。

まず、crm コマンドを起動します。(以下太字が実際に入力する部分です)

[root@pm01 ~]# crm
crm(live)#

リソースの設定モードに入ります。

crm(live)# configure
crm(live)configure#

現在の設定をshowコマンドで確認します。何も設定をしていないので、表示されるのはノード名(サーバ名)と、バージョン、使用しているクラスタ制御部名(以下の例ではHeartbeat3を使用)だけです。

crm(live)configure# show
node $id="0c140f90-7de3-438f-b1b5-3b9722bbde21" pm01
node $id="62b25071-2d16-4e9e-a323-af21616d5269" pm02
property $id="cib-bootstrap-options" \
        dc-version="1.0.9-89bd754939df5150de7cd76835f98fe90851b677" \
        cluster-infrastructure="Heartbeat"

リソースをPacemakerに追加していきます。

PacemakerにはあらかじめApacheやPostgreSQL, Tomcatといったアプリケーションをはじめ、ファイルシステム、Ping監視といったRA(リソースエージェント)が用意されています。どのようなRAが存在するかは、/usr/lib/ocf/resource.d/heartbeat/ ディレクトリを覗いてみてください。

ここでは、Dummyという「何もしない」リソースを設定してみます。
以下ではタイムアウト値や監視間隔の設定をしていますが、何もしないリソースなので、あまり意味はありません。あくまで参考です。

crm(live)configure# primitive dummy-resource ocf:pacemaker:Dummy \        ← "dummy-resource"は任意の文字列(ID)
> op start interval="0s" timeout="90s" \             ← dummy-resource の起動時のタイムアウト値の設定
> op monitor interval="3s" timeout="20s" \           ← dummy-resource の監視間隔と、タイムアウト値の設定
> op stop interval="0s" timeout="100s"               ← dummy-resource の停止時のタイムアウト値の設定

PacemakerにはSTONITHという機能があり、制御不能のサーバを強制的に電源OFFできます。
デフォルトでSTONITHが有効になっていますが、今回はDummyリソースのみの例のため、STONITHの設定を行いません。
ただし、設定を行わないとERRORになりますので、STONITH機能を明示的にOFFにします。
※実際のサービス環境では、STONITH を使用することを強く薦めます。
また、今回は2台のサーバしか使用しないので、クォーラムをignoreに設定します。

crm(live)configure# property $id="cib-bootstrap-options" \
> stonith-enabled="false"
> no-quorum-policy="ignore"

上記を打ち込んでもすぐには反映されません。まずは、設定した内容を確認します。
※showで表示される内容を別のテキストファイルに保存しておくことで、同じ設定を再現できます

crm(live)configure# show
node $id="0c140f90-7de3-438f-b1b5-3b9722bbde21" pm01
node $id="62b25071-2d16-4e9e-a323-af21616d5269" pm02
primitive dummy-resource ocf:pacemaker:Dummy \
 op start interval="0s" timeout="90s" \
 op monitor interval="3s" timeout="20s" \
 op stop interval="0s" timeout="100s"
property $id="cib-bootstrap-options" \
 dc-version="1.0.9-89bd754939df5150de7cd76835f98fe90851b677" \
 cluster-infrastructure="Heartbeat"
 stonith-enabled="false"
 no-quorum-policy="ignore"

設定を反映します。

crm(live)configure# commit

別のターミナルを開き、Pacemakerの状態を確認します。設定したdummy-resource がpm01上で起動したことが確認できます。

[root@pm01 ~]# crm_mon
============
Last updated: Mon Sep  6 10:10:10 2010
Stack: Heartbeat
Current DC: pm02 (62b25071-2d16-4e9e-a323-af21616d5269) - partition with quorum
Version: 1.0.9-89bd754939df5150de7cd76835f98fe90851b677
2 Nodes configured, unknown expected votes
1 Resources configured.
===========

Online: [ pm01 pm02 ]

dummy-resource  (ocf::pacemaker:Dummy): Started pm01

今回はDummyのリソースなので故障することはありません。
そこで、pm01のサーバの電源を落としてみてください。pm02上でcrm_monを見ると、pm02 上にdummy-resourceがフェイルオーバーしていることを確認できます。

[root@pm02 ~]# crm_mon
============
Last updated: Mon Sep  6 10:10:11 2010
Stack: Heartbeat
Current DC: pm02 (62b25071-2d16-4e9e-a323-af21616d5269) - partition with quorum
Version: 1.0.9-89bd754939df5150de7cd76835f98fe90851b677
2 Nodes configured, unknown expected votes
1 Resources configured.
===========

Online: [ pm02 ]
OFFLINE: [ pm01 ]

dummy-resource  (ocf::pacemaker:Dummy): Started pm02

設定を完全にすべて消したい場合は、全てのサーバ上のPacemakerを停止し、全てのサーバの/var/lib/heartbeat/crm/ ディレクトリ内のファイルを全て削除してください。

[root@pm01 ~]# /etc/init.d/heartbeat stop または /etc/init.d/corosync stop
Stopping High-Availability services:                       [  OK  ]
[root@pm02 ~]# /etc/init.d/heartbeat stop または /etc/init.d/corosync stop
Stopping High-Availability services:                       [  OK  ]

[root@pm01 ~]# rm -f /var/lib/heartbeat/crm/*
[root@pm02 ~]# rm -f /var/lib/heartbeat/crm/*

以上簡単な設定例、動作例でした。

実際には、STONITHを設定したり、アプリケーションの場合は設定ファイルの場所や監視方法を設定したりする必要がありますが、詳細についは、PacemakerのマニュアルやRAの説明を参考にしてください。