HA PEM using the S1 architecture with EFM and a Virtual IP#

このページでは、リファレンスアーキテクチャS1に従って高可用性HAPEM展開をインストールおよび構成するための詳細な手順を提供します。

この例では、クラスター管理にEDB Failover ManagerEFM 5.0を使用し、PEMバックエンドデータベースとしてEDB Postgres Advanced Server 17を使用し、RHELのようなシステムでプライマリにトラフィックをルーティングするためのメカニズムとして仮想IPVIPを使用します。

他のオプションを理解するには、 High Availability Patterns for PEM Deployment を参照してください。

  • 172.16.161.200-PEMバックエンドプライマリ

  • 172.16.161.201-PEMバックエンドスタンバイ1

  • 172.16.161.202-PEMバックエンドスタンバイ2

  • 172.16.161.203 - EFMバックエンドWitnessノード

  • 172.16.161.211-PEM Webアプリケーション1

  • 172.16.161.212-PEM Webアプリケーション2

  • 172.16.161.213-PEM Webアプリケーション3

  • 172.16.161.245-PEM VIPエージェントとユーザーが接続するために使用します

PEMバックエンドの展開#

初期パッケージのインストールとPostgres構成#

特に記載がない限り、すべてのバックエンドノードで次の手順を実行します。

  1. 次のパッケージをインストールします。

dnf -qy module disable postgresql
dnf -y install epel-release
dnf config-manager --set-enabled crb
dnf -y install edb-as17-server edb-pem edb-as17-server-sslutils edb-efm50
  1. Postgresデータベースを初期化し、サービスを開始します。

PGSETUP_INITDB_OPTIONS="-E UTF-8" /usr/edb/as17/bin/edb-as-17-setup initdb
systemctl start edb-as-17
systemctl enable edb-as-17
  1. ファイアウォールで次のポートを開きます。

    • EPASの場合は5444

    • EFMの場合は7800

例

firewall-cmd --zone=public --add-port=5444/tcp --permanent
firewall-cmd --zone=public --add-port=7800/tcp --permanent
firewall-cmd --reload

プライマリのユーザーとアクセス構成#

プライマリで次の手順を実行します。

  1. パスワードを使用してログインできるスーパーユーザーを作成します。

su - enterprisedb -c psql edb -c create role pemserver login superuser password your-password-here;
  1. 次の行をpg_hba.conf ファイルに追加して、新しいユーザーが任意のサーバーIPから接続できるようにします。ネットワークに応じてサブネットのサイズを調整できますが、すべてのPEMバックエンドとWebアプリケーションノードを含める必要があります。

hostssl  all  pemserver  172.16.161.1/24  scram-sha-256
  1. 次の行をpg_hba.conf ファイルに追加して、他のPEMユーザーがWebアプリケーションを介してPEMバックエンドに接続することを許可します。ネットワークに応じてサブネットのサイズを調整できますが、すべてのPEM Webアプリケーションノードを含める必要があります。

hostssl all    +pem_user   172.16.161.1/24  scram-sha-256
  1. Postgresサーバーを再起動します。

systemctl restart edb-as-17

プライマリバックエンドノードでPEMを構成する#

PEMデータベースのインストール プライマリバックエンドサーバーのみ を構成します。

  1. VIPをプライマリに手動で割り当てます。例

/usr/edb/efm-5.0/bin/efm_address add4 eth0 172.16.161.245/32
  1. ホストとしてVIPを指定し、オプション3データベースを指定してPEM構成スクリプトを実行します。

/usr/edb/pem/bin/configure-pem-server.sh -t 3 -ho 172.16.161.245

さまざまな追加の詳細の入力を求められます。 構成オプションについては、 Configuring the PEM server on Linux を参照してください。

  1. オプションで、インスタンス間でPEM Webアプリケーションのユーザー設定を同期するには、 configure central storage of user preferences 。この段階では、バックエンド構成のみを完了できます。 後でWebアプリケーションを構成します。

構成レコードをスタンバイにコピーする#

ファイル/usr/edb/pem/share/.install-config をプライマリからすべてのスタンバイにコピーします。これにより、将来的に現在のプライマリノードからPEMをアップグレードできることが保証されます。

ストリーミングレプリケーションのプライマリノードを設定する#

  1. レプリケーションロールを作成します。

psql -h 172.16.161.200 -p 5444 -U enterprisedb edb -c “CREATE ROLE repl REPLICATION LOGIN PASSWORD password”;

選択したパスワードを入力します。

  1. postgresql.conf ファイルで次を構成します。

wal_level = replica
max_wal_senders = 10
wal_keep_size = 500
max_replication_slots = 10

ストリーミングレプリケーションのパラメーターの構成の詳細については、 PostgreSQL documentation を参照してください。

  1. ホストベースの認証/var/lib/edb/as17/data/pg_hba.conf ファイルに次のエントリを追加して、レプリケーションユーザーがすべてのスタンバイから接続できるようにします。

hostssl  replication  repl  172.16.161.201/24  scram-sha-256
  1. EPASサーバーを再起動します。

systemctl restart edb-as-17.service

ストリーミングレプリケーションのスタンバイノードを設定する#

pg_basebackupユーティリティを使用して、スタンバイサーバーにPEMバックエンドデータベースサーバーのレプリカを作成します。

  1. すべてのスタンバイノードでEPASのサービスを停止します。

systemctl stop edb-as-17.service
  1. すべてのスタンバイノードでデータベースサーバーのデータディレクトリを削除します。

su - enterprisedb

rm -rf /var/lib/edb/as17/data/*
  1. すべてのスタンバイノードのenterprisedbユーザーのホームディレクトリに.pgpass ファイルを作成し、次のコンテンツを追加します。 <password> は、前に作成したレプリケーションユーザーのパスワードに置き換えます。

172.16.161.200:5444:replication:repl:<password>
172.16.161.201:5444:replication:repl:<password>
172.16.161.202:5444:replication:repl:<password>
  1. ファイルにアクセス許可を設定してアクセスを制限します

chmod 600 ~/.pgpass
  1. pg_basebackupを使用して、各スタンバイノードでプライマリノードのバックアップを取得します。

su - enterprisedb -c "\
    /usr/edb/as17/bin/pg_basebackup \
    -h 172.31.6.186 \
    -D /var/lib/edb/as17/data \
    -U repl \
    -v -P -Fp -R -p 5444\
    "
  1. 各スタンバイノードでEPASデータベースサーバーを起動します。

systemctl start edb-as-17

スタンバイにエージェントとサーバーを登録する#

各スタンバイで、次の手順を実行します。

  1. PEMエージェントを登録します。 VIPをPEMサーバーホストとして指定し、アラートと通知の処理を有効にします。例

export PEM_SERVER_PASSWORD=password
/usr/edb/pem/agent/bin/pemworker --register-agent \
                                 --pem-server 172.17.0.12 \
                                 --pem-user pemserver \
                                 --pem-port 5444 \
                                 -o alert_threads=1 \
                                 --enable-snmp true \
                                 --enable-webhook true \
                                 --enable-smtp true \
                                 --max-webhook-retries 3

PEMエージェントサービスを有効にして開始します。

systemctl enable --now pem-agent

詳細については、 Registering a PEM Agent を参照してください。

  1. PostgresインスタンスをPEMに登録します。 次のコマンドは、データベースへのクライアント接続を作成するときにPEM Webアプリケーションがサーバーの外部IPを使用しますが、PEMエージェントがループバックインターフェイスを使用してローカルに接続することを意味します。

export PEM_SERVER_PASSWORD=password
/usr/edb/pem/agent/bin/pemworker --register-server \
                                 --pem-user pemserver \
                                 --server-addr 172.16.161.201 \
                                 --server-port 5444 \
                                 --server-database edb \
                                 --server-user pemserver \
                                 --server-service-name edb-as-17 \
                                 --asb-host-name localhost

詳細は Registering a Postgres Server を参照してください

  1. pem データベースでスーパーユーザーとして次のSQLを実行し、それぞれに正しいサーバーとポートを提供します。

SELECT pem.register_pem_server(server_id) FROM pem.server WHERE server=172.16.161.201 and port=5444;

注釈

PEMの古いバージョンでは、PEMサーバーとそのローカルエージェントにID 1が必要でした。これはPEM 10.1からは当てはまりません。代わりに、このSQLは、このサーバーとエージェントにPEM展開に属しているとしてフラグを立てます。これにより、このサーバーがプライマリの場合、有効期限が切れたデータのパージなどの重要なシステムジョブが有効になります。 !!!

フェールオーバーを管理するようにEFMを設定する#

EFMをセットアップするには、次の手順を実行します。

  1. プライマリで、データベースユーザー efm を作成して、データベースサーバーに接続します。ユーザーにWALログ関連機能の実行権限とモニタリング権限を付与します。スーパーユーザーとして

CREATE ROLE efm LOGIN PASSWORD password;

-- Give privilege to efm user to connect to a database
GRANT CONNECT ON DATABASE edb TO efm;

-- Give privilege to efm user to do backup operations
GRANT EXECUTE ON FUNCTION pg_current_wal_lsn() TO efm;
GRANT EXECUTE ON FUNCTION pg_last_wal_replay_lsn() TO efm;
GRANT EXECUTE ON FUNCTION pg_wal_replay_resume() TO efm;
GRANT EXECUTE ON FUNCTION pg_wal_replay_pause() TO efm;
GRANT EXECUTE ON FUNCTION pg_reload_conf() TO efm;

-- Grant monitoring privilege to the efm user
GRANT pg_monitor TO efm;

この変更はスタンバイに複製されます。

  1. すべてのノードで、 pg_hba.conf にエントリを追加して、efm データベースユーザーがすべてのホストのすべてのノードからデータベースサーバーに接続できるようにします。

hostssl      edb     efm     172.16.161.200/32     scram-sha-256
hostssl      edb     efm     172.16.161.201/32     scram-sha-256
hostssl      edb     efm     172.16.161.202/32     scram-sha-256
hostssl      edb     efm     172.16.161.203/32     scram-sha-256
  1. すべてのデータベースサーバーの構成をリロードします。

SELECT pg_reload_conf();
  1. すべてのノードで、サンプルファイル/etc/edb/efm-5.0/efm.nodes.in を使用してefm.nodes ファイルを作成し、EFM OSユーザーに読み取り/書き込みアクセスを付与します。

cp /etc/edb/efm-5.0/efm.nodes.in /etc/edb/efm-5.0/efm.nodes
chown efm:efm /etc/edb/efm-5.0/efm.nodes
chmod 600 /etc/edb/efm-5.0/efm.nodes
  1. スタンバイノードで、プライマリノードのIPアドレスとEFMポートを/etc/edb/efm-5.0/efm.nodes ファイルに追加します。

  2. すべてのノードで、サンプルファイル /etc/edb/efm-5.0/efm.properties.in を使用してefm.properties ファイルを作成します。 すべてのユーザーに読み取りアクセスを付与します。

cp /etc/edb/efm-5.0/efm.properties.in /etc/edb/efm-5.0/efm.properties
chown efm:efm /etc/edb/efm-5.0/efm.properties
chmod a+r /etc/edb/efm-5.0/efm.properties
  1. 任意のノードで、 efm ユーティリティを使用してefm データベースユーザーのパスワード上記の手順1で定義を暗号化し、次のステップの出力をメモします。

export EFMPASS=password
/usr/edb/efm-5.0/bin/efm encrypt efm --from-env
  1. すべてのノードで、efm.properties ファイルの次のパラメーターを編集します。 <encrypted-password> を前のステップの出力に置き換えます。 <ip-addr> は、各ノードのIPアドレスに置き換えます。

注釈

ホストがインターネットに接続していない場合は、 ping.server の値を、pingに応答するネットワーク上でアクセス可能な信頼できるサーバーのアドレスに置き換えます。

EFM構成の詳細については、 the documentation を参照してください。 .. ::

edb_notranlate_29

  1. 監視ノードで、is.witness 構成パラメーターの値をtrue に設定します。

is.witness=true
  1. プライマリノードで、EFMサービスを有効にして開始します。

systemctl enable edb-efm-5.0
systemctl start edb-efm-5.0
  1. プライマリノードで、スタンバイがクラスターに参加することを許可します。

/usr/edb/efm-5.0/bin/efm allow-node  efm  172.16.161.201
/usr/edb/efm-5.0/bin/efm allow-node  efm  172.16.161.202
/usr/edb/efm-5.0/bin/efm allow-node  efm  172.16.161.203
  1. スタンバイノードとEFM監視ノードでEFMサービスを有効にして開始します。

systemctl enable edb-efm-5.0
systemctl start edb-efm-5.0
  1. 任意のノードで次のコマンドを実行して、EFMクラスターのステータスを確認します。

/usr/edb/efm-5.0/bin/efm cluster-status efm

出力は次のようになります。

Cluster Status: efm
    Agent Type  Address              DB       VIP
    ----------------------------------------------------------------
    Primary     172.16.161.200      UP       172.16.161.245*
    Standby     172.16.161.201      UP       172.16.161.245
    Standby     172.16.161.202      UP       172.16.161.245
    Witness     172.16.161.203      N/A      172.16.161.245

Allowed node host list:
    172.16.161.200 172.16.161.201 172.16.161.202 172.16.161.203

Membership coordinator: 172.16.161.200

Standby priority host list:
    172.16.161.201 172.16.161.202

Promote Status:

    DB Type     Address              WAL Received LSN   WAL Replayed LSN   Info
    ---------------------------------------------------------------------------
    Primary     172.16.161.200                         0/F7A3808
    Standby     172.16.161.201      0/F7A3808          0/F7A3808
    Standby     172.16.161.202      0/F7A3808          0/F7A3808

    Standby database(s) in sync with primary. It is safe to promote.

このステータスは、EFMが正常にセットアップされ、PEMサーバーのフェールオーバーを管理していることを確認します。

フェールオーバーが発生した場合、スタンバイのいずれかがプライマリノードとして昇格し、PEMエージェントが新しいプライマリノードに接続します。上記の手順を使用して、障害が発生したプライマリノードを新しいスタンバイに置き換えることができます。

PEM Webアプリケーションの展開#

すべてのWebアプリケーションホストで次の手順を実行します。

  1. PEMパッケージをインストールします。

dnf install edb-pem
  1. すべてのサーバーのファイアウォールで次のポートを開きます。

  • PEMサーバーHTTPSの8443

例

firewall-cmd --zone=public --add-port=8443/tcp --permanent
firewall-cmd --reload
  1. PEM Webアプリケーションを構成します。 PEMサーバーアドレスとしてVIPを選択します。

/usr/edb/pem/bin/configure-pem-server.sh -t 2 -ho 172.16.161.245

さまざまな追加の詳細の入力を求められます。 構成オプションについては、 Configuring the PEM server on Linux を参照してください。

  1. configure-selinux.sh スクリプトを実行して、PEMのSELinuxポリシーを構成します。

USE_NGINX=1 /usr/edb/pem/bin/configure-selinux.sh
  1. インスタンス間でPEM Webアプリケーションのユーザー設定を同期することを選択した場合、 configuring each web application instance to use the backend for user settings によって今すぐセットアップを完了します。