Pacemakerクラスタでスタック DRBD リソースを使用する

スタックリソースでは、マルチノードクラスタの多重冗長性のために、あるいはオフサイトのディザスタリカバリ機能を確立するためにDRBDを使用できます。このセクションでは、そのような構成におけるDRBDおよびPacemakerの設定方法について説明します。

オフサイトディザスタリカバリ機能をPacemakerクラスタに追加する

この構成シナリオでは、1つのサイトの2ノードの高可用性クラスタと、一般的には別のサイトに設置する独立した1つのノードについて説明します。第3のノードは、ディザスタリカバリノードとして機能するスタンドアロンサーバです。次の図で概念を説明します。

図8.1 Pacemakerクラスタの DRBD リソースのスタック

Pacemakerクラスタの DRBD リソースのスタック
Pacemakerクラスタの3ノードリソースのスタック。ライトブルーのストレージが赤線で繋がっています。プライマリロールがオレンジ、セカンダリはグレー。レプリケーションの方向は、矢印で示されます。

この例では、alicebobが2ノードのPacemakerクラスタを形成し、 charlieはPacemakerで管理されないオフサイトのノードです。

このような構成を作成する場合は、 「3ノード構成」で説明されているように、まずDRBDリソースの設定および初期化を行います。そして、次のCRM構成でPacemakerを設定します。

primitive p_drbd_r0 ocf:linbit:drbd \
	params drbd_resource="r0"

primitive p_drbd_r0-U ocf:linbit:drbd \
	params drbd_resource="r0-U"

primitive p_ip_stacked ocf:heartbeat:IPaddr2 \
	params ip="192.168.42.1" nic="eth0"

ms ms_drbd_r0 p_drbd_r0 \
	meta master-max="1" master-node-max="1" \
        clone-max="2" clone-node-max="1" \
        notify="true" globally-unique="false"

ms ms_drbd_r0-U p_drbd_r0-U \
	meta master-max="1" clone-max="1" \
        clone-node-max="1" master-node-max="1" \
        notify="true" globally-unique="false"

colocation c_drbd_r0-U_on_drbd_r0 \
        inf: ms_drbd_r0-U ms_drbd_r0:Master

colocation c_drbd_r0-U_on_ip \
        inf: ms_drbd_r0-U p_ip_stacked

colocation c_ip_on_r0_master \
        inf: p_ip_stacked ms_drbd_r0:Master

order o_ip_before_r0-U \
        inf: p_ip_stacked ms_drbd_r0-U:start

order o_drbd_r0_before_r0-U \
        inf: ms_drbd_r0:promote ms_drbd_r0-U:start

この構成を/tmp/crm.txtという一時ファイルに保存し、次のコマンドで現在のクラスタにインポートします。

crm configure < /tmp/crm.txt

この構成では、以下のアクションがalice/bobクラスタで正しい順番で実行されます。

  1. PacemakerはDRBDリソースr0を両方のクラスタノードで開始し、 1つのノードをマスター(DRBD プライマリ)ロールに昇格させます。

  2. 下位レイヤ(r0 DRBD)リソースがマスター(プライマリ)に昇格した方のノードで、上位レイヤのDRBDが第3ノードとのレプリケーションのために使うIPアドレス192.168.42.1を開始します。

  3. r0がプライマリになっていて、 r0-Uのレプリケーション用IPアドレスも持つノード側で、オフサイトノードに接続およびレプリケートするr0-U DRBDリソースをPacemakerが開始します。

  4. 最後に、Pacemakerがr0-Uリソースもプライマリロールに昇格させるため、ディザスタリカバリノードとのレプリケーションが始まります。

このように、このPacemaker構成では、クラスタノード間だけではなく第3のオフサイトノードでも完全なデータ冗長性が確保されます。

[注記]注記

このタイプの構成は、 DRBD Proxyを併用するのが一般的です。

スタックリソースを使って、Pacemakerクラスタの4ノード冗長化を実現する

この構成では、全部で3つのDRBDリソース(2つの非スタック、1つのスタック)を使って、4台のストレージによる冗長化を実現します。4ノードクラスタの意義と目的は、3ノードまで障害が発生しても、可用なサービスを提供し続けられるということです。

次の例で概念を説明します。

図8.2 Pacemakerクラスタの DRBD リソースのスタック

Pacemakerクラスタの DRBD リソースのスタック
Pacemakerクラスタの4ノードリソースのスタック。ライトブルーのストレージが赤線で繋がっています。プライマリロールがオレンジ、セカンダリはグレー。レプリケーションの方向は、矢印で示されます。

この例では、alicebobcharliedaisy が 2セットの 2ノードPacemaker クラスタを構成しています。alicebobleftという名前のクラスタを構成し、互いにDRBDリソースを使ってデータをレプリケートします。一方、charliedaisyrightという名前のクラスタを構成し、別のDRBDリソースでレプリケートします。3番目に、DRBDリソースをスタックし、2つのクラスタを接続します。

[注記]注記

Pacemaker バージョン 1.0.5 のPacemakerクラスタの制限により、CIBバリデーションを有効にしたままで4ノードクラスタをつくることはできません。CIBバリデーションは汎用的に使うのには向かない特殊な高度な処理です。これは、今後のペースメーカーのリリースで解決されることが予想されます。

このような構成を作成するには、 「3ノード構成」の説明に従って、まずDRBDリソースを設定して初期化します (ただし、ローカルがクラスタになるだけでなく、リモート側にもクラスタになる点が異なります)。そして、次のCRM構成でPacemakerを設定し、 leftクラスタを開始します。

primitive p_drbd_left ocf:linbit:drbd \
	params drbd_resource="left"

primitive p_drbd_stacked ocf:linbit:drbd \
	params drbd_resource="stacked"

primitive p_ip_stacked_left ocf:heartbeat:IPaddr2 \
	params ip="10.9.9.100" nic="eth0"

ms ms_drbd_left p_drbd_left \
	meta master-max="1" master-node-max="1" \
        clone-max="2" clone-node-max="1" \
        notify="true"

ms ms_drbd_stacked p_drbd_stacked \
	meta master-max="1" clone-max="1" \
        clone-node-max="1" master-node-max="1" \
        notify="true" target-role="Master"

colocation c_ip_on_left_master \
        inf: p_ip_stacked_left ms_drbd_left:Master

colocation c_drbd_stacked_on_ip_left \
        inf: ms_drbd_stacked p_ip_stacked_left

order o_ip_before_stacked_left \
        inf: p_ip_stacked_left ms_drbd_stacked_left:start

order o_drbd_left_before_stacked_left \
        inf: ms_drbd_left:promote ms_drbd_stacked_left:start

この構成を/tmp/crm.txtという一時ファイルに保存し、次のコマンドでleftクラスタ構成にインポートします。

crm configure < /tmp/crm.txt

Pacemakerは以下のアクションを実行します。

  1. alicebob間をレプリケートするDRBDリソースleftを起動し、これらのノードのいずれかをマスターにします。

  2. IPアドレス10.9.9.100が開始し(alice または bobのいずれか。リソースleftでマスターの役割を担っている方)。

  3. IPアドレスを設定したのと同じノード上で、DRBDリソースstackedが起動します。

  4. target-role="Master"が指定されているため、スタックしたDRBDリソースがプライマリになります。

さて、以下の設定を作り、クラスタrightに進みましょう。

primitive p_drbd_right ocf:linbit:drbd \
	params drbd_resource="right"

primitive p_drbd_stacked ocf:linbit:drbd \
	params drbd_resource="stacked"

primitive p_ip_stacked_right ocf:heartbeat:IPaddr2 \
	params ip="10.9.10.101" nic="eth0"

ms ms_drbd_right p_drbd_right \
	meta master-max="1" master-node-max="1" \
        clone-max="2" clone-node-max="1" \
        notify="true"

ms ms_drbd_stacked p_drbd_stacked \
	meta master-max="1" clone-max="1" \
        clone-node-max="1" master-node-max="1" \
        notify="true" target-role="Slave"

colocation c_drbd_stacked_on_ip_right \
        inf: ms_drbd_stacked p_ip_stacked_right

colocation c_ip_on_right_master \
        inf: p_ip_stacked_right ms_drbd_right:Master

order o_ip_before_stacked_right \
        inf: p_ip_stacked_right ms_drbd_stacked_right:start

order o_drbd_right_before_stacked_right \
        inf: ms_drbd_right:promote ms_drbd_stacked_right:start

Pacemakerは以下のアクションを実行します。

  1. charliedaisy間をレプリケートするDRBDリソースrightを起動し、これらのノードのいずれかをマスターにします。

  2. IPアドレス10.9.10.101を開始します(charlie または daisyのいずれか。リソースrightでマスターの役割を担っている方)。

  3. IPアドレスを設定したのと同じノード上で、DRBDリソースstackedが起動します。

  4. target-role="Slave"が指定されているため、スタックリソースはセカンダリのままになります。