Linux-HA開発チームは、heartbeatリリース2ではCRMモードの使用を推奨しています。
メリット. R1スタイルとは対照的に、CRM モードには次のようなメリットがあります。
クラスタリソースマネージャによって、クラスタ構成が自動的にクラスタ全体に配布される。手動配付は不要。
CRMモードはノードレベル監視とリソースレベル監視の両方をサポートし、ノード障害とリソース障害の両方に対する応答を設定できる。ただし、外部監視システムによるクラスタリソース監視との併用が望ましい。
2つのリソースグループしかサポートしない R1スタイルとは異なり、 CRMクラスタは任意の数のリソースグループをサポートする。
CRMクラスタは(複雑だが)強力な制約フレームワークをサポートする。これにより、正しい順序でのリソースの起動および停止、同じ場所へのリソースの配置(リソースを強制的に常に同じ物理ノードで実行する)、および特定のリソースの優先ノードの設定が可能。
1つのCRMクラスタが最大255ノードをサポートするというメリットは、 DRBD自体が2ノードしかサポートしないため、 DRBDを使用するセットアップにはあまり関係がありません。
デメリット. R1スタイルと比べて、CRMモードには特に次のようなデメリットがあります。
heartbeat CRMクラスタは構成と管理が比較的複雑である。
OCFリソースエージェントのカスタマイズは難しく、 heartbeatの機能を拡張するのが難しい。
![]() | 注記 |
|---|---|
ただし、カスタム(または古い) R1スタイルのリソースエージェントもCRMモードで使えます。 |
CRMクラスタの場合は、heartbeat構成ファイルの一部だけを使います。
/etc/ha.d/ha.cf (「ha.cfファイル」を参照)CRMモードを有効にするには、この設定ファイルに次の行を記述する必要があります。
crm yes
/etc/ha.d/authkeys. このファイルの内容はR1スタイルのクラスタのものと同じです。詳細は、「authkeys ファイル」を参照してください。
上記以外のクラスタ構成は、 CIB (Cluster Information Base: クラスタ情報ベース)に格納されます。 詳細は、次のセクションを参照してください。上述の2つの設定ファイルとは異なり、 CIBを手動で配付する必要はありません。 heartbeatサービスにより自動的に配付されます。
クラスタ情報ベース(CIB)は XMLファイル /var/lib/heartbeat/crm/cib.xmlに記述されます。ただし、ゼロから新しいクラスタ構成を作成する場合以外は、このファイルの内容を直接編集することは避けてください。heartbeatには、CIBを変更するためのコマンドラインアプリケーションとGUIが用意されています。
実際には、cib.xmlファイルに書き込まれるCIBにはクラスタ構成 (静的な情報) および現在のクラスタの状態 (変化する動的な情報)の両方が含まれます。 heartbeatコマンドラインツールまたはheartbeat GUIを使用して、状態情報も検索できます。
新しいheartbeat CRMクラスタを作成すると、新しい空のCIBが自動的に作成されます。 CRMクラスタの作成とは、 ha.cfおよびauthkeysファイルを作成してクラスタノード間に配付し、 heartbeatサービスを開始して、ノードがクラスタ間通信を確立するまで待機することを含みます。 CIBの内容は次のようになります。
<cib>
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<attributes/>
</cluster_property_set>
</crm_config>
<nodes>
<node uname="alice" type="normal"
id="f11899c3-ed6e-4e63-abae-b9af90c62283"/>
<node uname="bob" type="normal"
id="663bae4d-44a0-407f-ac14-389150407159"/>
</nodes>
<resources/>
<constraints/>
</configuration>
</cib>
このファイルの正確な形式と内容については、 Linux-HAのWebサイトを参照してください。ただし、この段階で理解しておくべきことは、このクラスタには aliceとbobという名前の2つのノードがあり、この時点ではリソースもリソース制約も構成されていないということです。
ここでは、heartbeat CRMクラスタで、 DRBDで保護されたサービスを有効にする方法を説明します。ここで取り上げる例は、「heartbeatリソース」で説明されている R1スタイルのheartbeatクラスタに対応するものと、機能的には同様です。
ここで説明する構成手順はかなり複雑なため、 R1スタイルのheartbeat構成しか扱ったことがない人には難しく感じられるかもしれません。 heartbeat CRMクラスタの構成はたしかに複雑で、ユーザフレンドリでないことも多いですが、 CRMには、 R1スタイルのクラスタよりも大きなメリットがあります。いずれの方法を使用するかは、管理者の裁量で決定してください。
CRMモードでheartbeatを使用している場合でも、 drbddiskなどのR1対応リソースエージェントを使用できます。このリソースエージェントにはセカンダリノードの監視機能はなく、リソースの昇格と降格だけが監視されます。
drbddiskを使用して、 heartbeat CRMクラスタでMySQLデータベース用のDRBDを使用する構成を有効にするには、次のような構成を使用します。
<group ordered="true" collocated="true" id="rg_mysql">
<primitive class="heartbeat" type="drbddisk"
provider="heartbeat" id="drbddisk_mysql">
<meta_attributes>
<attributes>
<nvpair name="target_role" value="started"/>
</attributes>
</meta_attributes>
<instance_attributes>
<attributes>
<nvpair name="1" value="mysql"/>
</attributes>
</instance_attributes>
</primitive>
<primitive class="ocf" type="Filesystem"
provider="heartbeat" id="fs_mysql">
<instance_attributes>
<attributes>
<nvpair name="device" value="/dev/drbd0"/>
<nvpair name="directory" value="/var/lib/mysql"/>
<nvpair name="type" value="ext3"/>
</attributes>
</instance_attributes>
</primitive>
<primitive class="ocf" type="IPaddr2"
provider="heartbeat" id="ip_mysql">
<instance_attributes>
<attributes>
<nvpair name="ip" value="192.168.42.1"/>
<nvpair name="cidr_netmask" value="24"/>
<nvpair name="nic" value="eth0"/>
</attributes>
</instance_attributes>
</primitive>
<primitive class="lsb" type="mysqld"
provider="heartbeat" id="mysqld"/>
</group>
この構成を/tmp/hb_mysql.xmlという名前の一時ファイルに保存します。このリソースグループをクラスタ構成に追加するには、任意のクラスタノードで次のコマンドを実行します。
cibadmin -o resources -C -x /tmp/hb_mysql.xml新しく構成したリソースグループは、 heartbeatによって自動的にすべてのクラスタノードに配付されます。
drbdリソースエージェントはいわば「純粋な」OCF RAで、マスター/スレーブ機能により、 heartbeatが複数のノードのDRBDリソースを開始して監視し、必要に応じて昇格と降格を行うことを可能にします。ただし、heartbeatを停止したりノードをスタンバイモードにすると、 drbd RAは管理するDRBDリソースを停止します。
drbd OCFリソースエージェントを使用して、 heartbeat CRMクラスタでMySQLデータベース用のDRBDを使用する構成を有効にするには、必要なリソースとheartbeat制約を作成し、すでに昇格したDRBDリソースのみでサービスが開始するように設定する必要があります。次に示す例のように、まず、制約を作成します。
<constraints>
<rsc_order id="mysql_after_drbd" from="rg_mysql" action="start"
to="ms_drbd_mysql" to_action="promote" type="after"/>
<rsc_colocation id="mysql_on_drbd" to="ms_drbd_mysql"
to_role="master" from="rg_mysql" score="INFINITY"/>
</constraints>たとえば、この設定を/tmp/constraints.xmlという名前のファイルに保存して、次のコマンドで有効にします。
cibadmin -U -x /tmp/constraints.xml<resources>
<master_slave id="ms_drbd_mysql">
<meta_attributes id="ms_drbd_mysql-meta_attributes">
<attributes>
<nvpair name="notify" value="yes"/>
<nvpair name="globally_unique" value="false"/>
</attributes>
</meta_attributes>
<primitive id="drbd_mysql" class="ocf" provider="heartbeat"
type="drbd">
<instance_attributes id="ms_drbd_mysql-instance_attributes">
<attributes>
<nvpair name="drbd_resource" value="mysql"/>
</attributes>
</instance_attributes>
<operations id="ms_drbd_mysql-operations">
<op id="ms_drbd_mysql-monitor-master"
name="monitor" interval="29s"
timeout="10s" role="Master"/>
<op id="ms_drbd_mysql-monitor-slave"
name="monitor" interval="30s"
timeout="10s" role="Slave"/>
</operations>
</primitive>
</master_slave>
<group id="rg_mysql">
<primitive class="ocf" type="Filesystem"
provider="heartbeat" id="fs_mysql">
<instance_attributes id="fs_mysql-instance_attributes">
<attributes>
<nvpair name="device" value="/dev/drbd0"/>
<nvpair name="directory" value="/var/lib/mysql"/>
<nvpair name="type" value="ext3"/>
</attributes>
</instance_attributes>
</primitive>
<primitive class="ocf" type="IPaddr2"
provider="heartbeat" id="ip_mysql">
<instance_attributes id="ip_mysql-instance_attributes">
<attributes>
<nvpair name="ip" value="10.9.42.1"/>
<nvpair name="nic" value="eth0"/>
</attributes>
</instance_attributes>
</primitive>
<primitive class="lsb" type="mysqld"
provider="heartbeat" id="mysqld"/>
</group>
</resources>
たとえば、この設定を/tmp/resources.xmlという名前のファイルに保存して、次のコマンドで有効にします。
cibadmin -U -x /tmp/resources.xmlこれで設定が有効になります。 DRBDリソースを昇格させるノードをheartbeatが選択し、同じノードでDRBDで保護されたリソースグループを開始します。
CRMクラスタでは、次のようにクラスタリソースの制御を引き継ぎます。
1つのクラスタリソースの手動テイクオーバ. リソースの移動をテストしたい場合や、手動負荷分散の手段としてリソースをローカルノードに移動したい場合に、この方法が適切です。この操作は次のコマンドで実行します。
crm_resource -r resource -M -H `uname -n`
すべてのクラスタリソースの手動テイクオーバ. この手順では、対向ノードをスタンバイモードに切り替えます (hostname は対向ノードのホスト名)。
crm_standby -U hostname -v on
いくつかの方法で、 heartbeat CRMクラスタノードに強制的に1つまたはすべてのリソースを放棄させることができます。
1つのクラスタリソースの放棄. 次のコマンドを実行すると、ノードが1つのリソースの制御を放棄します。ここでも、前のセクションに記載された注意事項が適用されます。
crm_resource -r resource -M 特定のホストに移動する場合は、次のコマンドを使用します。
crm_resource -r resource -M -H hostnameただし、DRBDの制限が2ノードのため、後者の構文はDRBDを使用するCRMクラスタにはほとんど関係がありません。 2つのコマンドは実質的に同じ意味になります。
クラスタノードをスタンバイモードに切り替える. リソースの移行をテストしたい場合や、ノードをクラスタから削除する必要のない操作を行う場合には、この方法が適切です。この操作は次のコマンドで実行します。
crm_standby -U `uname -n` -v on
ローカルクラスタ管理システムインスタンスのシャットダウン. これはソフトウェア更新などのローカル保守に適切です。この場合、ノードを一時的にクラスタから削除する必要がありますが、システムを再起動する必要はありません。手順は、heartbeat R1スタイルのクラスタの場合と同じです。
ローカルノードのシャットダウン. ハードウェアの保守など、システムのシャットダウンと再起動を必要とする場合に適切です。 heartbeat R1スタイルのクラスタの説明で述べた安全なシャットダウンコマンドを使用します。