HAを見守る「Watchdog」と「STONITH」:Heartbeatでかんたんクラスタリング(3)(3/3 ページ)
サービスの継続を確保するはずのHeartbeat自体が不安定になってしまったら、いったいどうすればいいのでしょう? この問題を解決してくれる2つの機能「Watchdog」と「STONITH」の使い方を紹介しましょう。
STONITHも使ってみよう
STONITHについても、初回の記事で簡単に説明しました。これは「Shoot The Other Node In The Head」の略で、監視対象ノードの異常を検出したときに、強制的にそのノードをダウンさせる役割を果たします。
なぜこうした機能が必要かというと、コントロールが利かないノードを強制的に排除することで、IPアドレスが重複したり、複数のノードが「自分がプライマリである」と思い込むような状況をなくし、全体としてのデータ損失を防ぐためです。
「対象ノードをダウンさせる」ためには、相手のOSが反応を返さないケースも考慮して、サービスを提供するOSとは別の経路でOSにアクセスする必要も出てきます。
そのため、サーバマシンの中には、専用の管理ポートを提供するモデルがあります。こうした専用ポートは、起動しているOSに依存せずに動作しています。また、同様の機構を提供するオープンな規格として、IPMI(Intelligent Platform Management Interface)というものがあり、これをそのままサポートしているマザーボードベンダも存在します。これらのポート用のプラグインもいくつか提供されており、STONITHの対象として利用可能です。
STONITH用プラグインは、/usr/lib/stonith以下にいろいろと収められています。例えばibmrsa、riloe、impilanなどが前述のポート用プラグインになります。
すべての人が管理専用ポートを備えたサーバを所有しているわけではありませんので、以降では、sshを用いたSTONITH(ssh STONITH)を例に取って解説を行います。ただしssh STONITHでは、OS自体が不安定になった場合には正常動作しないことがあります。さらに前提として、パスフレーズの入力を省くために、パスフレーズなしのSSHキーを作成しておく必要があります。
SSHキーの設定
まず、tomatoで、
# ssh-keygen
と入力してキーの作成を開始します。その後、パスフレーズの入力を求められますので、何も入力せずにEnterを押します。作成された/root/.ssh/id_rsa.pubの内容を、surrの/root/.ssh/authorized_keysに入力します。そしてtomatoから、
# slogin surr
のように入力して、パスワードやパスフレーズを打ち込まなくてもsurrにログインできることを確認してください。同様に、surrからtomatoへログインできるようにも作業します。
cib.xmlの編集
STONITH機能を使うときも、これまでと同様、設定ファイルである「cib.xml」ファイルを編集する必要があります。すべて記述すると長くなってしまうので、サンプル設定ファイルを用意しておきました。下記を参照してください。
基本的には第2回で紹介したApache用設定に追記を加えたものです。どこが変わったかを確認してみましょう。
まず、resources要素内にprimitive要素で始まる2つのリソースが、またconstraints要素内にもそれらに対応したrsc_locationで始まる制限が追加されています。リソース部はまさしくSTONITHの設定そのものです。
さらに、ノードsurrを落とすためのリソース「kill_surr」はtomatoでしか起動しないように、同様にtomatoを落とすためのリソース「kill_tomato」はsurrでしか起動しないように制限を加えています。
今回は練習のため、ここで紹介したサンプル設定ファイルのままではSTONITHが有効にならないようにしています。このファイルを各ノードにコピーし、Heartbeatサービスを起動した後に、クラスタが稼働している状態で設定変更をしてみましょう。なお、このときWatchdogの設定は削除しておきます(ha.cfからwatchdog部を削除してからHeartbeatサービスを起動します)。
まずtomatoもしくはsurrのどちらかで、
# cibadmin -o crm_config -U -X ‘<attributes><nvpair id=”stonith-enabled” name=”stonith-enabled” value=”true”/></attributes>’
と入力します。その後、
# cat /var/lib/heartbeat/crm/cib.xml
として、どこに入力されたかを確認してみましょう。
この状態でようやく、STONITH機能が有効になりました。では、どちらかのノードでWatchdogのときと同様に、MCPプロセスをkillしてください。ha.cfで設定したdeadtime時間を経過すると、そのノードが再起動されると思います。
以上で、WatchdogとSTONITHの解説は終了です。特にSTONITHの設定には複雑な面があり、ミスをすると予期せぬ挙動を示すこともあります。実運用の際はくれぐれも注意して設計・記述を行ってください。
さて次回は、DRBDとの連携を紹介し、バージョン2以降で実装されたマスター/スレーブモードについても解説したいと思います。
Copyright © ITmedia, Inc. All Rights Reserved.