HA PEM using the SM architecture with Patroni#
このページでは、リファレンスアーキテクチャSMに従って高可用性HAPEM展開をインストールおよび構成するための詳細な手順を提供します。
この例では、クラスター管理にPatroniを使用し、PEMバックエンドデータベースとしてPostgreSQL 17を、プライマリにトラフィックをルーティングするメカニズムとしてマルチホスト文字列を使用します。私たちのオペレーティングシステムはRHEL 9 x86です。
他のオプションを理解するには、 High availability patterns for PEM deployment を参照してください。以下の例では、次のIPアドレスを使用します。
172.16.161.200-PEMバックエンドプライマリ
172.16.161.201-PEMバックエンドスタンバイ1
172.16.161.202-PEMバックエンドスタンバイ2
172.16.161.211-PEM Webアプリケーション1
172.16.161.212-PEM Webアプリケーション2
172.16.161.213-PEM Webアプリケーション3
172.16.161.111 - etcd-node-1
172.16.161.112 - etcd-node-2
172.16.161.113 - etcd-node-3
etcdを使用した分散コンセンサスストアの設定#
Patroniには分散コンセンサスストアDCSが必要です。 etcdを使用してDCSを設定している場合、この手順をスキップして、既存のDCSを使用できます。ここでは、 HA PEMアプリケーションクラスターとは別に、3つのホストに最小限の3ノードDCSを作成します。
各ノードで
PGDGリポジトリからetcdをインストールする
dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
dnf --enablerepo=pgdg-rhel9-extras install -y etcd
/etc/etcd/etcd.confの内容を次のものに置き換え、<node-ip>およびnode-nameの適切な値を置き換えます。例、172.16.161.111、etcd-node-1。
#[Member]
ETCD_LISTEN_PEER_URLS="http://<node-ip>:2380"
ETCD_LISTEN_CLIENT_URLS="http://localhost:2379,http://<node-ip>:2379"
ETCD_NAME="<node-name>"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://<node-ip>:2380"
ETCD_INITIAL_CLUSTER="etcd-node-1=http://172.16.161.111:2380,etcd-node-2=http://172.16.161.112:2380,etcd-node-3=http://172.16.161.113:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://<node-ip>:2379"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-1"
ETCD_INITIAL_CLUSTER_STATE="new"
ポート
2380および2379がファイアウォールで開いていることを確認します。
firewall-cmd --zone=public --add-port=2380/tcp --permanent
firewall-cmd --zone=public --add-port=2379/tcp --permanent
firewall-cmd --reload
etcdサービスが再起動され有効になっていることを確認します。
systemctl enable etcd
systemctl restart etcd
EDBリポジトリの構成#
すべてのバックエンドおよびWebアプリケーションノードで、EDB Reposを構成します。詳細については、 Getting started with repositories を参照してください。
curl -1sLf https://downloads.enterprisedb.com/<token>/<repo>/setup.rpm.sh | bash
PEMバックエンドの展開#
初期パッケージのインストールとPostgres構成#
特に記載がない限り、すべてのバックエンドノードで次の手順を実行します。
次のパッケージをインストールします。
PostgreSQLサーバーへの接続エラー PEMサーバーのバックエンドデータベース
sslutils PEMサーバーのインストールの前提条件を参照してください
dnf -qy module disable postgresql
dnf -y --allowerasing install postgresql17-server postgresql17-contrib edb-pem sslutils_17 edb-patroni
Postgresデータベースを初期化し、サービスを開始します。
PGSETUP_INITDB_OPTIONS="-E UTF-8" /usr/pgsql-17/bin/postgresql-17-setup initdb
systemctl start postgresql-17
systemctl enable postgresql-17
ファイアウォールでポート
5432を開きます。
firewall-cmd --zone=public --add-port=5432/tcp --permanent
firewall-cmd --reload
プライマリバックエンドノードでPEMを構成する#
PEMデータベースのインストール プライマリバックエンドサーバーのみ を構成します。
プライマリで次の手順を実行します。
パスワードを使用してログインできるスーパーユーザーを作成します。これは、PEMのインストールに使用するユーザーです。また、PEMバックエンドホストで実行されているエージェントのエージェントサーバーバインディングユーザーにもなります。
su - postgres -c "psql -c \"create role pemserver login superuser password your-password-here;\""
オプション3データベースと3つのバックエンドホストすべてのIPを
pemserverユーザーとして指定して、PEM構成スクリプトを実行します。プライマリの外部IPアドレスではなく、ループバックIPアドレスを提供します。 PEM 10.3以降を使用している場合、agent-server-bind hostをループバックIPとして指定します。
/usr/edb/pem/bin/configure-pem-server.sh -t 3 \
-ho 127.0.0.1,172.16.161.201,172.16.161.202 \
-su pemserver \
-asb-host-name 127.0.0.1
さまざまな追加の詳細の入力を求められます。 構成オプションについては、 Configuring the PEM server on Linux を参照してください。
オプションで、インスタンス間でPEM Webアプリケーションのユーザー設定を同期するには、 configure central storage of user preferences 。この段階では、バックエンド構成のみを完了できます。 後でWebアプリケーションを構成します。
構成レコードをスタンバイにコピーする#
ファイル/usr/edb/pem/share/.install-config
をプライマリからすべてのスタンバイにコピーします。これにより、将来的に現在のプライマリノードからPEMをアップグレードできることが保証されます。
プライマリノードでPatroniを設定する#
Patroniユーザーを作成し、構成ファイルを生成する#
Patroniスーパーユーザー、レプリケーション、およびリワインドロールを作成します。スーパーユーザーとして次のSQLを実行します。
-- Patroni superuser
CREATE USER patroni_super WITH SUPERUSER ENCRYPTED PASSWORD your-password-here;
-- Patroni replication user
CREATE USER patroni_rep WITH REPLICATION ENCRYPTED PASSWORD your-password-here;
-- Patroni rewind user, if you intend to enable use_pg_rewind in your Patroni configuration
CREATE USER patroni_rew WITH ENCRYPTED PASSWORD your-password-here;
GRANT EXECUTE ON function pg_catalog.pg_ls_dir(text, boolean, boolean) TO patroni_rew;
GRANT EXECUTE ON function pg_catalog.pg_stat_file(text, boolean) TO patroni_rew;
GRANT EXECUTE ON function pg_catalog.pg_read_binary_file(text) TO patroni_rew;
GRANT EXECUTE ON function pg_catalog.pg_read_binary_file(text, bigint, bigint, boolean) TO patroni_rew;
選択したパスワードを入力します。
現在のインスタンスからPatroni構成ファイルを生成します。ユーザー
postgresが所有していることを確認します。
patroni --generate-config --dsn host=localhost user=patroni_super dbname=postgres /etc/patroni/patroni.yml
chown postgres:postgres /etc/patroni/patroni.yml
生成された構成ファイルを編集します#
生成されたファイルでは
クラスターの名前を
scopeの下に設定し、ノードの一意の名前をnameの下に設定します。etcdクラスターをDCSとして使用するようにPatroniに指示します。以下をトップレベルファイルに追加します。
etcd3:
hosts:
- 172.16.161.111:2379
- 172.16.161.112:2379
- 172.16.161.113:2379
手順1で構成したユーザーの詳細を
postgresql.authenticationの下に追加します。例
authentication:
replication:
username: patroni_rep
password: your-password-here
superuser:
username: patroni_super
password: your-password-here
rewind:
username: patroni_rew
password: your-password-here
postgresql.listenを'*:5432'に変更しますpostgresql.bin_dirを/usr/pgsql-17/binに変更します。この行が存在しない場合は追加します。pg_hba:キー自分自身を含むpostgresql.pg_hbaセクション全体を削除します。保持するルールを作成した場合、次のステップに向けてコピーを取っておくことができます。bootstrap.dcs.postgresqlの下にpg_hbaセクションを作成し、すべてのノードに共通のHBAルールのセットを入力します。次の例は、この例のPEMとPatroniに必要なすべてのアクセスを提供します。
# Allow users of the web interface to connect to pem and postgres databases
- hostssl pem +pem_user 127.0.0.1/32 scram-sha-256
- hostssl postgres +pem_user 127.0.0.1/32 scram-sha-256
- hostssl pem +pem_user 172.16.161.211/32 scram-sha-256
- hostssl postgres +pem_user 172.16.161.211/32 scram-sha-256
- hostssl pem +pem_user 172.16.161.212/32 scram-sha-256
- hostssl postgres +pem_user 172.16.161.212/32 scram-sha-256
- hostssl pem +pem_user 172.16.161.213/32 scram-sha-256
- hostssl postgres +pem_user 172.16.161.213/32 scram-sha-256
# Allow the PEM server agents to register and connect to send data to PEM server
- hostssl pem +pem_agent 127.0.0.1/32 cert
- hostssl pem +pem_admin 172.16.161.200/32 scram-sha-256
- hostssl pem +pem_agent 172.16.161.200/32 cert
- hostssl pem +pem_admin 172.16.161.201/32 scram-sha-256
- hostssl pem +pem_agent 172.16.161.201/32 cert
- hostssl pem +pem_admin 172.16.161.202/32 scram-sha-256
- hostssl pem +pem_agent 172.16.161.202/32 cert
# Allow monitoring agents to connect to PEM
# Specify the subnet you selected during PEM configuration
- hostssl pem +pem_user 0.0.0.0/0 scram-sha-256
- hostssl pem +pem_agent 0.0.0.0/0 cert
# Allow our Patroni users to connect as required
# Superuser only requires local connection
- host all patroni_super 127.0.0.1/32 scram-sha-256
# Replication and rewind users require connection from other Patroni hosts
- hostssl replication patroni_rep 127.0.0.1/32 scram-sha-256
- hostssl all patroni_rew 127.0.0.1/32 scram-sha-256
- hostssl replication patroni_rep 172.16.161.200/32 scram-sha-256
- hostssl all patroni_rew 172.16.161.200/32 scram-sha-256
- hostssl replication patroni_rep 172.16.161.201/32 scram-sha-256
- hostssl all patroni_rew 172.16.161.201/32 scram-sha-256
- hostssl replication patroni_rep 172.16.161.202/32 scram-sha-256
- hostssl all patroni_rew 172.16.161.202/32 scram-sha-256
# This is the default config for this PG package
- local all all peer
- host all all 127.0.0.1/32 scram-sha-256
- host all all ::1/128 scram-sha-256
- local replication all peer
- host replication all 127.0.0.1/32 scram-sha-256
- host replication all ::1/128 scram-sha-256
Postgresサービスを停止して無効にし、Patroniを起動します
systemctl disable --now postgresql-17
systemctl enable --now patroni
スタンバイノードのセットアップ#
各スタンバイノードで
Postgresのサービスを停止して無効にします。
systemctl disable --now postgresql-17
データベースサーバーのデータディレクトリを削除します。
rm -rf /var/lib/pgsql/17/data
/etc/patroni/patroni.ymlにPatroni構成ファイルを作成します。プライマリと同じコンテンツを使用しますが、次の変更を行います。bootstrapセクション全体を削除しますnameを各スタンバイの一意の名前に変更しますrestapiおよびpostgresql.connect_addressの下のIPアドレスを、構成しているスタンバイのアドレスに変更します。
Patroniを起動して有効にします。
systemctl enable --now patroni
スタンバイにエージェントとサーバーを登録する#
各スタンバイで、次の手順を実行します。
PEMエージェントを登録します。 PEMサーバーホストとしてマルチホスト文字列を指定し、アラートと通知の処理を有効にします。プライマリとの一貫性を保つために、ローカルホストのループバックIPアドレス127.0.0.1を提供します。例、スタンバイ1の場合
export PEM_SERVER_PASSWORD=pemserver-password-here
/usr/edb/pem/agent/bin/pemworker --register-agent \
--pem-server 172.16.161.200,127.0.0.1,172.16.161.202 \
--pem-user pemserver \
--pem-port 5432 \
-o alert_threads=1 \
--enable-snmp true \
--enable-webhook true \
--enable-smtp true \
--max-webhook-retries 3
PEMエージェントサービスを有効にして開始します。
systemctl enable --now pemagent
詳細については、 Registering a PEM Agent を参照してください。
PostgresインスタンスをPEMに登録します。 次のコマンドは、データベースへのクライアント接続を作成するときにPEM Webアプリケーションがサーバーの外部IPを使用しますが、PEMエージェントがループバックインターフェイスを使用してローカルに接続することを意味します。
export PEM_SERVER_PASSWORD=pemserver-password-here
export PEM_MONITORED_SERVER_PASSWORD=pemserver-password-here
/usr/edb/pem/agent/bin/pemworker --register-server \
--pem-user pemserver \
--server-addr 172.16.161.201 \
--server-port 5432 \
--server-database postgres \
--server-user pemserver \
--asb-host-name localhost
詳細は Registering a Postgres Server を参照してください
スタンバイをPEMバックエンドとして登録する#
プライマリで次の手順を実行します。
pem
データベースでスーパーユーザーとして次のSQLを実行し、各スタンバイに正しいサーバーとポートを提供します。
SELECT pem.register_pem_server(id) FROM pem.server WHERE server=172.16.161.201 and port=5432;
SELECT pem.register_pem_server(id) FROM pem.server WHERE server=172.16.161.202 and port=5432;
PEM Webアプリケーションの展開#
すべてのWebアプリケーションホストで次の手順を実行します。
PEMパッケージとPostgresクライアントバイナリ用をインストールします。
dnf install edb-pem postgresql17-server
すべてのサーバーのファイアウォールで次のポートを開きます。
PEMサーバーHTTPSの
8443
例
firewall-cmd --zone=public --add-port=8443/tcp --permanent
firewall-cmd --reload
PEM Webアプリケーションを構成します。プライマリとすべてのスタンバイを含むマルチホスト文字列をPEMサーバーアドレスとして提供します。
/usr/edb/pem/bin/configure-pem-server.sh -t 2 -ho 172.16.161.200,172.16.161.201,172.16.161.202
さまざまな追加の詳細の入力を求められます。 構成オプションについては、 Configuring the PEM server on Linux を参照してください。
configure-selinux.shスクリプトを実行して、PEMのSELinuxポリシーを構成します。
USE_NGINX=1 /usr/edb/pem/bin/configure-selinux.sh
これで、前に作成した
pemserverスーパーユーザーを使用して、Webアプリケーションインスタンスにログインできます。インスタンス間でPEM Webアプリケーションのユーザー設定を同期することを選択した場合、 configuring each web application instance to use the backend for user settings によって今すぐセットアップを完了します。
PEM 10.2または10.1を使用している場合、PEM Webアプリケーションにログインし、オブジェクトエクスプローラーでプライマリサーバーを右クリックして、
Properties > PEM Agentに移動します。 Host の値がマルチホスト文字列の場合、localhostまたは127.0.0.1に変更します。