Using Failover Manager for high availability#
注釈
このドキュメントでは、既存のインストールではなく新規インストールでPEMサーバーのフェールオーバーマネージャーを設定する手順を説明します。
Postgres Enterprise ManagerPEMは、データベース管理者、システムアーキテクト、およびパフォーマンスアナリストがPostgresデータベースサーバーを管理、監視、および調整するのに役立ちます。
Failover Managerは、EDBの高可用性ツールで、プライマリでソフトウェアまたはハードウェアに障害が発生しているときにPostgresプライマリノードをスタンバイノードにフェールオーバーできます。以下のセクションの例では、次のIPアドレスを使用します。
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.245-PEM VIPエージェントとユーザーが接続するために使用します
以下はVIPアドレスを使用する必要があります。
監視対象データベースサーバーのPEMエージェントバインディング
PEM Webクライアントへのアクセス
ウェブサーバーサービスへのアクセス
製品の初期インストールと構成#
プライマリと1つ以上のスタンバイに以下をインストールします。
EDB Postgres Advanced ServerインスタンスサービスIDの設定 PEMサーバーのバックエンドデータベース
EDB Failover Manager 4.1
- これらのリンクを使用して製品ドキュメントのインストール手順を参照するか、
EDB repos website の手順を参照してください。
EDBリポジトリにアクセスする手順の USERNAME:PASSWORD
を自分のユーザー名とパスワードに置き換えます。
PEMサーバー構成スクリプトは信頼できる認証では機能しないため、データベースサーバーがscram-sha-256認証方法を使用するように構成されていることを確認します。
EFMをインストールするには、java-1.8.0-openjdk
パッケージをインストールする必要があります。
プライマリサーバーとすべてのスタンバイサーバーで、タイプ1 Webサービスとデータベースの初期構成を使用してPEMサーバーを構成します。
- edb_notranlate_0 構成タイプの詳細については、
Configuring the PEM server on Linux を参照してください。
プライマリサーバーとすべてのスタンバイサーバーのファイアウォールに次のポートを追加して、アクセスを許可します。
8443for PEM Server https)5444EPAS 13の場合7800EFMEFM Adminの場合
7908
例
$ sudo firewall-cmd --zone=public --add-port=5444/tcp --permanent
success
$ sudo firewall-cmd --zone=public --add-port=8443/tcp --permanent
success
$ sudo firewall-cmd --zone=public --add-port=7800/tcp --permanent
success
$ sudo firewall-cmd --zone=public --add-port=7809/tcp --permanent
success
$ sudo firewall-cmd --reload
success
ストリーミングレプリケーションのプライマリノードを設定する#
レプリケーションロールを作成します。
$ /usr/edb/as13/bin/psql -h 172.16.161.200 -p 5444 -U enterprisedb edb -c “CREATE ROLE repl REPLICATION LOGIN PASSWORD password”;
CREATE ROLE
選択したパスワードを入力します。
postgresql.confファイルで次を構成します。
wal_level = replica
max_wal_senders = 10
wal_keep_size = 500
max_replication_slots = 10
- ストリーミングレプリケーションのパラメーターの構成の詳細については、
PostgreSQL documentation を参照してください。
注釈
構成パラメーターは、データベースサーバーのバージョンが異なると異なる場合があります。これらのパラメーターの設定についてのヘルプが必要な場合は、EDBサポート techsupport@enterprisedb.com に電子メールを送信できます。
ホストベースの認証
/var/lib/edb/as13/data/pg_hba.confファイルに次のエントリを追加して、レプリケーションユーザーがすべてのスタンバイから接続できるようにします。
hostssl replication repl 172.16.161.201/24 scram-sha-256
注釈
必要に応じて、IPアドレスのcidrレンジを変更できます。
pem_userロールのホストベースの認証
/var/lib/edb/as13/data/pg_hba.confファイルを変更して、scram-sha-256認証方法を使用してすべてのデータベースに接続します。
# Allow local PEM agents and admins to connect to PEM server
hostssl all +pem_user 172.16.161.201/24 scram-sha-256
hostssl pem +pem_user 127.0.0.1/32 scram-sha-256
hostssl pem +pem_agent 127.0.0.1/32 cert
# Allow remote PEM agents and users to connect to PEM server
hostssl pem +pem_user 0.0.0.0/0 scram-sha-256
hostssl pem +pem_agent 0.0.0.0/0 cert
EPAS 13サーバーを再起動します。
systemctl restart edb-as-13.service
ストリーミングレプリケーションのスタンバイノードを設定する#
すべてのスタンバイノードでEPAS 13のサービスを停止します。
$ systemctl stop edb-as-13.service
注釈
この例では、 pg_basebackupユーティリティを使用して、スタンバイサーバーにPEMバックエンドデータベースサーバーのレプリカを作成します。 pg_basebackupを使用する場合、既存のデータベースサーバーを停止し、既存のデータディレクトリを削除する必要があります。
すべてのスタンバイノードでデータベースサーバーのデータディレクトリを削除します。
$ sudo su - enterprisedb
$ rm -rf /var/lib/edb/as13/data/*
すべてのスタンバイノードのenterprisedbユーザーのホームディレクトリに
.pgpassファイルを作成します。
$ sudo su - enterprisedb
$ cat > ~/.pgpass << _EOF_
172.16.161.200:5444:replication:repl:CHANGE_ME
172.16.161.201:5444:replication:repl:CHANGE_ME
172.16.161.202:5444:replication:repl:CHANGE_ME
_EOF_
$ chmod 600 ~/.pgpass
pg_basebackupを使用して、各スタンバイノードでプライマリノードのバックアップを取得します。
$ sudo su - enterprisedb /usr/edb/as13/bin/pg_basebackup -h 172.16.161.200 \
-D /var/lib/edb/as13/data -U repl -v -P -Fp -R -p 5444
backup コマンドは、スタンバイノードにpostgresql.auto.conf
およびstandby.signal ファイルを作成します。
postgresql.auto.conf ファイルには次のコンテンツが含まれています。
sudo su - enterprisedb cat /var/lib/edb/as13/data/postgresql.auto.conf
# Do not edit this file manually
# It will be overwritten by the ALTER SYSTEM command.
primary_conninfo = ‘user=repl passfile=’’/var/lib/edb/.pgpass’’ channel_binding=prefer host=172.16.161.200 port=5444 sslmode=prefer sslcompression=0 ssl_min_protocol_version=TLSv1.2 gssencmode=prefer krbsvrname=postgres target_session_attrs=any’
各スタンバイノードの
postgresql.confファイルで、次のパラメーターを編集します。
hot_standby = on
各スタンバイノードでEPAS 13データベースサーバーを起動します。
$ systemctl enable edb-as-13
$ systemctl start edb-as-13
次のファイルをプライマリノードからスタンバイノードの同じ場所にコピーし、既存のファイルを上書きします。ファイルのアクセス許可を設定します。
/etc/httpd/conf.d/edb-pem.conf/etc/httpd/conf.d/edb-ssl-pem.conf/root/.pem/agent1.crt/root/.pem/agent1.key/usr/edb/pem/agent/etc/agent.cfg/usr/edb/pem/share/.install-config/usr/edb/pem/web/pem.wsgi/usr/edb/pem/web/config_setup.py
例
$ mkdir -p /root/.pem
$ chown root:root /root/.pem
$ chmod 0755 /root/.pem
$ mkdir -p /var/lib/pemhome/.pem
$ chown pem:pem /var/lib/pemhome/.pem
$ chmod 0700 /var/lib/pemhome/.pem
$ mkdir -p /usr/edb/pem/logs
$ chown root:root /usr/edb/pem/logs
$ chmod 0755 /usr/edb/pem/logs
$ for file in /etc/httpd/conf.d/edb-pem.conf \
/etc/httpd/conf.d/edb-ssl-pem.conf \
/root/.pem/agent1.crt \
/usr/edb/pem/agent/etc/agent.cfg \
/usr/edb/pem/share/.install-config \
/usr/edb/pem/web/pem.wsgi \
/usr/edb/pem/web/config_setup.py; do \
chown root:root ${file}; \
chmod 0644 ${file}; \
done;
$ chmod 0600 /root/.pem/agent1.key
$ chown root:root /root/.pem/agent1.key
このコードは、ウェブサーバーがスタンバイで構成され、デフォルトで無効になっていることを確認します。 EFMによるスイッチオーバーにより、Webサーバーが有効になります。
注釈
証明書が更新されるたびに、マスターとスタンバイで証明書の同期を手動で維持します。
configure-selinux.shスクリプトを実行して、PEMのSELinuxポリシーを構成します。
$ /usr/edb/pem/bin/configure-selinux.sh
getenforce found, now executing getenforce command
Configure the httpd to work with the SELinux
Allow the httpd to connect the database (httpd_can_network_connect_db = on)
Allow the httpd to connect the network (httpd_can_network_connect = on)
Allow the httpd to work with cgi (httpd_enable_cgi = on)
Allow to read & write permission on the pem user home directory
SELinux policy is configured for PEM
$ sudo chmod 640 /root/.pem/agent1.crt
HTTPDおよびPEMエージェントサービスがすべてのレプリカノードで実行されている場合、無効にして停止します。
systemctl stop pemagent
systemctl stop httpd
systemctl disable pemagent
systemctl disable httpd
注釈
この時点で、PEMプライマリサーバーと2つのスタンバイは、必要に応じてプライマリから引き継ぐ準備が整います。
すべてのホストでフェールオーバーを管理するようにEFMを設定する#
EFMをサポートするようにプライマリノードを準備する
データベースサーバーに接続するデータベースユーザーefmを作成します。
WALログに関連する機能の実行特権とモニタリング特権をユーザーに付与します。
pg_hba.confにエントリを追加して許可しますすべてのホストのすべてのノードからデータベースサーバーに接続するefmデータベースユーザー。すべてのデータベースサーバーの構成をリロードします。例
$ cat > /tmp/efm-role.sql << _EOF_
-- Create a role for EFM
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;
_EOF_
$ /usr/edb/as13/bin/psql -h 172.16.161.200 -p 5444 -U enterprisedb edb -f /tmp/efm-role.sql
CREATE ROLE
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT ROLE
$ rm -f /tmp/efm-role.sql
$ cat > /var/lib/edb/as13/data/pg_hba.conf <<< _EOF_
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
_EOF_
$ /usr/edb/as13/bin/psql -h 172.16.161.200 -p 5444 -U enterprisedb edb -c “SELECT pg_reload_conf();”
各ノードでスクリプトを作成して、PEMエージェントを起動/停止します。
$ sudo cat > /usr/local/bin/start-httpd-pemagent.sh << _EOF_
#!/bin/sh
/bin/sudo /bin/systemctl enable httpd
/bin/sudo /bin/systemctl start httpd
/bin/sudo /bin/systemctl enable pemagent
/bin/sudo /bin/systemctl start pemagent
_EOF_
$ sudo cat > /usr/local/bin/stop-httpd-pemagent.sh << _EOF_
#!/bin/sh
/bin/sudo /bin/systemctl stop pemagent
/bin/sudo /bin/systemctl disable pemagent
/bin/sudo /bin/systemctl stop httpd
/bin/sudo /bin/systemctl disable httpd
_EOF_
$ sudo chmod 770 /usr/local/bin/start-pemagent.sh
$ sudo chmod 770 /usr/local/bin/stop-pemagent.sh
各ノードで
sudoersファイル/etc/sudoers.d/efm-pemを作成して、efmユーザーがpemagentを起動/停止できるようにします。
$ sudo cat > /etc/sudoers.d/efm-pem << _EOF_
efm ALL=(ALL) NOPASSWD: /bin/systemctl enable pemagent
efm ALL=(ALL) NOPASSWD: /bin/systemctl disable pemagent
efm ALL=(ALL) NOPASSWD: /bin/systemctl stop pemagent
efm ALL=(ALL) NOPASSWD: /bin/systemctl start pemagent
efm ALL=(ALL) NOPASSWD: /bin/systemctl status pemagent
_EOF_
サンプルファイル
/etc/edb/efm-4.1/efm.nodes.inを使用してすべてのノードでefm.nodesファイルを作成し、efm OSユーザーに読み取り/書き込みアクセスを付与します。
$ sudo cp /etc/edb/efm-4.1/efm.nodes.in /etc/edb/efm-4.1/efm.nodes
$ sudo chown efm:efm /etc/edb/efm-4.1/efm.nodes
$ sudo chmod 600 /etc/edb/efm-4.1/efm.nodes
スタンバイノードの
/etc/edb/efm-4.1/efm.nodesファイルに、プライマリノードのIPアドレスとefmポートを追加します。
$ sudo cat > /etc/edb/efm-4.1/efm.nodes <<< _EOF_
172.16.161.200:7800
_EOF_
サンプルファイル
/etc/edb/efm-4.1/efm.properties.inを使用して、すべてのノードでefm.propertiesファイルを作成します。すべてのユーザーに読み取りアクセスを付与します。
$ sudo cp /etc/edb/efm-4.1/efm.properties.in /etc/edb/efm-4.1/efm.properties
$ sudo chown efm:efm /etc/edb/efm-4.1/efm.properties
$ sudo chmod a+r /etc/edb/efm-4.1/efm.properties
efmユーティリティを使用してefmユーザーのパスワードを暗号化します。
$ export EFMPASS=password
$ /usr/edb/efm-4.1/bin/efm encrypt efm --from-env
096666746b05b081d1a98e43d94c9dad
プロパティファイルの次のパラメーターを編集します。
db.user=efm
db.password.encrypted=096666746b05b081d1a98e43d94c9dad
db.port=5444
db.database=edb
db.service.owner=enterprisedb
db.service.name=edb-as-13
db.bin=/usr/edb/as13/bin
db.data.dir=/var/lib/edb/as13/data
jdbc.sslmode=require
user.email=username@example.com
from.email=node1@efm-pem
notification.level=INFO
notification.text.prefix=[PEM/EFM]
bind.address=172.16.161.200:7800
admin.port=7809
is.witness=false
local.period=10
local.timeout=60
local.timeout.final=10
remote.timeout=10
node.timeout=50
encrypt.agent.messages=true
stop.isolated.primary=true
stop.failed.primary=true
primary.shutdown.as.failure=false
update.physical.slots.period=0
ping.server.ip=8.8.8.8
ping.server.command=/bin/ping -q -c3 -w5
auto.allow.hosts=false
stable.nodes.file=false
db.reuse.connection.count=0
auto.failover=true
auto.reconfigure=true
promotable=true
use.replay.tiebreaker=true
standby.restart.delay=0
reconfigure.num.sync=false
reconfigure.sync.primary=false
minimum.standbys=0
recovery.check.period=1
restart.connection.timeout=60
auto.resume.period=0
virtual.ip=172.16.161.245
virtual.ip.interface=ens33
virtual.ip.prefix=24
virtual.ip.single=true
check.vip.before.promotion=true
pgpool.enable=false
sudo.command=sudo
sudo.user.command=sudo -u %u
syslog.host=localhost
syslog.port=514
syslog.protocol=UDP
syslog.facility=LOCAL1
file.log.enabled=true
syslog.enabled=false
jgroups.loglevel=INFO
efm.loglevel=INFO
jvm.options=-Xmx128m
script.remote.post.promotion=/usr/local/bin/stop-pemagent.sh
script.post.promotion=/usr/local/bin/start-pemagent.sh
監視ノードの
is.witness構成パラメーターの値をtrueに設定します。
is.witness=true
プライマリノードでEFMサービスを有効にして開始します。
$ systemctl enable edb-efm-4.1
$ systemctl start edb-efm-4.1
スタンバイがプライマリノードで起動されたクラスターに参加できるようにします。
/usr/edb/efm-4.1/bin/efm allow-node efm 172.16.161.201
/usr/edb/efm-4.1/bin/efm allow-node efm 172.16.161.202
/usr/edb/efm-4.1/bin/efm allow-node efm 172.16.161.203
スタンバイノードとEFM監視ノードでEFMサービスを有効にして開始します。
$ systemctl enable edb-efm-4.1
$ systemctl start edb-efm-4.1
任意のノードからEFMクラスターのステータスを確認します。
$ sudo /usr/edb/efm-4.1/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エージェントが新しいプライマリノードに接続します。この手順を使用して、障害が発生したプライマリノードを新しいスタンバイに置き換えることができます。
現在の制限#
現在の制限には次のものが含まれます。
ユーザーのWebコンソールセッションは、スイッチオーバー中に失われます。
[設定]ダイアログボックスから設定したユーザーごとの設定は、ファイルシステム上のローカル構成ファイルに保存されているため、失われます。
バックグラウンドプロセス、バックアップ、リストア、およびメンテナンスダイアログボックスによって開始され、そのログはシステム間で共有されません。これらは、スイッチオーバー中に失われます。