HAクラスタ・NFSサーバでSTONITH機能の動作検証 (スプリットブレイン阻止)

POWER MASTER Server S4200には、3.5インチを4台と2.5インチを1台搭載でき、LANポートを4つとIPMI2.0準拠のマネージメントコントローラ用LANポートを1つ備えています。

S008 ラックマウント キットを使うと、1UスペースにPOWER MASTER Server S4200を2台搭載出来るので、HAクラスタ・NFSサーバを構築し、障害時の動作確認を行いました。

◎ 環境

ディスク構成

  • 120GB SSD x1台 (CentOS6.5 x86_64をインストール。)
  • 4TB HDD x4台 (ソフトウェアRAID5を構築。)

ネットワーク

  • bond0 (eth0とeth1でbond0を設定。)
  • eth2,eth3 (死活確認用。eth3はDRBD同期用も兼ねる。)
  • IPMIポート (STONITH機能で利用。)

HAクラスタ用ソフトウェア

ネットワーク構成図

想定した故障は、LANポート故障により2台のサーバ間で死活確認が出来なくなった場合で、その際、STONITH機能により実行されるスタンバイサーバ再起動の確認です。

構築したクラスタは、アクティブ/スタンバイ型のHAクラスタです。各サーバのeth2ポートとeth3ポートを利用して死活確認を行っています。

片方のサーバのeth2ポートとeth3ポート、server1のeth2ポートとserver2のeth3ポートなどいくつか組み合わせパターンが考えられますが、eth2ポートとeth3ポートが同時に正常に動作しなくなると、死活確認が出来なくなります。

死活確認が出来なくなっているだけで、アクティブサーバは停止しておらず、NFSサービスが継続して動作しています。

スタンバイサーバは、アクティブサーバが停止したと判断して、アクティブサーバへの昇格しようとします。もし、昇格するとサービスが二重起動するスプリットブレインが起きてしまいます。

スプリットブレインを防ぐために、STONITH機能によりアクティブサーバがスタンバイサーバを再起動させます。

以下は、pacemakerのCRM設定(一部)です。


primitive prmHelper1-1 stonith:external/stonith-helper ¥
params priority=”1″ stonith-timeout=”80s” hostlist=”server1″ dead_check_target=”IP addresses” run_standby_wait=”yes” standby_check_command=”/usr/sbin/crm_resource -r res_IPaddr2_1 -W | grep -q `hostname`” ¥
op start interval=”0s” timeout=”60s” ¥
op monitor interval=”10s” timeout=”60s” ¥
op stop interval=”0s” timeout=”60s” ¥
meta target-role=”started”
primitive prmIpmi1-2 stonith:external/ipmi ¥
params priority=”2″ stonith-timeout=”60s” userid=”ユーザーID” passwd=”パスワード” ipaddr=”IP address” hostname=”server1″ interface=”lanplus” ¥
op start interval=”0s” timeout=”60s” on-fail=”restart” ¥
op monitor interval=”3600s” timeout=”60s” on-fail=”restart” ¥
op stop interval=”0s” timeout=”60s” on-fail=”ignore” ¥
meta target-role=”started”
primitive prmMeatware1-3 stonith:meatware ¥
params priority=”3″ stonith-timeout=”600″ hostlist=”server1″ ¥
op start interval=”0s” timeout=”60s” ¥
op monitor interval=”3600s” timeout=”60s” ¥
op stop interval=”0s” timeout=”60s” ¥
meta target-role=”started”
group grpStonith1 prmHelper1-1 prmIpmi1-2 prmMeatware1-3
location loc-grpStonith1 grpStonith1 ¥
rule $id=”loc-grpStonith1-rule” -inf: #uname eq server1

簡単に設定した内容をまとめると、

  1. どちらのサーバがアクティブサーバであるか判定。(stonith:external/stonith-helperを利用。)
  2. アクティブサーバがスタンバイサーバを再起動させる。(stonith:external/ipmiを利用。)
  3. stonith:external/ipmiによりスタンバイサーバが再起動しない場合、サーバ管理者による再起動を求める。(stonith:meatwareを利用。)

となります。

◎ 動作確認

  1. server1側で、eth2ポートとeth3ポートに取り付けられているLANケーブルを抜く。(これにより死活確認が出来なくなります。)
  2. crm_monコマンドで、server2の再起動を確認。

アクティブサーバのeth2ポートとeth3ポートからLANケーブルを抜き取っても、STONITH機能によりスタンバイサーバの再起動が確認出来ました。また、HAクラスタ・NFSサービスも継続して動作していることを確認出来ました。

なお、実際に障害が起きた場合、故障箇所の特定には、サーバの動作ログなどの確認が必要となります。