2024
November
01
【PostgreSQL】レプリケーション設定方法
企業の事業継続のためにITシステムのBCP対策を行うことはマストとなりつつあります。
対策の一つとして2つ以上のデータベースを遠隔地に配置し、
リアルタイムでデータを同期するレプリケーションという技術があります。
今回はPostgreSQLでレプリケーション機能について設定方法を紹介します。
前提
レプリケーション設定する上で下記を前提として設定します。
・マスター、スタンバイの2台同期構成
・ホットスタンバイ
・ストリーミングレプリケーション
マスター側
コマンド
<postgresユーザーを作成>
$psql -p <ポート番号> -U postgres
$CREATE ROLE repl_user LOGIN REPLICATION PASSWORD <パスワード>;
pg_hba.conf
<接続情報を追加>
host replication repl_user <マスター側IP>/32 scram-sha-256
host replication repl_user <スタンバイ側IP>/32 scram-sha-256
postgresql.conf
<設定情報を追加>
synchronous_commit = on
wal_level = replica
max_wal_senders = 10
wal_keep_size = 80
wal_sender_timeout = 60s
synchronous_standby_names = 'node01'
スタンバイ側
コマンド
<マスター側と同期する>
# systemctl stop postgresql-13
# su - postgres
$ rm -rf /var/lib/pgsql/13/data/*
$ pg_basebackup -h <マスター側ID> -p <ポート番号> -D ${PGDATA} -R --progress -U repl_user
postgres.auto.conf
<マスター側の接続情報を追加>
primary_conninfo = 'user=repl_user password=<マスター側パスワード> host=<マスター側IP> port=<マスター側ポート> application_name=node01'
postgresql.conf
<不要な設定をコメントアウト>
#synchronous_standby_names = 's1'
<設定を追記>
hot_standby = on
wal_receiver_timeout = 60s
レプリケーションができているかの確認
<マスタサーバでクエリを実行>
select application_name, state, sync_priority, sync_state from pg_stat_replication;
<syncと表示されれば成功>
まとめ
PostgreSQLでのレプリケーション設定方法について紹介しました。
簡単な設定でレプリケーションが実現できることがお判りいただけたと思います。
注意点として、現時点ではマスターサーバーが停止した場合にスタンバイ側を昇格させるフェイルオーバーを手動で行う必要があります。自動でフェイルオーバーを行うためには別のミドルウェアを使用する必要があります。
実運用では自動フェイルオーバーまでセットで設定することをお勧めします。
このカテゴリの最新記事
2023.11.09
【Laravel】改行コード(\n)を認識しながらHTMLタグは文字列としてサニタイズしたい場合の方法
2024.02.09
バッチファイルで一般権限で実行後、管理者権限でも動かす方法
2024.05.24
【Laravel】DBテーブルの主キー名を変更する方法
2024.04.18
【Laravel】Laravelで作成されたディレクトリのpermissionについて