クラシックなHeartbeat リソースエージェント(スクリプト)は、基本的にはLSB initスクリプトで、ステータスオペレーションが若干変わったものです。リソーススクリプトに関して、Heartbeatが実行するのは、以下のオペレーションだけです。
以下、これらのオペレーションについてご説明いたします。
所定のリソースをアクティブにします。
LSBでは、すでにアクティブになっているリソースをスタートすることは、決してエラーではありません。成功時は0で、失敗時は0以外で終了(Exit)します。Heartbeatは、カレントマシン上で実行したい場合で、ステータスが当該リソースをすでに実行中でないことを示す場合にしか、リソースをスタートしません。Heartbeatが、クラスタ内の異なるノードにおいて、同じリソースを同時にスタートすることは決してありません。
Deactivate the given resource.
所定のリソースをアクティブではない状態にします。 リソースが実行中でないことを確認したい場合に実行します。リソースをストップする前に実行中かどうか確認する場合もありますが、シャットダウン中はいずれにせよ、全てのリソースをストップします。
LSBでは、すでにストップしているリソースをストップすることは常に許容されています。Heartbeatは、実行中という認識のないリソースは確実にストップします。ストップに失敗した場合には、エラーの処理に、結果的にマシンを再ブートすることになりかねません。一部のRed HatスクリプトはLSBに準拠しておらず、実行中ではないリソースをストップしようとすると、クレームが付けられますので注意してください。
所定のリソースの実行状態を判断します。
statusオペレーションは、ステータス(状態)を正確にレポートするだけでなく、当該リソースがアクティブになっている場合には、OK または running(実行中)のいずれかをプリントしなければならません。また、アクティブになっていない場合には、どちらもプリントすることができません。statusオペレーションにおいては、リターンコードは無視します。
多少不可解な印象がありますが、適切なステータス終了コードについては確実に与えなかったにもかかわらず、OKまたはrunningについては確実にプリントしたという、初期のLinuxとの互換性に関する伝説的なハングオーバーがあるためです。
Heartbeatは、さまざまな場所でstatusオペレーションをコールします。リソースをスタートする前にも行いますし、リソースを解放する(IIRC)ときにも行います。
stopに繰り返し失敗すると、当該リソースについてstatusオペレーションを実行します。当該リソースがなお実行中であるというレポートがあると、確実にストップしていることを確認するため、マシンを再ブートします。
Start、stop 、status オペレーションは、任意のマシン上の、任意のリソースにおいては、オーバーラップすることは決してありません。あるリソースにおけるオペレーションの同時実行については、心配はありません。
LSBリソースエージェントとは異なり、Heartbeatリソースエージェントには、位置的パラメータのリストを引き渡すことができます。パラメータは以下のように、オペレーション名の前にきます。
IPaddr 10.10.10.1 start
このパラメータセットに対応するharesourcesラインは次のようになり、
IPaddr::10.10.10.1
startオペレーションで呼び出されます。
Heartbeat は/etc/ha.d/resource.d および/etc/init.dでresourceスクリプトを探します。
ResourceAgent、Heartbeatプログラム、 haresources、LSBリソースエージェント、OCFリソースエージェント