9.4. pacemaker_remote サービス

pacemaker_remote サービスを使用すると、corosync を実行していないノードをクラスターに統合し、それらのノードのリソースはクラスターによって実際のクラスターノードと同様に管理されます。
pacemaker_remote サービスが提供する機能には以下が含まれます。
  • pacemaker_remote サービスは corosync の 16 ノード制限を超えた拡張を可能にします。
  • pacemaker_remote サービスを使用すると、仮想環境をクラスターリソースとして管理でき、さらに仮想環境内の個別のサービスをクラスターリソースとして管理できます。
pacemaker_remote サービスは以下の用語を使用して記述されます。
  • cluster node: 高可用性サービスを実行しているノード (pacemaker および corosync)。
  • remote node: corosync クラスターメンバーシップを必要としないクラスターにリモートで統合するために pacemaker_remote を実行しているノード。リモートノードは、ocf:pacemaker:remote リソースエージェントを使用するクラスターリソースとして設定されます。
  • guest nodepacemaker_remote サービスを実行する仮想ゲストノード。仮想ゲストリソースはクラスターにより管理されます。これはクラスターにより起動し、リモートノードとしてクラスターに統合されます。
  • pacemaker_remote: Pacemaker クラスター環境のリモートノードおよびゲストノード (KVM および LXC) 内でリモートアプリケーション管理を実行できるサービスデーモン。このサービスは、corosync を実行していないノード上でリソースをリモートで管理できる Pacemaker のローカルリソース管理デーモン (LRMD) の強化バージョンです。
  • LXClibvirt-lxc Linux コンテナードライバーで定義される Linux Container
pacemaker_remote サービスを実行している Pacemaker クラスターには次のような特徴があります。
  • リモートノードおよびゲストノードは pacemaker_remote サービスを実行します (仮想マシン側で必要な設定はほとんどありません)。
  • クラスターノードで実行しているクラスタースタック (pacemaker および corosync) はリモートノード上で pacemaker_remote サービスに接続するため、クラスターに統合することができます。
  • クラスターノードで実行しているクラスタースタック (pacemaker および corosync) はゲストノードを開始し、ゲストノード上で pacemaker_remote サービスに即座に接続するため、クラスターに統合することができます。
クラスターノードと、クラスターノードが管理するリモートおよびゲストノードの主な違いは、リモートおよびゲストノードはクラスタースタックを実行しないことです。そのため、リモートおよびゲストノードには以下の制限があります。
  • クォーラムで実行されません
  • フェンスデバイスのアクションを実行しません
  • クラスターの指定コントローラー (DC) として機能できない
  • pcs コマンドのすべてを実行できません
その一方で、リモートノードおよびゲストノードはクラスタースタックに関連するスケーラビリティーの制限に拘束されません。
前述の制限以外では、リモートノードとゲストノードはリソース管理に関してクラスターノードと同様に動作し、リモートおよびゲストノード自体をフェンシングできます。クラスターは、各リモートノードおよびゲストノードのリソースを完全に管理および監視できます。これらのノードに制約を作成したり、これらのノードをスタンバイ状態にすることができます。また、pcs コマンドを使用してクラスターノードでその他のアクションを実行することもできます。リモートおよびゲストノードは、クラスターノードと同様にクラスター状態の出力に表示されます。

9.4.1. ホストとゲストの認証

クラスターノードと pacemaker_remote 間の接続は TLS (Transport Layer Security) が使用され、PSK (Pre-Shared Key) の暗号化と TCP 上の認証 (デフォルトでポート 3121 を使用) でセキュア化されます。そのため、pacemaker_remote を実行しているクラスターノードおよびノードは同じプライベートキーを共有する必要があります。デフォルトでは、クラスターノードとリモートノードの両方でこのキーを /etc/pacemaker/authkey に格納する必要があります。
Red Hat Enterprise Linux 7.4 以降では、pcs cluster node add-guest コマンドでゲストノードの authkey を、pcs cluster node add-remote コマンドでリモートノードの authkey をセットアップできます。

9.4.2. ゲストノードリソースのオプション

ゲストノードとして動作するよう仮想マシンまたは LXC リソースを設定する場合、仮想マシンを管理する VirtualDomain リソースを作成します。VirtualDomain リソースに設定できるオプションの説明は、表9.3「仮想ドメインリソースのリソースオプション」 を参照してください。
VirtualDomain リソースオプションのほかにも、メタデータオプションはリソースをゲストノードとして定義し、接続パラメーターを定義します。Red Hat Enterprise Linux 7.4 では、 pcs cluster node add-guest コマンドを使用してこれらのリソースオプションを設定してください。7.4 以前のリリースでは、リソースを作成する際に、これらのオプションを設定できます。表9.4「KVM/LXC リソースをリモートノードとして設定するメタデータオプション」 では、これらのメタデータオプションを説明しています。

表9.4 KVM/LXC リソースをリモートノードとして設定するメタデータオプション

フィールドデフォルト説明
remote-node
<none>
このリソースが定義するゲストノードの名前。リソースをゲストノードとして有効にし、ゲストノードの識別に使用される一意名を定義します。 警告: この値はリソースやノードの ID と重複してはなりません。
remote-port
3121
pacemaker_remote へのゲスト接続に使用するカスタムのポートを設定します。
remote-addr
ホスト名として使用される remote-node
リモートノードの名前がゲストのホスト名ではない場合に接続する IP アドレスまたはホスト名
remote-connect-timeout
60s
保留中のゲスト接続がタイムアウトするまでの時間

9.4.3. リモートノードリソースのオプション

リモートノードは、リソースエージェントとして ocf:pacemaker:remote でクラスターリソースとして定義されます。Red Hat Enterprise Linux 7.4 では、pcs cluster node add-remote コマンドを使用して、このリソースを作成してください。7.4 より前のリリースでは、pcs resource create コマンドを使用して、このリソースを作成できます。表9.5「リモートノードのリソースオプション」 では、 remote リソースに設定できるリソースオプションを説明しています。

表9.5 リモートノードのリソースオプション

フィールドデフォルト説明
reconnect_interval
0
リモートノードへのアクティブな接続が切断された後、リモートノードへの再接続を試みる前に待機する時間 (秒単位)。待機期間は繰り返されます。待機期間の後に再接続に失敗した場合、さらなる待機期間の後に再接続を試みます。このオプションが使用されると、Pacemaker は待機期間の後に無限にリモートノードへ接続を試みます。
server
接続するサーバーの場所。IP アドレスまたはホスト名を指定できます。
port
接続する TCP ポート。

9.4.4. ポートのデフォルトの場所の変更

Pacemaker または pacemaker_remote のいずれかのポートのデフォルトの場所を変更する必要がある場合は、これらのデーモンのどちらにも影響を与える PCMK_remote_port を設定できます。この環境変数は、以下のように /etc/sysconfig/pacemaker に配置して有効にできます。
#==#==# Pacemaker Remote
...
#
# Specify a custom port for Pacemaker Remote connections
PCMK_remote_port=3121
特定のゲストノードまたはリモートノードによって使用されるデフォルトのポートを変更する場合、PCMK_remote_port 変数をそのノードの /etc/sysconfig/pacemaker ファイルに設定する必要があります。また、ゲストノードまたはリモートノードの接続を作成するクラスターリソースを同じポート番号で設定する必要もあります (ゲストノードの場合は remote-port メタデータオプション、リモートノードの場合は port オプションを使用します)。

9.4.5. 設定の概要: KVM ゲストノード

本セクションでは、libvirt と KVM 仮想ゲストを使用して、Pacemaker で仮想マシンを起動し、そのマシンをゲストノードとして統合する方法の概要を説明します。
  1. 「リソースとしての仮想ドメインの設定」 で説明したように、VirtualDomain リソーを設定します。
  2. Red Hat Enterprise Linux 7.3 以前を使用しているシステムでは、以下の手順に従って、すべてのクラスターノードと仮想マシン上で、パス /etc/pacemaker/authkey で同じ暗号化キーを配置します。これにより、リモート通信や認証を保護することができます。
    1. 以下の一連のコマンドをすべてのノードで実行し、安全なパーミッションの authkey ディレクトリを作成します。
      # mkdir -p --mode=0750 /etc/pacemaker
      # chgrp haclient /etc/pacemaker
    2. 以下のコマンドは、暗号化キーを作成する方法の 1 つを示しています。キーは 1 度だけ作成し、すべてのノードにコピーする必要があります。
      # dd if=/dev/urandom of=/etc/pacemaker/authkey bs=4096 count=1
  3. Red Hat Enterprise Linux 7.4 では、すべての仮想マシンで以下のコマンドを実行し、 pacemaker_remote パッケージをインストールし、pcsd サービスを起動し、これを起動時に実行できるようにし、ファイアウォールを介して TCP のポート 3121 を許可します。
    # yum install pacemaker-remote resource-agents pcs
    # systemctl start pcsd.service
    # systemctl enable pcsd.service
    # firewall-cmd --add-port 3121/tcp --permanent
    # firewall-cmd --add-port 2224/tcp --permanent
    # firewall-cmd --reload
    Red Hat Enterprise Linux 7.3 以前では、すべての仮想マシンで以下のコマンドを実行し、 pacemaker_remote パッケージをインストールして、pacemaker_remote サービスを起動し、これを起動時に実行できるようにして、ファイアウォールを介して TCP のポート 3121 を許可します。
    # yum install pacemaker-remote resource-agents pcs
    # systemctl start pacemaker_remote.service
    # systemctl enable pacemaker_remote.service
    # firewall-cmd --add-port 3121/tcp --permanent
    # firewall-cmd --add-port 2224/tcp --permanent
    # firewall-cmd --reload
  4. すべてのノードが認識できる静的ネットワークアドレスと一意なホスト名を各仮想マシンに割り当てます。ゲスト仮想マシンに静的 IP アドレスを設定する方法については、『仮想化の導入および管理ガイド』を参照してください。
  5. Red Hat Enterprise Linux 7.4 以降では、以下のコマンドを使用して、既存の VirtualDomain リソースをゲストノードに変換します。このコマンドは、追加されるゲストノード上で実行せず、クラスターノード上で実行する必要があります。リソースを変換する以外にも、このコマンドは /etc/pacemaker/authkey をゲストノードにコピーし、ゲストノードで pacemaker_remote デーモンを起動し、これを有効にします。
    pcs cluster node add-guest hostname resource_id [options]
    Red Hat Linux 7.3 以前では、以下のコマンドを使用して既存の VirtualDomain リソースをゲストノードに変換します。このコマンドは、追加されているゲストノード上ではなく、クラスターノードで実行する必要があります。
    pcs cluster remote-node add hostname resource_id [options]
  6. VirtualDomain リソースの作成後、ゲストノードをクラスターの他のノードと同じように扱うことができます。たとえば、以下のコマンドをクラスターノードから実行すると、作成したリソースに対してリソース制約が作成され、ゲストノードで実行されるようになります。Red Hat Enterprise Linux 7.3 時点では、ゲストノードをグループで含むことができ、ストレージデバイス、ファイルシステム、および VM をグループ化できます。
    # pcs resource create webserver apache configfile=/etc/httpd/conf/httpd.conf op monitor interval=30s
    # pcs constraint location webserver prefers guest1

9.4.6. 設定概要: リモートノード (Red Hat Enterprise Linux 7.4)

本セクションでは、Red Hat Enterprise 7.4 において Pacemaker リモートノードを設定し、そのノードを既存の Pacemaker クラスター環境に統合する手順の概要を説明します。
  1. リモートノードを設定するノードで、ローカルファイアウォールを介してクラスター関連のサービスを許可します。
    # firewall-cmd --permanent --add-service=high-availability
    success
    # firewall-cmd --reload
    success

    注記

    iptables を直接使用する場合や、 firewalld 以外のファイアウォールソリューションを使用する場合は、単に TCP ポート 2224 および 3121 を開きます。
  2. リモートノードで pacemaker_remote デーモンをインストールします。
    # yum install -y pacemaker-remote resource-agents pcs
  3. リモートノードで pcsd を開始し、有効にします。
    # systemctl start pcsd.service
    # systemctl enable pcsd.service
  4. 以下のコマンドを使用してリモートノードリソースをクラスターに追加します。このコマンドは、関連するすべての設定ファイルを新規ノードに追加し、ノードを起動し、これを起動時に pacemaker_remote を開始するように設定することもできます。このコマンドはクラスターノードで実行する必要があり、追加するゲストノードで実行することはできません。
    # pcs cluster node add-remote remote1
  5. remote リソースのクラスーへの追加後に、リモートノードをクラスターの他のノードと同じように扱うことができます。たとえば、以下のコマンドをクラスターノードから実行すると、リソースを作成し、そのリソースにリソース制約を配置して、リモートノードで実行できます。
    # pcs resource create webserver apache configfile=/etc/httpd/conf/httpd.conf op monitor interval=30s
    # pcs constraint location webserver prefers remote1

    警告

    リソースグループ、コロケーション制約、または順序制約でノード接続リソースを利用しないでください。
  6. リモートノードのフェンスリソースを設定します。リモートノードは、クラスターノードと同様にフェンスされます。クラスターノードと同様に、リモートノードと使用するフェンスリソースを設定します。リモートノードはフェンスアクションを開始してはならないことに注意してください。他のノードに対してフェンス操作を実行できるのはクラスターノードのみです。

9.4.7. 設定概要: リモートノード (Red Hat Enterprise Linux 7.3 以前)

本セクションでは、Red Hat Enterprise 7.3 以前のシステムにおいて Pacemaker リモートノードを設定し、そのノードを既存の Pacemaker クラスター環境に統合する手順の概要を説明します。
  1. リモートノードを設定するノードで、ローカルファイアウォールを介してクラスター関連のサービスを許可します。
    # firewall-cmd --permanent --add-service=high-availability
    success
    # firewall-cmd --reload
    success

    注記

    iptables を直接使用する場合や、 firewalld 以外のファイアウォールソリューションを使用する場合は、単に TCP ポート 2224 および 3121 を開きます。
  2. リモートノードで pacemaker_remote デーモンをインストールします。
    # yum install -y pacemaker-remote resource-agents pcs
  3. 適切に通信するには、すべてのノード (クラスターノードとリモートノードの両方) に同じ認証キーがインストールされている必要があります。既存ノードにすでにキーがある場合、そのキーを使用してリモートノードにコピーします。それ以外の場合はリモートノードで新しいキーを作成します。
    リモートノードで以下のコマンドを実行し、セキュアなパーミッションを持つ認証キーのディレクトリーを作成します。
    # mkdir -p --mode=0750 /etc/pacemaker
    # chgrp haclient /etc/pacemaker
    以下のコマンドは、リモートノードで暗号化キーを作成する方法の 1 つを示しています。
    # dd if=/dev/urandom of=/etc/pacemaker/authkey bs=4096 count=1
  4. リモートノードで pacemaker_remote デーモンを開始し、有効にします。
    # systemctl enable pacemaker_remote.service
    # systemctl start pacemaker_remote.service
  5. クラスターノードにて、リモートノードの認証キーと同じパスを持つ共有された認証キーの保存場所を作成し、そのディレクトリーにキーをコピーします。この例では、キーが作成されたリモートノードからキーがコピーされます。
    # mkdir -p --mode=0750 /etc/pacemaker
    # chgrp haclient /etc/pacemaker
    # scp remote1:/etc/pacemaker/authkey /etc/pacemaker/authkey
  6. クラスターノードから以下のコマンドを実行し、remote リソースを作成します。この例では、リモートノードは remote1 になります。
    # pcs resource create remote1 ocf:pacemaker:remote
  7. remote リソースの作成後、リモートノードをクラスターの他のノードと同じように扱うことができます。たとえば、以下のコマンドをクラスターノードから実行すると、作成したリソースに対してリソース制約が作成され、リモートノードで実行されるようになります。
    # pcs resource create webserver apache configfile=/etc/httpd/conf/httpd.conf op monitor interval=30s
    # pcs constraint location webserver prefers remote1

    警告

    リソースグループ、コロケーション制約、または順序制約でノード接続リソースを利用しないでください。
  8. リモートノードのフェンスリソースを設定します。リモートノードは、クラスターノードと同様にフェンスされます。クラスターノードと同様に、リモートノードと使用するフェンスリソースを設定します。リモートノードはフェンスアクションを開始してはならないことに注意してください。他のノードに対してフェンス操作を実行できるのはクラスターノードのみです。

9.4.8. システムアップグレードおよび pacemaker_remote

Red Hat Enterprise Linux 7.3 より、アクティブな Pacemaker リモートノードで pacemaker_remote サービスが停止した場合にノードの停止前にクラスターがノードをリソースから正常に移行するようになりました。これにより、クラスターからノードを削除せずに、ソフトウェアのアップグレードやその他の定期的なメンテナンスを実行できるようになりました。pacemaker_remote がシャットダウンするとクラスターは即座に再接続を試みます。リソースのモニタータイムアウトが発生する前に pacemaker_remote が再起動されないと、クラスターは監視操作が失敗したと判断します。
アクティブな Pacemaker リモートノードで pacemaker_remote サービスが停止したときに監視が失敗しないようにするには、以下の手順にしたがって、pacemaker_remote を停止する可能性があるシステム管理を実行する前にノードをクラスターから削除します。

警告

Red Hat Enterprise Linux 7.2 以前のリリースでは、現在クラスターに統合されているノード上で pacemaker_remote が停止するとクラスターはそのノードをフェンスします。yum update のプロセスの一部として自動的に停止した場合、システムが不安定な状態になることがあります (特に pacemaker_remote と同時にカーネルもアップグレードされる場合)。Red Hat Enterprise Linux 7.2 以前のリリースでは、以下の手順にしたがって、pacemaker_remote を停止する可能性があるシステム管理を実行する前にノードをクラスターから除去する必要があります。
  1. ノードからすべてのサービスを除去する pcs resource disable resourcename コマンドを使用して、ノードの接続リソースを停止します。ゲストノードでは VM も停止されるため、VM をクラスターの外部で起動して (virsh などを使用) メンテナンスを実行する必要があります。
  2. 必要なメンテナンスを実行します。
  3. ノードをクラスターに戻す準備ができたら、pcs resource enable でリソース再度有効にします。