[ハートビートの概要]
LifeKeeperのハートビートは、各クラスタノード間で相互にポーリングを行い、応答を確認することで各ノードの死活監視を行っています。ハートビートの応答が途絶した場合はハートビートが切断ステータス(DEAD)となり、相手ノードのシステム異常と判断してフェイルオーバを行います。
ハートビートは、初期値の状態では5秒に一度のポーリングを行います。このポーリングの応答の受信に3度連続して失敗した場合に、ハートビートの切断状態と判断します。
[ハートビートの調整について]
ハートビートの送出頻度と、切断と判定するまでの試行回数は、/etc/default/LifeKeeper ファイルの以下のパラメータで調整可能です。
初期値の場合は、以下の値がセットされています。これは、「5秒に一度のハートビートが3回連続して失敗すると切断」という設定です。つまり稼動系のシステムに障害が発生した場合に、最短で15秒後にそれを検知し、フェイルオーバを開始します。
LCMHBEATTIME=5
LCMNUMHBEATS=3
上記のパラメータは隠しパラメータであり、””/etc/default/LifeKeeper””ファイルには記載されておりません。変更する場合は同ファイルに追記する必要があります。
また、これらのパラメータに指定できる値は以下の通りです。
※このパラメータを変更した場合は、LifeKeeperの再起動が必要です。再起動を行うまでは、新しい値は反映されません。
[調整が必要なケース、不要なケース]
ハートビートの設定は、基本的には初期値のままご利用いただくことをお勧めしています。また、殆どの場合はハートビートの設定変更は不要です。
ハートビートの設定変更が必要となるケースとしては、システムの負荷により、ハートビートへの応答が遅延し、結果としてハートビートの切断が発生してしまう状況が考えられます。
この場合、上述のパラメータの値を初期値よりも大きく設定し、ハートビート切断となるまでの条件を緩和することで、システム負荷が増大してもハートビートの切断を発生しにくくすることが出来ます。例えば下記の例では、5秒に一度のハートビートに対して、10回連続して応答が得られなかった場合にハートビートの切断と判定します。
LCMHBEATTIME=5
LCMNUMHBEATS=10
また、これらの値を小さくすることで、システム障害の発生から障害の検知までの時間を短縮することも可能です。但し、その場合はハートビートの切断と判断する条件が厳しくなりますので、システム負荷などによる応答遅延に起因するハートビートの切断が発生しやすくなります。基本的に、これらの値を小さくする方針でのチューニングはお勧めいたしません。
[その他の注意事項]
ハートビートの調整に際しては、いくつかの注意点があります。
・ハートビートの設定値は、クラスタに参加している全てのノードが、同じ値でなければなりません。設定値が食い違っている場合は、LifeKeeperは正常に動作いたしません。またそのような設定での運用はサポートされません。
・ハートビート切断の条件を緩く設定する場合は、LCMNUMHBEATS(試行回数)を増加してください。LCMHBEATTIME(ポーリング間隔)は初期値である””5″”のまま利用いただくことをお勧めいたします。
例えば、以下の設定では30秒に一度のポーリングが3回連続して失敗した場合に、ハートビートの切断と判定します。つまり相手ノードが90秒間応答しなかった場合に、ノード障害としてフェイルオーバを行うことになります
LCMHBEATTIME=30
LCMNUMHBEATS=3
但し、90秒間応答しなかった場合に相手ノードの障害と判定するのであれば、以下の設定でもほぼ同様の制御となります。
LCMHBEATTIME=5
LCMNUMHBEATS=18
また、LCMHBEATTIME(ポーリング間隔)はLifeKeeper起動時の、クラスタ状態の確認にも影響します。LCMHBEATTIMEが大きくセットされている場合は、クラスタノードの相互の状態確認にその分の時間がかかります。相互の状態確認が完了していない状態は、ノード間のクラスタの状態の整合性が確認出来ていないことになり、早期に解消しなければなりません。
このことから、LCMHBEATTIME(ポーリング間隔)を増やすとしても、””LCMHBEATTIME=10″”(10秒に一度のポーリング)程度が上限とお考えください。このパラメータに10以上の値を設定した場合は、各クラスタノード間の連携に問題が生じる場合があります。
以上
掲載日: 2008年6月13日