4.5. Red Hat High Availability クラスターでのフェンシングの設定
クラスター内のノードの 1 つと通信が失敗した場合に、障害が発生したクラスターノードがアクセスする可能性があるリソースへのアクセスを、その他のノードが制限したり、解放したりできるようにする必要があります。クラスターノードが応答しない可能性があるため、そのクラスターノードと通信しても成功しません。代わりに、フェンスエージェントを使用した、フェンシングと呼ばれる外部メソッドを指定する必要があります。フェンスデバイスは、クラスターが使用する外部デバイスのことで、このデバイスを使用して、不安定なノードによる共有リソースへのアクセスを制限したり、クラスターノードでハードリブートを実行します。
フェンスデバイスが設定されていないと、以前使用していたリソースが解放されていることを切断されているクラスターノードが把握できず、他のクラスターノードでサービスを実行できなくなる可能性があります。また、クラスターノードがそのリソースを解放したとシステムが誤って想定し、データが破損または損失する可能性もあります。フェンスデバイスが設定されていないと、データの整合性は保証できず、クラスター設定はサポートされません。
フェンシングの進行中は、他のクラスター操作を実行できません。クラスターノードの再起動後にフェンシングが完了するか、クラスターノードがクラスターに再度参加するまで、クラスターの通常の動作を再開することができません。フェンシングと Red Hat High Availability クラスターにおけるその重要性の詳細は、Red Hat ナレッジベースのソリューション記事 Fencing in a Red Hat High Availability Cluster を参照してください。
4.5.1. 利用可能なフェンスエージェントと、そのオプションの表示 リンクのコピーリンクがクリップボードにコピーされました!
以下のコマンドは、利用可能なフェンスエージェントと、特定のフェンスエージェントで利用可能なオプションを表示できます。
システムのハードウェアによって、クラスターに使用するフェンシングデバイスのタイプが決まります。サポートされているプラットフォームとアーキテクチャー、およびさまざまなフェンシングデバイスの詳細は、Red Hat ナレッジベースのアーティクル記事 Support Policies for RHEL High Availability Clusters の Cluster Platforms and Architectures のセクションを参照してください。
使用可能なすべてのフェンスエージェントのリストを表示するには、次のコマンドを実行します。フィルターを指定すると、フィルターに一致するフェンスエージェントのみが表示されます。
pcs stonith list [filter]
pcs stonith list [filter]
指定したフェンスエージェントのオプションを表示するには、次のコマンドを実行します。
pcs stonith describe [stonith_agent]
pcs stonith describe [stonith_agent]
たとえば、次のコマンドでは Telnet または SSH 経由の APC 用フェンスエージェントのオプションを表示します。
fence_sbd
エージェントを除き、method
オプションを提供するフェンスエージェントで cycle
の値はサポートされていません。データが破損する可能性があるため、この値は指定しないでください。ただし、fence_sbd
の場合でもメソッドは指定せず、デフォルト値を使用する必要があります。
4.5.2. フェンスデバイスの作成 リンクのコピーリンクがクリップボードにコピーされました!
フェンスデバイスを作成するコマンドの形式は、以下のとおりです。利用可能なフェンスデバイス作成オプションのリストは、pcs stonith -h
の出力を参照してください。
pcs stonith create stonith_id stonith_device_type [stonith_device_options] [op operation_action operation_options]
pcs stonith create stonith_id stonith_device_type [stonith_device_options] [op operation_action operation_options]
以下のコマンドは、1 つのノードに対して、1 つのフェンシングデバイスを作成します。
pcs stonith create MyStonith fence_virt pcmk_host_list=f1 op monitor interval=30s
# pcs stonith create MyStonith fence_virt pcmk_host_list=f1 op monitor interval=30s
1 つのノードのみをフェンスできるフェンスデバイスや、複数のノードをフェンスできるデバイスもあります。フェンシングデバイスの作成時に指定するパラメーターは、フェンシングデバイスが対応しているか、必要としているかにより異なります。
- フェンスデバイスの中には、フェンスできるノードを自動的に判断できるものがあります。
-
フェンシングデバイスの作成時に
pcmk_host_list
パラメーターを使用すると、フェンシングデバイスで制御されるすべてのマシンを指定できます。 -
フェンスデバイスによっては、フェンスデバイスが理解する仕様へのホスト名のマッピングが必要となるものがあります。フェンシングデバイスの作成時に、
pcmk_host_map
パラメーターを使用して、ホスト名をマッピングできます。
pcmk_host_list
パラメーターおよび pcmk_host_map
パラメーターの詳細は、フェンシングデバイスの一般的なプロパティー を参照してください。
フェンスデバイスを設定したら、デバイスをテストして正しく機能していることを確認してください。フェンスデバイスをテストする方法は フェンスデバイスのテスト を参照してください。
4.5.3. フェンシングデバイスの一般的なプロパティー リンクのコピーリンクがクリップボードにコピーされました!
フェンシングデバイスにも設定可能な一般的なプロパティーや、フェンスの動作を決定するさまざまなクラスタープロパティーがあります。
クラスターノードは、フェンスリソースが開始しているかどうかに関わらず、フェンスデバイスでその他のクラスターノードをフェンスできます。以下の例外を除き、リソースが開始しているかどうかは、デバイスの定期的なモニターのみを制御するものとなり、使用可能かどうかは制御しません。
-
フェンシングデバイスは、
pcs stonith disable stonith_id
コマンドを実行して無効にできます。これにより、ノードがそのデバイスを使用できないように設定できます。 -
特定のノードがフェンシングデバイスを使用できないようにするには、
pcs constraint location … avoids
コマンドで、フェンシングリソースの場所制約を設定できます。 -
stonith-enabled=false
を設定すると、フェンシングがすべて無効になります。ただし、実稼働環境でフェンシングを無効にすることは適していないため、フェンシングが無効になっている場合は、Red Hat ではクラスターがサポートされないことに注意してください。
以下の表は、フェンシングデバイスに設定できる一般的なプロパティーを説明します。
フィールド | 型 | デフォルト | 説明 |
---|---|---|---|
| 文字列 |
ホスト名を、ホスト名に対応していないデバイスのポート番号へマッピングします。たとえば、 | |
| 文字列 |
このデバイスで制御するマシンのリストです ( | |
| 文字列 |
*
* それが設定されておらず、フェンスデバイスが
* それ以外で、フェンスデバイスが
* それ以外は、 |
デバイスで制御するマシンを指定します。使用できる値は、 |
以下の表では、フェンシングデバイスに設定できるその他のプロパティーをまとめています。これらのオプションは高度な設定を行う場合にのみ使用されます。
フィールド | 型 | デフォルト | 説明 |
---|---|---|---|
| 文字列 | port |
port の代替パラメーターです。デバイスによっては、標準の port パラメーターに対応していない場合や、そのデバイス固有のパラメーターも提供している場合があります。このパラメーターを使用して、デバイス固有の代替パラメーターを指定します。これは、フェンシングするマシンを示します。クラスターが追加パラメーターを提供しないようにする場合は、 |
| 文字列 | reboot |
|
| 時間 | 60s |
|
| 整数 | 2 |
タイムアウト期間内に、 |
| 文字列 | off |
|
| 時間 | 60s |
|
| 整数 | 2 | タイムアウト期間内に、off コマンドを再試行する回数の上限です。複数の接続に対応していないデバイスもあります。デバイスが別のタスクでビジー状態になると操作が失敗する場合があるため、タイムアウトに達していなければ、Pacemaker が操作を自動的に再試行します。Pacemaker によるオフ動作の再試行回数を変更する場合に使用します。 |
| 文字列 | list |
|
| 時間 | 60s | list 操作にタイムアウトを指定します。デバイスによって、この操作が完了するのにかかる時間が、通常と大きく異なる場合があります。このパラメーターを使用して、list 操作にデバイス固有のタイムアウトを指定します。 |
| 整数 | 2 |
タイムアウト期間内に、 |
| 文字列 | monitor |
|
| 時間 | 60s |
|
| 整数 | 2 |
タイムアウト期間内に、 |
| 文字列 | status |
|
| 時間 | 60s |
|
| 整数 | 2 | タイムアウト期間内に、status コマンドを再試行する回数の上限です。複数の接続に対応していないデバイスもあります。デバイスが別のタスクでビジー状態になると操作が失敗する場合があるため、タイムアウトに達していなければ、Pacemaker が操作を自動的に再試行します。Pacemaker による status 動作の再試行回数を変更する場合に使用します。 |
| 文字列 | 0s |
フェンシング操作のベース遅延を有効にし、ベース遅延の値を指定します。 |
| 時間 | 0s |
フェンシング操作のランダム遅延を有効にし、ベース遅延とランダム遅延を組み合わせた最大値である最大遅延を指定します。たとえば、ベース遅延が 3 で、 |
| 整数 | 1 |
このデバイスで並行して実行できる操作の上限です。最初に、クラスタープロパティーの |
| 文字列 | on |
高度な使用のみ - |
| 時間 | 60s |
高度な使用のみ - |
| 整数 | 2 |
高度な使用のみ - タイムアウト期間内に、 |
個々のフェンスデバイスに設定できるプロパティーのほかにも、以下の表で説明しているように、フェンス動作を判断するクラスタープロパティーも設定できます。
オプション | デフォルト | 説明 |
---|---|---|
| true |
障害が発生したノードと、停止できないリソースが含まれるノードをフェンスする必要があることを示します。データを保護するには、
Red Hat は、この値が |
| reboot |
フェンシングデバイスに送信するアクション。使用できる値は |
| 60s | STONITH アクションが完了するのを待つ時間。 |
| 10 | クラスターがすぐに再起動できなくなるまで、ターゲットでフェンシングが失敗する回数。 |
| ノードがハードウェアウォッチドッグによって強制終了すまで待機する最大時間。この値は、ハードウェアウォッチドッグのタイムアウト値の倍に設定することが推奨されます。このオプションは、ウォッチドッグのみの SBD 設定がフェンシングに使用される場合にのみ必要です。 | |
| true | フェンシング操作を並行して実行できるようにします。 |
| stop |
独自のフェンシングの通知を受信した場合は、クラスターノードがどのように反応するかを決定します。クラスターノードは、フェンシングの設定が間違っている場合に独自のフェンシングの通知を受信するか、ファブリックフェンシングがクラスター通信を遮断しない状態である可能性があります。許可される値は、Pacemaker をすぐに停止し、停止したままにする
このプロパティーのデフォルト値は |
| 0 (無効) | フェンシング遅延を設定すると、スプリットブレインが発生した場合に、リソースの実行数が最も少ない、または実行中のリソースの重要性が最も低いノードがフェンスされるように、2 ノードクラスターを設定できます。フェンシング遅延パラメーターとその相互作用に関する一般的な情報は、フェンシング遅延 を参照してください。 |
クラスタープロパティーの設定は、https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/configuring_and_managing_high_availability_clusters/index#setting-cluster-properties を参照してください。
4.5.4. フェンシング遅延 リンクのコピーリンクがクリップボードにコピーされました!
2 ノードクラスターでクラスター通信が失われると、一方のノードがこれを先に検出し、他方のノードをフェンスすることがあります。ただし、両方のノードが同時に検出した場合、各ノードが他方のノードのフェンシングを開始した結果、両方のノードの電源がオフになるかリセットされる可能性があります。フェンシング遅延を設定すると、両方のクラスターノードが相互にフェンスし合う可能性を減らすことができます。3 つ以上のノードを持つクラスターでも遅延を設定できますが、クォーラムのあるパーティションしかフェンシングを開始しないため、通常は利点がありません。
システム要件に応じて、さまざまなタイプのフェンシング遅延を設定できます。
静的フェンシング遅延
静的フェンシング遅延は、事前に定義された固定の遅延です。1 つのノードに静的遅延を設定すると、そのノードがフェンシングされる可能性が高くなります。これは、通信の切断を検出した後、他のノードが先にフェンシングを開始する可能性が高まるためです。active/passive クラスターでは、passive ノードに遅延を設定すると、通信が切断されたときに passive ノードがフェンスされる可能性が高くなります。静的遅延を設定するには、
pcs_delay_base
クラスタープロパティーを使用します。このプロパティーは、各ノードに個別のフェンスデバイスが使用される場合、または単一のフェンスデバイスがすべてのノードに使用される場合に設定できます。動的フェンシング遅延
動的フェンシング遅延はランダムです。この遅延は変化する可能性があり、フェンシングが必要なタイミングで決定されます。ランダム遅延を設定し、ベース遅延とランダム遅延を組み合わせた最大値を
pcs_delay_max
クラスタープロパティーで指定します。各ノードのフェンシング遅延がランダムの場合、どのノードがフェンスされるかもランダムです。この機能は、active/active 設計のすべてのノードに対して単一のフェンスデバイスを使用してクラスターが設定されている場合に便利です。優先フェンシング遅延
優先フェンシング遅延は、アクティブなリソースの優先度に基づきます。すべてのリソースの優先度が同じ場合、実行中のリソースが最も少ないノードがフェンスされます。ほとんどの場合、遅延関連のパラメーターは 1 つしか使用しませんが、複数のパラメーターを組み合わせることも可能です。遅延関連のパラメーターを組み合わせると、リソースの優先度の値が加算されて、総遅延となります。優先フェンシング遅延は、
priority-fencing-delay
クラスタープロパティーを使用して設定します。この機能を使用すると、ノード間の通信が失われたときに、実行中のリソースが最も少ないノードがフェンスされる可能性が高くなるため、active/active クラスター設計で役立つ場合があります。
pcmk_delay_base
クラスタープロパティー
pcmk_delay_base
クラスタープロパティーを設定すると、フェンシングのベース遅延が有効になり、ベース遅延の値が指定されます。
pcmk_delay_base
プロパティーに加えて pcmk_delay_max
クラスタープロパティーを設定すると、この静的遅延にランダム遅延を追加した合計値が最大遅延を下回るように、全体の遅延が導出されます。pcmk_delay_base
を設定し、pcmk_delay_max
を設定しない場合は、遅延にランダムなコンポーネントは含まれず、遅延は pcmk_delay_base
の値となります。
pcmk_delay_base
パラメーターを使用して、ノードごとに異なる値を指定できます。これにより、ノードごとに異なる遅延を使用して、単一のフェンスデバイスを 2 ノードクラスターで使用できます。別個の遅延を使用するために 2 つの別個のデバイスを設定する必要はありません。ノードごとに異なる値を指定するには、pcmk_host_map
と同様の構文を使用して、ホスト名をそのノードの遅延値にマップします。たとえば、node1:0;node2:10s
は、node1
をフェンシングするときに遅延を使用せず、node2
をフェンシングするときに 10 秒の遅延を使用します。
pcmk_delay_max
クラスタープロパティー
pcmk_delay_max
クラスタープロパティーを設定すると、フェンシング操作のランダム遅延が有効になり、ベース遅延とランダム遅延を組み合わせた最大値である最大遅延が指定されます。たとえば、ベース遅延が 3 で、pcmk_delay_max
が 10 の場合、ランダム遅延は 3 - 10 になります。
pcmk_delay_max
プロパティーに加えて pcmk_delay_base
クラスタープロパティーを設定すると、この静的遅延にランダム遅延を追加した合計値が最大遅延を下回るように、全体の遅延が導出されます。pcmk_delay_max
を設定し、pcmk_delay_base
を設定しない場合は、遅延に静的なコンポーネントは含まれません。
priority-fencing-delay
クラスタープロパティー
priority-fencing-delay
クラスタープロパティーを設定すると、スプリットブレインが発生した場合に、リソースの実行数が最も少ない、または実行中のリソースの重要性が最も低いノードがフェンスされるように、2 ノードクラスターを設定できます。
priority-fencing-delay
プロパティーは期間に設定できます。このプロパティーのデフォルト値は 0 (無効) です。このプロパティーがゼロ以外の値に設定されている場合や、priority メタ属性が 1 つ以上のリソースに対して設定されている場合は、スプリットブレインが発生すると、実行中の全リソースの合計優先度が最も高いノードが稼働状態を維持する可能性が高くなります。たとえば、pcs resource defaults update priority=1
と pcs property set priority-fencing-delay=15s
を設定し、他の優先度が設定されていない場合には、最も多くのリソースを実行するノード以外はフェンシングを開始するまで 15 秒間待機するため、最も多くのリソースを実行するノードが稼働状態を維持する可能性が高くなります。特定のリソースが他のリソースよりも重要である場合は、優先度を高く設定できます。
昇格可能なクローンに優先度が設定されている場合、そのクローンのプロモートロールを実行しているノードの優先度が 1 ポイント追加されます。
フェンシング遅延の相互作用
複数のタイプのフェンシング遅延を設定すると、以下のようになります。
-
priority-fencing-delay
プロパティーで遅延を設定すると、その遅延はpcmk_delay_base
とpcmk_delay_max
のフェンスデバイスプロパティーの遅延に追加されます。この動作により、両方のノードの優先度が同等の場合、またはノードの損失以外の理由で両方のノードをフェンシングする必要がある場合 (たとえば、on-fail=fencing
がリソースモニター操作用に設定されている場合)、ある程度の遅延を許容します。これらの遅延を組み合わせて設定する場合は、優先ノードが優先されるよう、priority-fencing-delay
プロパティーを、pcmk_delay_base
およびpcmk_delay_max
の最大遅延よりもはるかに大きい値に設定します。このプロパティーを 2 倍の値に設定すると、常に安全です。 -
Pacemaker 自体がスケジュールしたフェンシングしか、フェンシング遅延を監視しません。
dlm_controld
などの外部コードでスケジュールされるフェンシングや、pcs stonith fence
コマンドで実装されるフェンシングは、フェンスデバイスに必要な情報を提供しません。 -
個々のフェンスエージェントの中には遅延パラメーターが実装されたものがあります。このパラメーターは、エージェントによって決定された名前を持ち、
pcmk_delay_
* プロパティーで設定された遅延の影響は受けません。両方の遅延が設定されている場合は、その両方が一緒に追加され、通常は併用されません。
4.5.5. フェンスデバイスのテスト リンクのコピーリンクがクリップボードにコピーされました!
フェンシングは、Red Hat Cluster インフラストラクチャーの基本的な部分を設定しているため、フェンシングが適切に機能していることを確認またはテストすることは重要です。
Pacemaker クラスターノードまたは Pacemaker リモートノードがフェンスされると、オペレーティングシステムのグレースフルシャットダウンではなく、ハードキルが実行されるはずです。システムがノードをフェンスするときにグレースフルシャットダウンが発生する場合は、/etc/systemd/logind.conf
ファイルで ACPI soft-off を無効にして、電源ボタンが押されたことを示す信号をシステムが無視するようにします。logind.conf
ファイルで ACPI soft-off を無効にする手順は、logind.conf ファイルで ACPI soft-off を無効にする を参照してください。
手順
以下の手順で、フェンスデバイスをテストします。
デバイスへの接続に使用する SSH、Telnet、HTTP などのリモートプロトコルを使用して、手動でログインしてフェンスデバイスをテストしたり、出力される内容を確認します。たとえば、IPMI 対応デバイスのフェンシングを設定する場合は、
ipmitool
を使用してリモートでのログインを試行します。手動でログインする際に使用するオプションに注意してください。これらのオプションは、フェンスエージェントを使用する際に必要になる場合があります。フェンシングデバイスにログインできない場合は、そのデバイスが ping 可能であること、ファイアウォール設定がフェンシングデバイスへのアクセスを妨げていないこと、フェンシングデバイスでリモートアクセスが有効になっていること、認証情報が正しいことなどを確認します。
フェンスエージェントスクリプトを使用して、フェンスエージェントを手動で実行します。フェンスエージェントを実行するのに、クラスターサービスが実行している必要はないため、デバイスをクラスターに設定する前にこのステップを完了できます。これにより、先に進む前に、フェンスデバイスが適切に応答することを確認できます。
注記これらの例では、iLO デバイスの
fence_ipmilan
フェンスエージェントスクリプトを使用します。実際に使用するフェンスエージェントと、そのエージェントを呼び出すコマンドは、お使いのサーバーハードウェアによって異なります。指定するオプションを確認するには、フェンスエージェントの man ページを参照してください。通常は、フェンスデバイスのログイン、パスワードなどの情報と、その他のフェンスデバイスに関する情報を把握しておく必要があります。以下の例は、
-o status
パラメーターを指定してfence_ipmilan
フェンスエージェントスクリプトを実行する場合に使用する形式を示しています。このコマンドを実行すると、フェンシングは実行せずに、別のノードのフェンスデバイスインターフェイスのステータスを確認します。ノードの再起動を試行する前にデバイスをテストして、動作させることができます。このコマンドを実行する際に、iLO デバイスの電源をオン/オフにするパーミッションを持つ iLO ユーザーの名前およびパスワードを指定します。fence_ipmilan -a ipaddress -l username -p password -o status
# fence_ipmilan -a ipaddress -l username -p password -o status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の例は、
-o reboot
パラメーターを指定してfence_ipmilan
フェンスエージェントスクリプトを実行するために使用する形式を示しています。このコマンドを 1 つのノードで実行すると、この iLO デバイスで管理するノードが再起動します。fence_ipmilan -a ipaddress -l username -p password -o reboot
# fence_ipmilan -a ipaddress -l username -p password -o reboot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow フェンスエージェントがステータス、オフ、オン、または再起動の動作を適切に実行しない場合は、ハードウェア、フェンスデバイスの設定、およびコマンドの構文を確認する必要があります。さらに、デバッグ出力を有効にした状態で、フェンスエージェントスクリプトを実行できます。デバッグ出力は、一部のフェンスエージェントで、フェンスデバイスにログインする際に、フェンスエージェントスクリプトに問題が発生しているイベントシーケンスの場所を確認するのに役に立ちます。
fence_ipmilan -a ipaddress -l username -p password -o status -D /tmp/$(hostname)-fence_agent.debug
# fence_ipmilan -a ipaddress -l username -p password -o status -D /tmp/$(hostname)-fence_agent.debug
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 発生した障害を診断する際に、フェンスデバイスに手動でログインする際に指定したオプションが、フェンスエージェントスクリプトでフェンスエージェントに渡した内容と同一であることを確認する必要があります。
フェンスエージェントが、暗号化した接続に対応する場合は、証明書の検証で障害が生じているためにエラーが出力される場合があり、ホストを信頼することや、フェンスエージェントの
ssl-insecure
パラメーターを使用することが求められます。同様に、ターゲットデバイスで SSL/TLS を無効にした場合は、フェンスエージェントに SSL パラメーターを設定する際に、これを考慮しないといけない場合があります。注記テスト対象のフェンスエージェントが
fence_drac
またはfence_ilo
の場合、もしくはその他の、継続して失敗しているシステム管理デバイスのフェンシングエージェントの場合は、フォールバックしてfence_ipmilan
を試行します。大半のシステム管理カードは IPMI リモートログインに対応しており、フェンスエージェントとしてはfence_ipmilan
だけに対応しています。フェンスデバイスを、手動で機能したオプションと同じオプションでクラスターに設定し、クラスターを起動したら、以下の例にあるように、任意のノードから
pcs stonith fence
コマンドを実行してフェンシングをテストします (または複数のノードから複数回実行します)。pcs stonith fence
コマンドは、CIB からクラスター設定を読み取り、フェンス動作を実行するように設定されたフェンスエージェントを呼び出します。これにより、クラスター設定が正確であることが確認できます。pcs stonith fence node_name
# pcs stonith fence node_name
Copy to Clipboard Copied! Toggle word wrap Toggle overflow pcs stonith fence
コマンドが正常に動作する場合は、フェンスイベントが発生したときにクラスターのフェンシング設定が機能することを意味します。このコマンドが失敗すると、クラスター管理が取得した設定でフェンスデバイスを起動することができません。以下の問題を確認し、必要に応じてクラスター設定を更新します。- フェンス設定を確認します。たとえば、ホストマップを使用したことがある場合は、指定したホスト名を使用して、システムがノードを見つけられるようにする必要があります。
- デバイスのパスワードおよびユーザー名に、bash シェルが誤って解釈する可能性がある特殊文字が含まれるかどうかを確認します。パスワードとユーザー名を引用符で囲んで入力すると、この問題に対処できます。
-
pcs stonith
コマンドで指定したものとまったく同じ IP アドレスまたはホスト名を使用してデバイスに接続できるか確認します。たとえば、stonith コマンドでホスト名を指定し、IP アドレスを使用して行ったテストは有効ではありません。 フェンスデバイスが使用するプロトコルにアクセスできる場合は、そのプロトコルを使用してデバイスへの接続を試行します。たとえば、多くのエージェントが ssh または telnet を使用します。デバイスへの接続は、デバイスの設定時に指定した認証情報を使用して試行する必要があります。これにより、有効なプロンプトを取得し、そのデバイスにログインできるかどうかを確認できます。
すべてのパラメーターが適切であることが確認できたものの、フェンスデバイスには接続できない時に、フェンスデバイスでログ機能が使用できる場合は、ログを確認できます。これにより、ユーザーが接続したかどうかと、ユーザーが実行したコマンドが表示されます。
/var/log/messages
ファイルで stonith やエラーを確認すれば、発生している問題のヒントが得られる可能性もあります。また、エージェントによっては、より詳細な情報が得られる場合があります。
フェンスデバイステストに成功し、クラスターが稼働したら、実際の障害をテストします。このテストでは、クラスターで、トークンの損失を生じさせる動作を実行します。
ネットワークを停止します。ネットワークの利用方法は、設定により異なります。ただし、多くの場合は、ネットワークケーブルまたは電源ケーブルをホストから物理的に抜くことができます。ネットワーク障害のシミュレーションの詳細は、Red Hat ナレッジベースソリューション What is the proper way to simulate a network failure on a RHEL Cluster? を参照してください。
注記ネットワークや電源ケーブルを物理的に切断せずに、ローカルホストのネットワークインターフェイスを無効にすることは、フェンシングのテストとしては推奨されません。実際に発生する障害を正確にシミュレートしていないためです。
ローカルのファイアウォールを使用して、corosync の受信トラフィックおよび送信トラフィックをブロックします。
以下の例では corosync をブロックします。ここでは、デフォルトの corosync ポートと、ローカルのファイアウォールとして
firewalld
が使用されていることと、corosync が使用するネットワークインターフェイスがデフォルトのファイアウォールゾーンにあることが前提となっています。firewall-cmd --direct --add-rule ipv4 filter OUTPUT 2 -p udp --dport=5405 -j DROP firewall-cmd --add-rich-rule='rule family="ipv4" port port="5405" protocol="udp" drop
# firewall-cmd --direct --add-rule ipv4 filter OUTPUT 2 -p udp --dport=5405 -j DROP # firewall-cmd --add-rich-rule='rule family="ipv4" port port="5405" protocol="udp" drop
Copy to Clipboard Copied! Toggle word wrap Toggle overflow sysrq-trigger
でクラッシュをシミュレートし、マシンをクラッシュします。ただし、カーネルパニックを発生させると、データが損失する可能性があることに注意してください。クラッシュする前に、クラスターリソースを無効にすることが推奨されます。echo c > /proc/sysrq-trigger
# echo c > /proc/sysrq-trigger
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.5.6. フェンスレベルの設定 リンクのコピーリンクがクリップボードにコピーされました!
Pacemaker は、フェンストポロジーと呼ばれる機能を用いて、複数デバイスでのノードのフェンシングに対応します。トポロジーを実装するには、通常の方法で各デバイスを作成し、設定のフェンストポロジーセクションでフェンスレベルを 1 つ以上定義します。
Pacemaker は、以下のようにフェンシングレベルを処理します。
- レベルは、1 から昇順で試行されていきます。
- デバイスに障害が発生すると、現在のレベルの処理が終了します。同レベルのデバイスには試行されず、次のレベルが試行されます。
- すべてのデバイスのフェンシングが正常に完了すると、そのレベルが継承され、他のレベルは試行されなくなります。
- いずれかのレベルで成功するか、すべてのレベルが試行され失敗すると、操作は終了します。
ノードにフェンスレベルを追加する場合は、次のコマンドを使用します。デバイスは、stonith
ID をコンマ区切りのリストとして指定します。stonith ID が、指定したレベルで試行されます。
pcs stonith level add level node devices
pcs stonith level add level node devices
次の例では、デバイス my_ilo
に障害が発生してノードをフェンスできない場合に、Pacemaker がデバイス my_apc
の使用を試みるようにフェンスレベルを設定します。
前提条件
-
ノード
rh7-2
にmy_ilo
という ilo フェンスデバイスを設定した。 -
ノード
rh7-2
にmy_apc
という apc フェンスデバイスを設定した。
手順
ノード
rh7-2
のフェンスデバイスmy_ilo
にフェンシングレベル 1 を追加します。pcs stonith level add 1 rh7-2 my_ilo
# pcs stonith level add 1 rh7-2 my_ilo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ノード
rh7-2
のフェンスデバイスmy_apc
にフェンシングレベル 2 を追加します。pcs stonith level add 2 rh7-2 my_apc
# pcs stonith level add 2 rh7-2 my_apc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 現在設定されているフェンシングレベルをリスト表示します。
pcs stonith level
# pcs stonith level Node: rh7-2 Level 1 - my_ilo Level 2 - my_apc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
フェンスデバイスのテストの詳細は、フェンスデバイスのテスト を参照してください。
4.5.6.1. フェンスレベルの削除 リンクのコピーリンクがクリップボードにコピーされました!
次のコマンドは、指定したノードおよびデバイスのフェンスレベルを削除します。ノードやデバイスを指定しないと、指定したフェンスレベルがすべてのノードから削除されます。
pcs stonith level remove level [node_id] [stonith_id] ... [stonith_id]
pcs stonith level remove level [node_id] [stonith_id] ... [stonith_id]
4.5.6.2. フェンスレベルのクリア リンクのコピーリンクがクリップボードにコピーされました!
以下のコマンドを使用すると、指定したノードや stonith id のフェンスレベルが削除されます。ノードや stonith id を指定しないと、すべてのフェンスレベルが削除されます。
pcs stonith level clear [node]|stonith_id(s)]
pcs stonith level clear [node]|stonith_id(s)]
複数の stonith ID を指定する場合はコンマで区切って指定します。空白は入力しないでください。以下に例を示します。
pcs stonith level clear dev_a,dev_b
# pcs stonith level clear dev_a,dev_b
4.5.6.3. フェンスレベルでのノードとデバイスの検証 リンクのコピーリンクがクリップボードにコピーされました!
次のコマンドは、フェンスレベルで指定されたフェンスデバイスとノードがすべて存在することを確認します。
pcs stonith level verify
pcs stonith level verify
4.5.6.4. フェンシングトポロジーにおけるノードの指定 リンクのコピーリンクがクリップボードにコピーされました!
フェンストポロジーのノードは、ノード名に適用する正規表現と、ノードの属性 (およびその値) で指定できます。たとえば、次のコマンドでは、ノード node1
、node2
、および node3
がフェンスデバイス apc1
および apc2
を使用するように設定し、ノード node4
、node5
、および node6
がフェンスデバイス apc3
および apc4
を使用するように設定します。
pcs stonith level add 1 "regexp%node[1-3]" apc1,apc2 pcs stonith level add 1 "regexp%node[4-6]" apc3,apc4
# pcs stonith level add 1 "regexp%node[1-3]" apc1,apc2
# pcs stonith level add 1 "regexp%node[4-6]" apc3,apc4
次のコマンドでは、ノード属性のマッチングを使用して、同じように設定します。
ノード属性の詳細は、https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html-single/configuring_and_managing_high_availability_clusters/index#node-attributes を参照してください。
4.5.7. 冗長電源のフェンシング設定 リンクのコピーリンクがクリップボードにコピーされました!
冗長電源にフェンシングを設定する場合は、ホストを再起動するときに、クラスターが、最初に両方の電源をオフにしてから、いずれかの電源をオンにするようにする必要があります。
ノードの電源が完全にオフにならないと、ノードがリソースを解放しない場合があります。このとき、解放できなかったリソースに複数のノードが同時にアクセスして、リソースが破損する可能性があります。
各デバイスを一度だけ定義し、両方のデバイスがノードのフェンスに必要であると指定する必要があります。
手順
最初のフェンスデバイスを作成します。
pcs stonith create apc1 fence_apc_snmp ipaddr=apc1.example.com login=user passwd='7a4D#1j!pz864' pcmk_host_map="node1.example.com:1;node2.example.com:2"
# pcs stonith create apc1 fence_apc_snmp ipaddr=apc1.example.com login=user passwd='7a4D#1j!pz864' pcmk_host_map="node1.example.com:1;node2.example.com:2"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 2 つ目のフェンスデバイスを作成します。
pcs stonith create apc2 fence_apc_snmp ipaddr=apc2.example.com login=user passwd='7a4D#1j!pz864' pcmk_host_map="node1.example.com:1;node2.example.com:2"
# pcs stonith create apc2 fence_apc_snmp ipaddr=apc2.example.com login=user passwd='7a4D#1j!pz864' pcmk_host_map="node1.example.com:1;node2.example.com:2"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ノードをフェンスするには両方のデバイスが必要であることを指定します。
pcs stonith level add 1 node1.example.com apc1,apc2 pcs stonith level add 1 node2.example.com apc1,apc2
# pcs stonith level add 1 node1.example.com apc1,apc2 # pcs stonith level add 1 node2.example.com apc1,apc2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.5.8. フェンスデバイスの管理 リンクのコピーリンクがクリップボードにコピーされました!
pcs
コマンドラインインターフェイスは、フェンスデバイスを設定した後にそれらの管理に使用できるさまざまなコマンドを提供します。
4.5.8.1. 設定済みのフェンスデバイスの表示 リンクのコピーリンクがクリップボードにコピーされました!
以下のコマンドは、現在設定されているフェンスデバイスをすべて表示します。stonith_id が指定されている場合、コマンドはその設定されたフェンシングデバイスのみのオプションを表示します。--full
オプションが指定されている場合、すべての設定されたフェンシングオプションが表示されます。
pcs stonith config [stonith_id] [--full]
pcs stonith config [stonith_id] [--full]
4.5.8.2. pcs コマンドとしてのフェンスデバイスのエクスポート リンクのコピーリンクがクリップボードにコピーされました!
pcs stonith config
コマンドの --output-format=cmd
オプションを使用して、別のシステムで設定されたフェンスデバイスを再作成するために使用できる pcs
コマンドを表示できます。
次のコマンドは、fence_apc_snmp
フェンスデバイスを作成し、デバイスを再作成するために使用できる pcs
コマンドを表示します。
4.5.8.3. フェンスレベル設定のエクスポート リンクのコピーリンクがクリップボードにコピーされました!
pcs stonith config
と pcs stonith level config
コマンドは、フェンシングレベル設定を JSON 形式と pcs
コマンドとしてエクスポートする --output-format=
オプションをサポートしています。
-
--output-format=cmd
を指定すると、フェンシングレベルを設定する現在のクラスター設定から作成されたpcs
コマンドが表示されます。これらのコマンドを使用して、別のシステムで設定されたフェンシングレベルを再作成できます。 -
--output-format=json
を指定すると、マシン解析に適した JSON 形式でフェンシングレベル設定が表示されます。
4.5.8.4. フェンスデバイスの修正と削除 リンクのコピーリンクがクリップボードにコピーされました!
次のコマンドを使用して、現在設定されているフェンシングデバイスのオプションを変更または追加します。
pcs stonith update stonith_id [stonith_device_options]
pcs stonith update stonith_id [stonith_device_options]
pcs stonith update
コマンドを使用して SCSI フェンシングデバイスを更新すると、フェンシングリソースが実行されていたものと同じノードで実行中のすべてのリソースが再起動されます。以下のコマンドのいずれかのバージョンを使用して、他のクラスターリソースを再起動しなくても SCSI デバイスを更新できます。SCSI フェンシングデバイスは、マルチパスデバイスとして設定できます。
pcs stonith update-scsi-devices stonith_id set device-path1 device-path2 pcs stonith update-scsi-devices stonith_id add device-path1 remove device-path2
pcs stonith update-scsi-devices stonith_id set device-path1 device-path2
pcs stonith update-scsi-devices stonith_id add device-path1 remove device-path2
現在の設定からフェンシングデバイスを削除する場合は次のコマンドを使用します。
pcs stonith delete stonith_id
pcs stonith delete stonith_id
4.5.8.5. 手動によるクラスターノードのフェンシング リンクのコピーリンクがクリップボードにコピーされました!
次のコマンドで、ノードを手動でフェンスできます。--off
オプションを指定すると、stonith への off
API 呼び出しが使用され、ノードを再起動する代わりにノードをオフにします。
pcs stonith fence node [--off]
pcs stonith fence node [--off]
ノードがアクティブでない場合でも、フェンスデバイスがそのノードをフェンスできない状況では、ノードのリソースをクラスターが復旧できない可能性があります。この場合は、ノードの電源が切れたことを手動で確認した後、次のコマンドを入力して、ノードの電源が切れたことをクラスターに確認し、そのリソースを回復のために解放できます。
指定したノードが実際にはオフになっていないが、クラスターによって通常制御されるクラスターソフトウェアまたはサービスを実行している場合は、データの破損とクラスター障害が発生します。
pcs stonith confirm node
pcs stonith confirm node
4.5.8.6. フェンスデバイスの無効化 リンクのコピーリンクがクリップボードにコピーされました!
フェンシングデバイスを無効にするには、pcs stonith disable
コマンドを実行します。
以下のコマンドは、フェンスデバイス myapc
を無効にします。
pcs stonith disable myapc
# pcs stonith disable myapc
4.5.8.7. ノードがフェンシングデバイスを使用しないように設定する手順 リンクのコピーリンクがクリップボードにコピーされました!
特定のノードがフェンシングデバイスを使用できないようにするには、フェンスリソースの場所の制約を設定します。
以下の例では、フェンスデバイスの node1-ipmi
が、node1
で実行されないようにします。
pcs constraint location node1-ipmi avoids node1
# pcs constraint location node1-ipmi avoids node1
4.5.9. 統合フェンスデバイスで使用する ACPI の設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスターが統合フェンスデバイスを使用する場合は、即時かつ完全なフェンシングを実行できるように、ACPI (Advanced Configuration and Power Interface) を設定する必要があります。
クラスターノードが統合フェンスデバイスでフェンシングされるように設定されている場合は、そのノードの ACPI Soft-Off を無効にします。ACPI Soft-Off を無効にすると、統合フェンスデバイスは、クリーンなシャットダウン (たとえば、shutdown -h now
) を試行するのではなく、ノードを即座に完全にオフにすることができます。一方で、ACPI Soft-Off が有効になっていると、統合フェンスデバイスがノードをオフにするのに 4 秒以上かかることがあります (以下の注記部分を参照してください)。さらに、ACPI Soft-Off が有効になっていて、ノードがシャットダウン時にパニック状態になるか、フリーズすると、統合フェンスデバイスがノードをオフにできない場合があります。このような状況では、フェンシングが遅延するか、失敗します。したがって、ノードが統合フェンスデバイスでフェンシングされ、ACPI Soft-Off が有効になっている場合は、クラスターが徐々に復元します。または管理者の介入による復旧が必要になります。
ノードのフェンシングにかかる時間は、使用している統合フェンスデバイスによって異なります。統合フェンスデバイスの中には、電源ボタンを押し続けるのと同じ動作を実行するものもあります。この場合は、ノードがオフになるのに 4 秒から 5 秒かかります。また、電源ボタンを押してすぐ離すのと同等の動作を行い、ノードの電源をオフにする行為をオペレーティングシステムに依存する統合フェンスデバイスもあります。この場合は、ノードがオフになるのにかかる時間は 4~ 5 秒よりも長くなります。
- ACPI Soft-Off を無効にする場合は、BIOS 設定を "instant-off"、またはこれに類似する設定に変更することが推奨されます。これにより、BIOS で ACPI Soft-Off を無効化 で説明しているように、ノードは遅延なくオフになります。
システムによっては、BIOS で ACPI Soft-Off を無効にできません。お使いのクラスターでは、BIOS で ACPI Soft-Off を無効にできない場合に、以下のいずれかの方法で ACPI Soft-Off を無効にできます。
-
/etc/systemd/logind.conf
ファイルにHandlePowerKey=ignore
を設定し、logind.conf ファイルで ACPI soft-off の無効化 に記載されているように、ノードがフェンシングされるとすぐにオフになることを確認します。これが、ACPI Soft-Off を無効にする 1 つ目の代替方法です。 GRUB 2 ファイルを使用した ACPI の完全な無効化 で説明されているように、カーネル起動コマンドラインに
acpi=off
を追加します。これは、ACPI Soft-Off を無効にする 2 つ目の代替方法です。この方法の使用が推奨される場合、または 1 つ目の代替方法が利用できない場合に使用してください。重要この方法は、ACPI を完全に無効にします。コンピューターの中には、ACPI が完全が無効になってるとシステムが正しく起動しないものもあります。お使いのクラスターに適した方法が他にない場合に 限り、この方法を使用してください。
4.5.9.1. BIOS で ACPI Soft-Off を無効化 リンクのコピーリンクがクリップボードにコピーされました!
以下の手順で、各クラスターノードの BIOS を設定して、ACPI Soft-Off を無効にできます。
BIOS で ACPI Soft-Off を無効にする手順は、サーバーシステムにより異なる場合があります。この手順は、お使いのハードウェアのドキュメントで確認する必要があります。
手順
-
ノードを再起動して
BIOS CMOS Setup Utility
プログラムを起動します。 - 電源メニュー (または同等の電源管理メニュー) に移動します。
電源メニューで、
Soft-Off by PWR-BTTN
機能 (または同等) をInstant-Off
(または、遅延なく電源ボタンでノードをオフにする同等の設定) に設定します。BIOS CMOS 設定ユーティリティー
は、ACPI Function
がEnabled
に設定され、Soft-Off by PWR-BTTN
がInstant-Off
に設定されていることを示しています。注記ACPI Function
、Soft-Off by PWR-BTTN
、およびInstant-Off
に相当するものは、コンピューターによって異なります。ただし、この手順の目的は、電源ボタンを使用して遅延なしにコンピューターをオフにするように BIOS を設定することです。-
BIOS CMOS Setup Utility
プラグラムを終了します。BIOS 設定が保存されます。 - ノードがフェンシングされるとすぐにオフになることを確認します。フェンスデバイスをテストする方法は フェンスデバイスのテスト を参照してください。
BIOS CMOS Setup Utility
:
`Soft-Off by PWR-BTTN` set to `Instant-Off`
`Soft-Off by PWR-BTTN` set to
`Instant-Off`
この例では、ACPI Function
が Enabled
に設定され、Soft-Off by PWR-BTTN
が Instant-Off
に設定されていることを示しています。
4.5.9.2. logind.conf ファイルで ACPI Soft-Off の無効化 リンクのコピーリンクがクリップボードにコピーされました!
/etc/systemd/logind.conf
ファイルで電源キーの処理を無効にする場合は、以下の手順を行います。
手順
/etc/systemd/logind.conf
ファイルに、以下の設定を定義します。HandlePowerKey=ignore
HandlePowerKey=ignore
Copy to Clipboard Copied! Toggle word wrap Toggle overflow systemd-logind
サービスを再起動します。systemctl restart systemd-logind.service
# systemctl restart systemd-logind.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - ノードがフェンシングされるとすぐにオフになることを確認します。フェンスデバイスをテストする方法は フェンスデバイスのテスト を参照してください。
4.5.9.3. GRUB 2 ファイルでの ACPI の完全な無効化 リンクのコピーリンクがクリップボードにコピーされました!
ACPI Soft-Off は、カーネルの GRUB メニューエントリーに acpi=off
を追加して無効にできます。
この方法は、ACPI を完全に無効にします。コンピューターの中には、ACPI が完全が無効になってるとシステムが正しく起動しないものもあります。お使いのクラスターに適した方法が他にない場合に 限り、この方法を使用してください。
手順
以下の手順で、GRUB 2 ファイルで ACPI を無効にします。
以下のように、
grubby
ツールで、--args
オプションと--update-kernel
オプションを使用して、各クラスターノードのgrub.cfg
ファイルを変更します。grubby --args=acpi=off --update-kernel=ALL
# grubby --args=acpi=off --update-kernel=ALL
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - ノードを再起動します。
- ノードがフェンシングされるとすぐにオフになることを確認します。フェンスデバイスをテストする方法は フェンスデバイスのテスト を参照してください。