フェンシングを構成するには、複数のSTONITHリソースを構成する必要があります。stonithdデーモンでは構成は不要です。すべての構成はCIBに保存されます。STONITHリソースはクラスstonithのリソースです(Section 17.1, サポートされるリソースエージェントクラスを参照)。STONITHリソースはSTONITHプラグインのCIBでの表現です。フェンシング操作の他、STONITHリソースはその他のリソースと同様、開始、停止、監視できます。STONITHリソースの開始と停止とは、この場合STONITHの有効化と無効化を意味します。開始と停止は管理上の操作であるため、フェンシングデバイス自体での操作にはなりません。ただし、監視はデバイス状態に反映されます。
STONITHリソースはその他のリソースと同様にして構成できます。リソースの構成については、Section 4.3, STONITHリソースの作成またはSection 5.4, STONITHリソースの作成を参照してください。
パラメータ(属性)のリストは、それぞれのSTONITHの種類に依存します。特定のデバイスのパラメータ一覧を表示するには、stonithコマンドを実行します。
stonith -t stonith-device-type -n
たとえば、ibmhmcデバイスタイプのパラメータを表示するには、次のように入力します。
stonith -t ibmhmc -n
デバイスの簡易ヘルプテキストを表示するには、-hオプションを使用します。
stonith -t stonith-device-type -h
以降では、crmコマンドラインツールの構文で作成された構成例を紹介します。これを適用するには、サンプルをテキストファイルに格納して(sample.txtなど)、実行します。
crm < sample.txt
crmコマンドラインツールでのリソースの構成については、Section 5.0, クラスタリソースのコマンドラインからの設定を参照してください。
WARNING: テスティングの構成
次の例の一部は、説明およびテストのみを目的としています。テスティングの構成例を実際のクラスタシナリオで使用しないでください。
Example 8-1 テスティングの構成
configure primitive st-null stonith:null \ params hostlist="node1 node2" clone fencing st-null commit
Example 8-2 テスティングの構成
別の構成:
configure primitive st-node1 stonith:null \ params hostlist="node1" primitive st-node2 stonith:null \ params hostlist="node2" location l-st-node1 st-node1 -inf: node1 location l-st-node2 st-node2 -inf: node2 commit
この構成例は、クラスタソフトウェアに関してはまったく問題ありません。実際の構成との違いは、フェンシング操作が行われないことだけです。
Example 8-3 テスティングの構成
より現実的な例として、次のexternal/ssh構成を挙げます。これもテスト目的のみです。
configure primitive st-ssh stonith:external/ssh \ params hostlist="node1 node2" clone fencing st-ssh commit
これもノードをリセットできます。この構成は、null STONITHデバイスを利用する最初の例と非常によく似ています。この例では、クローンが使用されています。これはCRM/Pacemakerの機能です。クローンは基本的にショートカットで、n個の同一リソースに別の名前を付けて定義しなくても、1つのクローンされたリソースで足ります。クローンの最もよく使われる方法は、STONITHデバイスがすべてのノードからアクセスできる場合、STONITHリソースとともに使用することです。
Example 8-4 IBM RSAライトアウトデバイスの構成
実際のデバイス構成とはそれほど違いはありませんが、一部のデバイスにはより多くの属性が必要となります。IBM RSAライトアウトデバイスは、次のようにして構成できます。
configure primitive st-ibmrsa-1 stonith:external/ibmrsa-telnet \ params nodename=node1 ipaddr=192.168.0.101 \ userid=USERID passwd=PASSW0RD primitive st-ibmrsa-2 stonith:external/ibmrsa-telnet \ params nodename=node2 ipaddr=192.168.0.102 \ userid=USERID passwd=PASSW0RD location l-st-node1 st-ibmrsa-1 -inf: node1 location l-st-node2 st-ibmrsa-2 -inf: node2 commit
この例では、STONITH操作は一定の確率で失敗するため、location制約が使用されています。したがって、実行側でもあるノード上のSTONITH操作は信頼できません。ノードがリセットされていない場合、フェンシング操作結果について通知を送信できません。これを実行する方法は、操作が成功すると仮定して事前に通知を送信するほかありません。しかし操作が失敗すると、問題が発生します。このため、stonithdは通例、ホストの終了を拒否します。
Example 8-5 UPSフェンシングデバイスの構成
UPSタイプのフェンシングデバイスの構成は、上記の例と同様で、詳細は読者への演習とします。UPSデバイスはすべてフェンシングに同一のメカニズムを採用していますが、デバイス自身へのアクセス方法が異なります。旧式のUPSデバイス(プロフェッショナル向けとされていたもの)は通常、シリアルポートが1つだけで、特殊なシリアルケーブルを使用して1200ボーで接続されています。新型の多くにはまだシリアルポートがありますが、USBインタフェースまたはEthernetインタフェースも備えています。使用できる接続の種類は、プラグインが何をサポートしているかによります。
たとえば、apcmasterをapcsmartデバイスと、stonith -t stonith-device-type -nコマンドを使用して比較します。
stonith -t apcmaster -h
次の情報が返されます。
STONITH Device: apcmaster - APC MasterSwitch (via telnet) NOTE: The APC MasterSwitch accepts only one (telnet) connection/session a time. When one session is active, subsequent attempts to connect to the MasterSwitch will fail. For more information see http://www.apc.com/ List of valid parameter names for apcmaster STONITH device: ipaddr login password
今度は次のコマンドを使用します。
stonith -t apcsmart -h
次の結果が得られます。
STONITH Device: apcsmart - APC Smart UPS (via serial port - NOT USB!). Works with higher-end APC UPSes, like Back-UPS Pro, Smart-UPS, Matrix-UPS, etc. (Smart-UPS may have to be >= Smart-UPS 700?). See http://www.networkupstools.org/protocols/apcsmart.html for protocol compatibility details. For more information see http://www.apc.com/ List of valid parameter names for apcsmart STONITH device: ttydev hostlist
最初のプラグインは、ネットワークポートとtelnetプロトコルを持つAPC UPSをサポートします。2番目のプラグインはAPC SMARTプロトコルをシリアル回線で使用します。これはその他多数のAPC UPS製品ラインでサポートされているものです。
Section 8.3.1, STONITHリソースの構成例で、STONITHリソースを制約、クローン、またはその両方を使用して構成する方法をいくつか説明しました。構成にどちらの構成を使用するかは、いくつかの要因(フェンシングデバイスの性質、デバイスで管理されるホスト数、クラスタノード数)によって決まり、また個人の好みにも左右されます。
まとめると、クローンを構成で安心して使用でき、構成が縮小される場合は、クローンされたSTONITHリソースを使用します。