5 フェンシング(stonith)の構成

この章では、フェンシング(stonith)の構成方法を説明します。

 フェンシング(stonith)構成について

フェンシング、つまりstonith (Shoot The Other Node In The Head)は、ノードが応答しなくなった場合にデータを保護するために使用されます。ノードは、応答に失敗しても、データにアクセスしていることがあります。データが安全であることを確実にするために、フェンシングを使用して、元のノードが完全にオフラインになるまでライブ・ノードがデータにアクセスしないようにできます。このタスクを実行するには、ノードをオフラインにできるデバイスを構成する必要があります。この目的のために構成できる使用可能なフェンシング・エージェントが多数あります。一般に、stonithは、クラスタを保護するためにノードを物理的にリブートまたはシャットダウンすることのできる特定のハードウェアおよびサービス・プロトコルに依存します。

次に、使用可能なフェンシング・エージェントのいくつかを使用する様々な構成を示します。これらの例では、ハードウェアに関して特定の想定を行い、影響を受けるハードウェアの設定、構成および使用方法をすでに理解していることを前提にしています。次の例は、基本的なガイダンスのみを目的としています。このドキュメントで説明する概念をよく理解するには、上位のドキュメントも参照してください。

次のいずれかの構成に進む前に、stonithがクラスタ構成に対して有効になっていることを確認します。

sudo pcs property set stonith-enabled=true

stonithを構成した後、次のコマンドを実行して構成を確認し、正しく設定されていることを確認します。

sudo pcs stonith config
sudo pcs cluster verify --full

stonith構成のステータスを確認するには、次のコマンドを実行します。

sudo pcs stonith

クラスタのステータスを確認するには、次のコマンドを実行します。

sudo pcs status

フェンシング構成の例

次の例では、実装できる様々なタイプのフェンシング構成について説明します。

IPMI LANフェンシング

Intelligent Platform Management Interface (IPMI)は、ホスト・システムのハードウェアおよびファームウェアの管理機能を提供するサブシステムとのインタフェースであり、システムのオペレーティング・システムにアクセスする必要なく、専用ネットワーク経由でシステムの電源を切断後ただちに投入する機能を備えています。stonithがIPMI LAN全体で実行されるように、クラスタのfence_ipmilanフェンシング・エージェントを構成できます。

システムがIPMI向けに構成されている場合は、クラスタ内のいずれかのノードで次のコマンドを実行して、ipmilanフェンシング・エージェントを有効にし、両方のノードにstonithを構成できます。次に例を示します。

sudo pcs stonith create ipmilan_n1_fencing fence_ipmilan pcmk_host_list=node1 delay=5 \
ipaddr=203.0.113.1 login=root passwd=password lanplus=1 op monitor interval=60s
sudo pcs stonith create ipmilan_n2_fencing fence_ipmilan pcmk_host_list=node2 \
ipaddr=203.0.113.2 login=root passwd=password lanplus=1 op monitor interval=60s

この例では、node1は、IPアドレス203.0.113.1にIPMI LANインタフェースが構成されているホストです。node2という名前のホストには、IP 203.0.113.2上に構成されているIPMI LANインタフェースがあります。両方のシステムのIPMIログイン用のrootユーザー・パスワードは、この例ではpasswordとして指定されています。各インスタンスにおいて、これらの構成変数を特定の環境に適した値に置き換える必要があります。

遅延オプションは1つのノードにのみ設定する必要があることに注意してください。この設定により、フェンス競合状態のまれなケースで、1つのノードのみが強制終了され、もう一方は実行が続行されるようになります。このオプションを設定しないと、どちらのノードも自分が唯一残っているノードであると想定し、同時にお互いをリセットする可能性があります。

注意:

IPMI LANエージェントは、IPMIサブシステムのログイン資格証明をプレーン・テキストで公開します。Pacemaker構成およびツールにアクセスできるユーザーがこれらの資格証明および関連する基礎となるサブシステムにもアクセスできることを、セキュリティ・ポリシーで保証する必要があります。

SCSIフェンシング

SCSIフェンシング・エージェントは、ストレージレベルのフェンシングを提供するために使用されます。この構成では、SCSI-3 Persistent Reservation (PR)を使用して、ストレージ・リソースが2つのノードで同時に書き込まれないようにします。ウォッチドッグ・サービスと組み合せて使用すると、ノードが予約なしでSCSIリソースにアクセスしようとした場合に、stonithを使用してそのノードを自動的にリセットできます。

この方法で環境を構成するには:

  1. 次の例に示すように、ウォッチドッグ・サービスを両方のノードにインストールし、指定されたfence_scsi_checkスクリプトをウォッチドッグ構成にコピーしてから、サービスを有効にします。

    sudo dnf install watchdog
    sudo cp /usr/share/cluster/fence_scsi_check /etc/watchdog.d/
    sudo systemctl enable --now watchdog
  2. 両方のノードで、iscsi-initiator-utilsパッケージで提供されるiscsidサービスを有効にします。

    sudo dnf install -y iscsi-initiator-utils
    sudo systemctl enable --now iscsid
  3. ウォッチドッグ・サービスとiscsidサービスを使用して両方のノードを構成した後、いずれかのクラスタ・ノードでfence_scsiフェンシング・エージェントを構成し、iSCSIターゲットなどの共有ストレージ・デバイスをモニターできます。次に例を示します。

    sudo pcs stonith create scsi_fencing fence_scsi pcmk_host_list="node1 node2" \
     devices="/dev/sdb" meta provides="unfencing"

    この例では、node1node2はクラスタ内のノードのホスト名を表し、/dev/sdbは共有ストレージ・デバイスです。これらの変数を特定の環境に適した値に置き換えます。

SBDフェンシング

Storage Based Death (SBD)デーモンは、システム上で実行され、共有ストレージをモニターできます。SBDデーモンは、メッセージ・システムを使用してクラスタのヘルスを追跡できます。適切なフェンシング・エージェントがstonithを実装する必要があると判断した場合、SBDはリセットをトリガーすることもできます。

ノート:

SBDフェンシングは、Oracle Cloud Infrastructureで実行されているOracle Linux HAクラスタで使用される方法です。詳細は、Oracle Cloud Infrastructure (OCI)での高可用性クラスタの作成を参照してください。

SBDフェンシングを設定および構成するには:

  1. いずれかのノードで次のコマンドを実行して、クラスタを停止します。

    sudo pcs cluster stop --all
  2. 各ノードで、SBDデーモンをインストールして構成します。

    sudo dnf install sbd
  3. sbd systemdサービスを有効にします。

    sudo systemctl enable sbd

    sbd systemdサービスは、pacemakerサービスの依存関係に従って自動的に起動および停止されるため、このサービスを個別に実行する必要はありません。sbd systemdサービスを起動または停止しようとすると失敗し、依存関係サービスとして制御されていることを示すエラーが返されます。

  4. /etc/sysconfig/sbdファイルを編集し、SBD_DEVICEパラメータを設定して共有ストレージ・デバイスを識別します。たとえば、共有ストレージ・デバイスが/dev/sdcで使用可能な場合は、ファイルに次の行が含まれていることを確認してください。

    SBD_DEVICE="/dev/sdc"
  5. いずれかのノードで、共有ストレージ・デバイスにSBDメッセージング・レイアウトを作成し、そのレイアウトが設定されていることを確認します。たとえば、/dev/sdcにある共有ストレージ・デバイスでメッセージングを設定して検証するには、次のコマンドを実行します。

    sudo sbd -d /dev/sdc create
    sudo sbd -d /dev/sdc list
  6. 最後に、クラスタを起動し、共有ストレージ・デバイスのfence_sbdフェンシング・エージェントを構成します。たとえば、共有ストレージ・デバイス/dev/sdcを構成するには、いずれかのノードで次のコマンドを実行します。

    sudo pcs cluster start --all
    sudo pcs stonith create sbd_fencing fence_sbd devices=/dev/sdc

IF-MIBフェンシング

IF-MIBフェンシングは、SNMPを使用してイーサネット・ネットワーク・スイッチのIF-MIBにアクセスし、さらにスイッチ上のポートをシャットダウンします。これにより、ホストは実質的にオフラインになります。この構成では、ホストがネットワークから切断されている間、ホストは実行中のままになります。イーサネット接続が停止しても、ファイバチャネル接続またはインフィニバンド接続はそのまま残る可能性があることに注意してください。つまり、これらの接続で使用可能なデータは引き続き危険にさらされる可能性があります。したがって、このフェンシング方法をフォールバック・フェンシング・メカニズムとして構成することを検討してください。複数のフェンシング・エージェントを組み合せてstonithの成功を最大限にする方法の詳細は、フェンシング・レベルの構成を参照してください。

IF-MIBフェンシングを構成するには:

  1. 少なくともSNMP v2cのスイッチを構成し、SNMP SETメッセージが有効になっていることを確認します。たとえば、Oracleスイッチでは、ILOM CLIを使用して次のコマンドを実行できます。

    sudo set /SP/services/snmp/ sets=enabled
    sudo set /SP/services/snmp/ v2c=enabled
  2. クラスタ内のいずれかのノードで、次の例に示すように、環境内の各ノードにfence_ifmibフェンシング・エージェントを構成します:

    sudo pcs stonith create ifmib_n1_fencing fence_ifmib pcmk_host_list=node1 \
    ipaddr=203.0.113.10 community=private port=1 delay=5 op monitor interval=60s
    sudo pcs stonith create ifmib_n2_fencing fence_ifmib pcmk_host_list=node2 \
    ipaddr=203.0.113.10 community=private port=2 op monitor interval=60s

    この例では、SNMP IF-MIBスイッチはIPアドレス203.0.113.10でアクセスでき、node1ホストはスイッチ上のポート1に接続され、node2ホストはスイッチ上のポート2に接続されます。これらの変数を特定の環境に適した値に置き換えます。

フェンシング・レベルの構成

複数のフェンシング・エージェントを構成している場合は、異なるフェンシング・レベルを設定できます。フェンシング・レベルを使用すると、様々なフェンシング方法に優先順位を付けることができ、デフォルトのフェンシング・メカニズムが失敗した場合のフォールバック・オプションに有用なメカニズムを提供できます。

各フェンシング・レベルは、レベル1から昇順で試行されます。特定のレベル用に構成されているフェンシング・エージェントが失敗すると、次のレベルのフェンシング・エージェントが試行される、というようになります。

たとえば、レベル1でIPMI-LANフェンシングを構成し、レベル2オプションとしてIF-MIBフェンシングにフォールバックする場合があります。フェンシング構成の例の構成例を使用して、いずれかのノードで次のコマンドを実行し、構成済エージェントごとにフェンシング・レベルを設定します。

sudo pcs stonith level add 1 node1 ipmilan_n1_fencing
sudo pcs stonith level add 1 node2ipmilan_n2_fencing
sudo pcs stonith level add 2 node1ifmib_n1_fencing
sudo pcs stonith level add 2 node2ifmib_n2_fencing