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構成#
特に記載がない限り、すべてのバックエンドノードで次の手順を実行します。
次のパッケージをインストールします。
EDB Postgres Advanced Server PEMサーバーのバックエンドデータベース
sslutils PEMサーバーのインストールの前提条件を参照してください
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
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
ファイアウォールで次のポートを開きます。
EPASの場合は
5444EFMの場合は
7800
例
firewall-cmd --zone=public --add-port=5444/tcp --permanent
firewall-cmd --zone=public --add-port=7800/tcp --permanent
firewall-cmd --reload
プライマリのユーザーとアクセス構成#
プライマリで次の手順を実行します。
パスワードを使用してログインできるスーパーユーザーを作成します。
su - enterprisedb -c psql edb -c create role pemserver login superuser password your-password-here;
次の行を
pg_hba.confファイルに追加して、新しいユーザーが任意のサーバーIPから接続できるようにします。ネットワークに応じてサブネットのサイズを調整できますが、すべてのPEMバックエンドとWebアプリケーションノードを含める必要があります。
hostssl all pemserver 172.16.161.1/24 scram-sha-256
次の行を
pg_hba.confファイルに追加して、他のPEMユーザーがWebアプリケーションを介してPEMバックエンドに接続することを許可します。ネットワークに応じてサブネットのサイズを調整できますが、すべてのPEM Webアプリケーションノードを含める必要があります。
hostssl all +pem_user 172.16.161.1/24 scram-sha-256
Postgresサーバーを再起動します。
systemctl restart edb-as-17
プライマリバックエンドノードでPEMを構成する#
PEMデータベースのインストール プライマリバックエンドサーバーのみ を構成します。
VIPをプライマリに手動で割り当てます。例
/usr/edb/efm-5.0/bin/efm_address add4 eth0 172.16.161.245/32
ホストとしてVIPを指定し、オプション3データベースを指定してPEM構成スクリプトを実行します。
/usr/edb/pem/bin/configure-pem-server.sh -t 3 -ho 172.16.161.245
さまざまな追加の詳細の入力を求められます。 構成オプションについては、 Configuring the PEM server on Linux を参照してください。
オプションで、インスタンス間でPEM Webアプリケーションのユーザー設定を同期するには、 configure central storage of user preferences 。この段階では、バックエンド構成のみを完了できます。 後でWebアプリケーションを構成します。
構成レコードをスタンバイにコピーする#
ファイル/usr/edb/pem/share/.install-config
をプライマリからすべてのスタンバイにコピーします。これにより、将来的に現在のプライマリノードからPEMをアップグレードできることが保証されます。
ストリーミングレプリケーションのプライマリノードを設定する#
レプリケーションロールを作成します。
psql -h 172.16.161.200 -p 5444 -U enterprisedb edb -c “CREATE ROLE repl REPLICATION LOGIN PASSWORD password”;
選択したパスワードを入力します。
postgresql.confファイルで次を構成します。
wal_level = replica
max_wal_senders = 10
wal_keep_size = 500
max_replication_slots = 10
ストリーミングレプリケーションのパラメーターの構成の詳細については、 PostgreSQL documentation を参照してください。
ホストベースの認証
/var/lib/edb/as17/data/pg_hba.confファイルに次のエントリを追加して、レプリケーションユーザーがすべてのスタンバイから接続できるようにします。
hostssl replication repl 172.16.161.201/24 scram-sha-256
EPASサーバーを再起動します。
systemctl restart edb-as-17.service
ストリーミングレプリケーションのスタンバイノードを設定する#
pg_basebackupユーティリティを使用して、スタンバイサーバーにPEMバックエンドデータベースサーバーのレプリカを作成します。
すべてのスタンバイノードでEPASのサービスを停止します。
systemctl stop edb-as-17.service
すべてのスタンバイノードでデータベースサーバーのデータディレクトリを削除します。
su - enterprisedb
rm -rf /var/lib/edb/as17/data/*
すべてのスタンバイノードの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>
ファイルにアクセス許可を設定してアクセスを制限します
chmod 600 ~/.pgpass
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\
"
各スタンバイノードでEPASデータベースサーバーを起動します。
systemctl start edb-as-17
スタンバイにエージェントとサーバーを登録する#
各スタンバイで、次の手順を実行します。
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 を参照してください。
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 を参照してください
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をセットアップするには、次の手順を実行します。
プライマリで、データベースユーザー
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;
この変更はスタンバイに複製されます。
すべてのノードで、
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
すべてのデータベースサーバーの構成をリロードします。
SELECT pg_reload_conf();
すべてのノードで、サンプルファイル
/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
スタンバイノードで、プライマリノードのIPアドレスとEFMポートを
/etc/edb/efm-5.0/efm.nodesファイルに追加します。すべてのノードで、サンプルファイル
/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
任意のノードで、
efmユーティリティを使用してefmデータベースユーザーのパスワード上記の手順1で定義を暗号化し、次のステップの出力をメモします。
export EFMPASS=password
/usr/edb/efm-5.0/bin/efm encrypt efm --from-env
すべてのノードで、
efm.propertiesファイルの次のパラメーターを編集します。<encrypted-password>を前のステップの出力に置き換えます。<ip-addr>は、各ノードのIPアドレスに置き換えます。
注釈
ホストがインターネットに接続していない場合は、 ping.server の値を、pingに応答するネットワーク上でアクセス可能な信頼できるサーバーのアドレスに置き換えます。
- EFM構成の詳細については、 the documentation を参照してください。 .. ::
edb_notranlate_29
監視ノードで、
is.witness構成パラメーターの値をtrueに設定します。
is.witness=true
プライマリノードで、EFMサービスを有効にして開始します。
systemctl enable edb-efm-5.0
systemctl start edb-efm-5.0
プライマリノードで、スタンバイがクラスターに参加することを許可します。
/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
スタンバイノードとEFM監視ノードでEFMサービスを有効にして開始します。
systemctl enable edb-efm-5.0
systemctl start edb-efm-5.0
任意のノードで次のコマンドを実行して、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アプリケーションホストで次の手順を実行します。
PEMパッケージをインストールします。
dnf install edb-pem
すべてのサーバーのファイアウォールで次のポートを開きます。
PEMサーバーHTTPSの
8443
例
firewall-cmd --zone=public --add-port=8443/tcp --permanent
firewall-cmd --reload
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 を参照してください。
configure-selinux.shスクリプトを実行して、PEMのSELinuxポリシーを構成します。
USE_NGINX=1 /usr/edb/pem/bin/configure-selinux.sh
インスタンス間でPEM Webアプリケーションのユーザー設定を同期することを選択した場合、 configuring each web application instance to use the backend for user settings によって今すぐセットアップを完了します。