LifeKeeperの通常の動作として、ノード障害やリソース障害によるバックアップノードへの切り替えは自動的に行われるようになっています。しかし、利用する環境によっては、障害が検出されたシステムのフェイルオーバーリカバリーをLifeKeeper が実行する前にシステム管理者の手動による確認を必須とすることが望ましいこともあります。そのような場合には、この [Confirm Failover] や [Block Resource Failover] 設定の利用することができます。この機能を利用することによって、リソース障害やノード障害が発生した際に、自動的に行われるフェイルオーバーをブロックしたり、フェイルオーバーが行われるまでの待ち時間を設けたりすることができます。
以下の説明、例、および考慮事項をよく読んで理解してから、お使いの SPS 環境で [Confirm Failover] または [Block Resource Failover] を設定してください。これらの設定は、コマンドライン、または LifeKeeper の GUI の [Properties] パネルから使用できます。
[Set Confirm Failover On]
[Confirm Failover] を設定すると、LifeKeeper クラスターのノード障害によるフェイルオーバーが発生した時(注記: ノード障害は、システムへのすべてのLifeKeeperコミュニケーションパス障害によって識別されます。)、バックアップノードへの切り替えの実行に対して待ち時間を設けることができるようになります(後述のCONFIRMSODEF変数を参照して下さい)。また、その待ち時間の間にバックアップノードへの切り替えを実行するかしないかをユーザーが決定できるようになります。
[Confirm Failover] 設定をGUIで有効にする場合は、サーバープロパティーのGeneralタブ画面を使用します。以下はサーバープロパティーのGeneral画面の例です。赤で囲まれた部分が [Confirm Failover] を設定する画面です。
この画面の例では、lktestAという名前のホストから見た設定となります。上図の赤で囲まれた部分が [Confirm Failover] の設定部分で、HAクラスターを構成するノードの名前が縦に表示されています。この例では、lktestAの対向ノードがlktestBとなっています。
図の例ではlktestAを選択して設定状況を表示しており、lktestBの横にチェックが入った状態となっています。この場合、lktestB上にConfirm Failover フラグが作成され、lktestAからlktestBへのフェイルオーバーが行われる際に、フェイルオーバー実施までのタイムアウトと実施可否の確認が有効になります。このフラグの有無によって、 [Confirm Failover] の動作の実施がコントロールされます。
この時のフラグの作成状況については、コマンドで確認することができます。例にあるlktestAというホスト上でlktestBの欄にチェックを入れた場合には、lktestBに [Confirm Failover] フラグが作成されます。(例の通りの操作の場合lktestAにはフラグは作成されません)。具体的には以下のような出力になります。
[root@lktestB~]# flg_list
confirmso!lktestA
「confirmso!lktestA」はflg_listコマンドの結果が出力され、 [Confirm Failover] フラグがlktestBノード上に設定されます。confirmsoフラグがセットされている状態で、フェイルオーバーが発生するとLifeKeeperのログファイルには以下のようなログが記録されます。
INFO:lcd.recover:::004113:chk_man_interv: Flag confirmso!hostname is set, issuing confirmso event and waiting for switchover instruction.
NOTIFY:event.confirmso:::010464:LifeKeeper: FAILOVER RECOVERY OF MACHINE lktestA requires manual confirmation! Execute ‘/opt/LifeKeeper/bin/lk_confirmso -y -s hostname ‘ to allow this failover, or execute ‘/opt/LifeKeeper/bin/lk_confirmso -n -s lktestA’ to prevent it. If no instruction is provided, LifeKeeper will timeout in 600 seconds and the failover will be allowed to proceed.
このメッセージが出力されている間に、次のいずれかのコマンドを実行するとフェイルオーバーの可否をコントロールすることができます。
フェイルオーバーを続行する場合
#/opt/LifeKeeper/bin/lk_confirmso -y -s ホスト名
フェイルオーバーをブロックする場合
#/opt/LifeKeeper/bin/lk_confirmso -n -s ホスト名
コマンドを実行する際に指定するホスト名はConfirm Failoverフラグに書かれているホスト名、この例では、lktestAとなります。ログに具体的なコマンドの実行例が書かれていますので、内容を元にコマンドを実行してください。
設定された待ち時間を超えた場合、LifeKeeperのデフォルトの設定ではバックアップノードへのフェイルオーバー(あるいは、フェイルオーバーのブロック)を自動的に行うようになっています。タイムアウトを迎えた場合以下のようなログが記録されます。
lcdrecover[xxxx]: INFO:lcd.recover:::004408:chk_man_interv: Timed out waiting for instruction, using default CONFIRMSODEF value 0.
待ち時間を経過した際の動作は、/etc/default/LifeKeeperファイルの「CONFIRMSODEF=1 or 0」の設定で制御されます。デフォルトでは”0”が設定されており、待ち時間を超えた場合にはフェイルオーバーが継続されます。この値を”1”に変更した場合には、待ち時間を経過した場合にフェイルオーバーしないようにすることができます。
フェイルオーバー時の待ち時間を変更したい場合には、/etc/default/LifeKeeperファイルの「CONFIRMSOTO=秒」の値を変更してください。上記CONFIRMSODEFの値によって決定されたフェイルオーバーの実行、あるいはブロックをする前に、この変数はユーザーからの手動確認を待つための秒数を指定します。この設定をこれらの変数の影響を反映するために、LifeKeeperやOSを再起動する必要はありません。CONFIRMSOTOに0秒を設定すると待ち時間無しで、CONFIRMSODEFの設定に基づいた動作をさせることができます。
[Confirm Failover]設定を選択するタイミング
この設定は、コミュニケーションパスが冗長化されていない環境で場合のディザスターリカバリーやWAN 構成で使用されます。
- 通常のサイト(非マルチサイトクラスターおよび非XenServer)では、あるサーバーで [Properties] ページを開き、 [Confirm Failover] フラグをオンに設定するサーバーを選択してください。
[Block Resource Failover On]
[Block Resource Failover] 設定は、指定したシステムでのリソース障害に起因するフェイルオーバーをブロックします。
デフォルトでは、リソース障害を検知した時、ローカルシステムでの障害リソースのリカバリー(ローカルリカバリー)を試行し、ローカルリカバリーが失敗した場合、または有効になっていない場合は、リソースが定義されている、優先順位が次に最も高いスタンバイノードにフェイルオーバーしようとします。Block Resource Failoverの設定は、この時のフェイルオーバーをブロックします。
Block Resource Failoverの設定をGUIで有効にする場合は、サーバープロパティーのGeneralタブ画面を使用します。以下はサーバープロパティーのGeneral画面の例です。赤で囲まれた部分が [Block Resource Failover On] を設定する画面です。
この画面の例は、lktestAという名前のホストから見た設定となります。上図の赤で囲まれた部分が [Confirm Failover] の設定部分で、HAクラスターを構成するノードの名前が縦に表示されています。この例では、lktestAの対向ノードがlktestBとなっています。
この場合、lktestB上にBlock Resource Failover フラグが作成されます。lktestBでflg_listコマンドを実行すると、「block_failover」というフラグが作成されていることを確認することができます。出力例は以下の通りです。
[root@lktestB~]# flg_list
block_failover
この結果lkestB上で、リソース障害が発生した場合には、他ノード (IktestA) へのフェイルオーバーがブロックされます。
block_failoverフラグは、それがセットされているノード上で発生したリソース障害によるフェイルオーバーをブロックします。 この設定によってフェイルオーバーがブロックされた場合には、以下のようなログが記録されます。
ERROR:lcd.recover:::004787:Failover is blocked by current settings. MANUAL INTERVENTION IS REQUIRED
設定例
いくつかの具体的な設定例を解説します。
全ての自動フェイルオーバーをすべてブロックする
この例ではlktestAとlktestBどちらでノード障害、リソース障害が発生してもフェイルオーバーしないようにします。この設定にはConfirm Failover設定とBlock Resource failover設定を利用します。LKCLI ではコマンド1つで設定可能です。詳細は lkcli server block-all-failovers を参照ください。GUI を使った設定例は次の通りです。
- lktestAサーバーを選択し、 [Server Properties] を表示してください。
[General] タブで、lktestBの行にある [Set Confirm Failover On] ボックスと、LktestAとLktestB両方の行にある [Set Block Resource Failover on] ボックスをオンにしてください。
GUIのlktestAのサーバープロパティー設定例
Set Confirm Failover On | Set Block Resource Failover On | |
---|---|---|
|
|
|
|
|
|
※GUIでサーバープロパティーをみる場合、ノード名は、プロパティーパネルの上部近くに表示されます。
- lktestBサーバーを選択し、 [Server Properties] を表示してください。
[General] タブで、lktestAの行にある [Set Confirm Failover On] ボックスをオンにしてください。
GUIのlktestBのサーバープロパティー設定例
Set Confirm Failover On | Set Block Resource Failover On | |
---|---|---|
|
|
|
|
|
|
※GUIでは表示している自ノードのホスト名が列の上部に表示されます
GUIで設定した後、lktestBでflg_listコマンドを使用してフラグ設定を確認すると、「confirmso!lktestA」フラグが作成されていることが確認できます。
ここまでの結果それぞれのノードにconfirmso!hostnameとblock_failoverフラグがセットされていることを確認してください。confirmsoフラグについては、lktestA上のlktestBからのフェイルオーバーをブロックするために、フェィルオーバー確認が実行されることになっているhostnameが、フラグ名の内容の一部として記載されることを確認して下さい。lktestAは、lktestA上でlktestBをconfirmsoフラグ名の内容に記載する必要があります。本設定例ではそれぞれのノードで以下のようにフラグが作成されます。
Confirm Failover フラグ | Block Resource Failoverフラグ | |
---|---|---|
|
|
|
|
|
|
- 両ノードの/etc/default/LifeKeeper のCONFIRMSOTOとCONFIRMSODEFの設定値を以下のように設定してください。(LifeKeeperやOSの再起動は必要ありません。)
CONFIRMSODEF = 1
CONFIRMSOTO = 0
CONFIRMSOTOの設定については待ち時間を設ける場合には時間を秒で指定することも可能です。ポイントはCONFIRMSODEFの設定が0(フェイルオーバーする)から1(フェイルオーバーしない)になっていることです。
上記の設定により、オペレータが介在することなく、ノード障害はすぐにブロックされます。
一方向のフェイルオーバーをブロックする
この例ではlktestAで障害が検知された場合にはノード障害、リソース障害どちらの場合でもlktestBへのフェイルオーバーをブロックします。逆に、lktestBで障害が発生した場合にはノード障害、リソース障害どちらの場合でもServerAへフェイルオーバーします。
- lktestAを選択し、 [Server Properties] を表示してください。
- [General] タブで、lktestAの行にある [Set Confirm Failover On] ボックスと、lktestAの行にある [Set Block Resource Failover On] ボックスをオンにしてください。GUIでの設定状態は以下のようになります。
GUIのlktestAのサーバープロパティー設定例
Set Confirm Failover On | Set Block Resource Failover On | |
---|---|---|
|
|
|
|
|
|
- lktestBサーバーを選択し、 [Server Properties] を表示してください。
[General] タブで、lktestAの行にある [Set Confirm Failover On] ボックスをオフ(チェックなし)にしてください。GUIでの設定状態は以下のようになります。
GUIのlktestBのサーバープロパティー設定例
Set Confirm Failover On | Set Block Resource Failover On | |
---|---|---|
|
|
|
|
|
|
※GUIでは表示している自ノードのホスト名が列の上部に表示されます。
この設定で、lktestB上に「confirmso!lktestA」フラグ、lktestA上に「Block failover」フラグが設定されていることを確認してください (lktestAには、confirmsoフラグは設定されません)
Confirm Failover フラグ | Block Resource Failoverフラグ | |
---|---|---|
|
|
|
|
|
|
- lktestBの/etc/default/LifeKeeper を以下のように設定してください。LifeKeeperやOSの再起動は必要ありません。
CONFIRMSODEF = 1
CONFIRMSOTO = 0
ここまでの設定によって、lktestAサーバーからlktestBのサーバーへのフェイルオーバーは許可されますが、lktestBからlktestAへのフェイルオーバーは許可されません。
このトピックへフィードバック