8.4. pacemaker_remote サービス

pacemaker_remote サービスを使用するとノードに corosync を実行させることなくクラスターに統合、クラスター側でリソースをクラスターノードのように管理させることができるようになります。これにより、仮想環境で pacemakercorosync を実行することなく、Pacemaker クラスターで仮想環境 (KVM/LXC) およびその仮想環境内に存在するリソース群を管理させることができるようになります。
pacemaker_remote サービスの説明では次のような用語を使用しています。
  • クラスターノード -High Availability サービス (pacemakercorosync) を実行しているノード
  • リモートノードpacemaker_remote を実行しているノード、corosync クラスターメンバーシップを必要とせずクラスターにリモートで統合
  • コンテナー — 追加リソースを含んでいる Pacemaker リソース (例えば webserver リソースを含んでいる KVM 仮想マシンリソースなど)
  • コンテナーリモートノードpacemaker_remote サービスを実行している仮想ゲストのリモートノード、クラスター管理の仮想ゲストリソースがクラスターで起動されリモートノードとしてクラスターに統合されるというようなリモートノード事例を指す場合に使用
  • pacemaker_remote — Pacemaker クラスター環境、スタンドアローン (非クラスター) 環境、いずれの環境下でもゲストノード (KVM and LXC) 内のアプリケーションをリモートで管理できるサービスデーモン (Pacemaker のローカルリソース管理デーモン (LRMD) の拡張バージョンで、ゲスト上にある LSB、OCF、upstart、systemd などのリソースの管理およびモニタリングをリモートで行うことが可能、またリモートノードで pcs を使用することも可)
  • LXClibvirt-lxc Linux コンテナードライバーで定義される Linux Container
pacemaker_remote サービスを実行している Pacemaker クラスターには次のような特徴があります。
  • 仮想リモートノードは pacemaker_remote サービスを実行します (仮想マシン側ではほとんど設定を必要としません)。
  • クラスターノードで実行しているクラスタースタック (pacemakercorosync) は仮想マシンを起動し直ちに pacemaker_remote サービスへ接続、クラスター内に仮想マシンを統合できるようにします。
仮想マシンリモートノードとクラスターノードとの主な違いとは、リモートノードはクラスタースタックを実行していないという点です。つまり、リモートノードは定足数を採用していません。これはリモートノードがクラスタースタックに関連するスケーラビリティの制限には縛られないということにもなります。定足数の制限以外、リモートノードはリソース管理に関してはクラスターノードと同じように動作します。クラスターでは各リモートノード上のリソースを完全に管理、モニタリングすることができます。リモートノードに対して制約を作り、スタンバイモードにしたり、クラスターノードで行うような動作をリモートノードに行わせることもできます。リモートノードはクラスターノード同様クラスターの状態出力に表示されます。

8.4.1. コンテナーリモートノードのリソースオプション

仮想マシンまたは LXC リソースがリモートノードとして動作するよう設定している場合には VirtualDomain リソースを作成して仮想マシンを管理させます。VirtualDomain リソースに設定できるオプションの詳細については次のコマンドで確認してください。
# pcs resource describe VirtualDomain
VirtualDomain リソースオプションの他にもリソースをリモートノードとして有効にして接続パラメーターを定義するメタデータオプションを設定することもできます。表8.3「KVM/LXC リソースをリモートノードとして設定するメタデータオプション」 にメタデータオプションを示します。

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

フィールドデフォルト説明
remote-node
<none>
このリソースで定義するリモートノードの名前、リソースをリモートノードとして有効にしてノードの識別に使用する固有名を定義する (他にパラメーターが設定されていない場合はこの値がポート 3121 で接続するホスト名とみなされる) 警告: この値はいずれのリソース、ノード ID とも重複不可
remote-port
3121
pacemaker_remote へのゲスト接続に使用するカスタムのポートを設定
remote-addr
remote-node value used as hostname
リモートノード名がゲストのホスト名ではない場合に接続する IP アドレスまたはホスト名
remote-connect-timeout
60s
保留中のゲスト接続がタイムアウトするまでの時間
次のコマンドでは vm-guest1 と言う名前の VirtualDomain リソースを作成しています。remote-node メタ属性を使ってリソースを実行することができるリモートノードになります。
# pcs resource create vm-guest1 VirtualDomain hypervisor="qemu:///system" config="vm-guest1.xml" meta remote-node=guest1

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

クラスターノードとリモートノード間の接続の認証および暗号化は TCP ポート 3121 の PSK 暗号化/認証を使った TLS で行われます。つまり、クラスターノードとリモートノードの両方が同じプライベートキーを共有しなければならないということです。デフォルトでは、このキーはクラスターノード、リモートノードいずれも /etc/pacemaker/authkey に配置する必要があります。

8.4.3. デフォルトの pacemaker_remote オプションの変更

デフォルトのポートまたは Pacemaker や pacemaker_remote いずれかの authkey の場所を変更する必要がある場合は、両方のデーモンに反映させることができる環境変数を設定することができます。以下のように /etc/sysconfig/pacemaker ファイルに配置するとこの環境変数を有効にすることができます。
#==#==# Pacemaker Remote
# Use a custom directory for finding the authkey.
PCMK_authkey_location=/etc/pacemaker/authkey
#
# Specify a custom port for Pacemaker Remote connections
PCMK_remote_port=3121

8.4.4. 設定の概要: KVM リモートノード

本セクションでは、libvirt と KVM 仮想ゲストを使って Pacemaker に仮想マシンを起動させてからそのマシンをリモートノードとして統合させる手順についての概要を簡単に説明しています。
  1. 仮想化ソフトウェアのインストールと、クラスターノードでの libvirtd サービスの有効化が完了したら、すべてのクラスターノードと仮想マシンに /etc/pacemaker/authkey のパスで authkey を配置します。これにより安全なリモート通信と認証が行えるようになります。
    次のコマンドで authkey を作成します。
    # dd if=/dev/urandom of=/etc/pacemaker/authkey bs=4096 count=1
  2. pacemaker_remote パッケージのインストール、pacemaker_remote サービスの起動、このサービスの起動時の実行を有効化、ファイアウォールでの TCP ポート 3121 の通信の許可をすべての仮想マシンでそれぞれ行います。
    # yum install pacemaker-remote resource-agents
    # systemctl start pacemaker_remote.service
    # systemctl enable pacemaker_remote.service
    # firewall-cmd --add-port 3121/tcp --permanent
  3. 各仮想マシンに静的ネットワークアドレスと固有のホスト名を与えます。
  4. 仮想マシン管理用の VirtualDomain リソースエージェントを作成するため、Pacemaker にディスク上のファイルにダンプする仮想マシンの XML 設定ファイルが必要になります。例えば、guest1 と言う名前の仮想マシンを作成している場合は、次のコマンドを使ってホスト上のいずれかの場所にあるファイルに XML をダンプします。
    # virsh dumpxml guest1 > /virtual_machines/guest1.xml
  5. VirtualDomain リソースを作成し、remote-note リソースメタオプションを設定して仮想マシンがリソースを実行できるリモートノードであることを示します。
    以下の例では、メタ属性の remote-node=guest1 使って、このリソースが guest1 と言うホスト名でクラスターに統合可能なリモートノードであることを pacemaker に伝えています。仮想マシンが起動すると、クラスターによりホスト名 guest1 で仮想マシンの pacemaker_remote サービスへの通信が試行されます。
    # pcs resource create vm-guest1 VirtualDomain hypervisor="qemu:///system" config="vm-guest1.xml" meta remote-node=guest1
  6. VirtualDomain リソースの作成が完了したら、リモートノードはクラスター内の他のノードと全く同じように扱うことができるようになります。例えば、リソースを作成してリソースの制約をそのリソースに配置しリモートノードで実行させることができます。
    # pcs resource create webserver apache params configfile=/etc/httpd/conf/httpd.conf op monitor interval=30s
    # pcs constraint webserver prefers guest1
    リモートノードがクラスターに統合されたら、リモートノードで Pacemaker を実行しているかのようにリモートノード自体で pcs コマンドを実行できるようになります。