Debian12にPostgres15をインストールしてストリーミングレプリケーションする

Linux

本ページは広告が含まれています。気になる広告をクリック頂けますと、サーバ運営費になります(^^

Master設定

Postgres15インストール

apt-get install postgresql
# apt-cache show postgresql
Package: postgresql
Source: postgresql-common (248)
Version: 15+248
Installed-Size: 15
Maintainer: Debian PostgreSQL Maintainers <team+postgresql@tracker.debian.org>
Architecture: all
Depends: postgresql-15
Suggests: postgresql-doc
Description-ja: オブジェクトリレーショナル SQL データベース (サポート版)
 本メタパッケージはサポートされる最新版の PostgreSQL データベースサーバに常
 に依存しています。
 .
 PostgreSQL はフル機能を備えたオブジェクトリレーショナルデータベース管理シス
 テムです。SQL 標準の大部分をサポートし、多くの点でユーザが拡張できるよう設
 計されています。機能の一部を以下に示します:
 ACID トランザクション、外部キー、ビュー、シーケンス、サブクエリ、トリガ、
 ユーザ定義型および関数、外部結合、多版型同時実行制御。グラフィカルユーザイ
 ンターフェースや多くのプログラム言語用のバインディングも入手できます。
Description-md5: bdff2d6e5b2a1dd00e72b3ed8729d9ac
Tag: devel::lang:sql, interface::daemon, network::server, network::service,
 role::metapackage, role::program, suite::postgresql, works-with::db
Section: database
Priority: optional
Filename: pool/main/p/postgresql-common/postgresql_15+248_all.deb
Size: 10104
MD5sum: 27f5326fbcf4d2a3cb8e2f57dda29b5d
SHA256: 9a2f2c65ac1cb11baa75c5d266de2fc6faa744e5769653d744e60ad4890a4681

pg_hba.confの設定

host    all             all             192.168.0.0/16         trust

として起動し、postgresのパスワードを決める

PgAdminでアクセスしてパスワードを決めると楽、その後

host    all             all             192.168.0.0/16         md5

とする事でパスワードを聞かれるようになる

レプリケーションに必要なユーザがアクセスできるようにしておく

host    replication replication_user    192.168.0.26/32         md5

レプリケーションユーザ作成

CREATE ROLE replication_user LOGIN
  ENCRYPTED PASSWORD 'md5******************'
  NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE REPLICATION;
COMMENT ON ROLE replication_user IS 'レプリケーション用ユーザ';

postgres.conf調整

pgtuneを参考に、postgresのパフォーマンス調整を行う

 From PGTune https://pgtune.leopard.in.ua/
# DB Version: 15
# OS Type: linux
# DB Type: oltp
# Total Memory (RAM): 64 GB
# CPUs num: 4
# Connections num: 400
# Data Storage: ssd

max_connections = 400
shared_buffers = 16GB
effective_cache_size = 48GB
maintenance_work_mem = 2GB
checkpoint_completion_target = 0.9
wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 200
work_mem = 20971kB
huge_pages = try
min_wal_size = 2GB
max_wal_size = 8GB
max_worker_processes = 4
max_parallel_workers_per_gather = 2
max_parallel_workers = 4
max_parallel_maintenance_workers = 2

# For logs
log_destination='stderr'
logging_collector='on'
log_statement='mod'
#log_filename='postgresql-%Y-%m-%d’
log_filename = 'postgresql-%Y-%m-%d.log'        # log file name pattern,
log_line_prefix='[%t]%h %d %p[%l]'
log_rotation_age='1d'
log_rotation_size=800MB
log_min_error_statement=error
log_min_duration_statement=10000
log_directory='/var/local/pgsql/log'

#WAL Setting
# WRITE AHEAD LOG
wal_level = hot_standby
synchronous_commit = local
archive_mode = off
#REPLICATION
#max_wal_sender = 3        # スタンバイDBの数 + 1 (+移行用サーバ接続の為3台)
#wal_keep_segments = 16
max_replication_slots = 3
#Master
synchronous_standby_names = '*'
#Standby
hot_standby = on
hot_standby_feedback = on

スロット作成

su - postgres
psql
SELECT * FROM pg_create_physical_replication_slot('test-slot1');
 slot_name | lsn
-----------+-----
 slot1     |
(1 行)

Slave設定

Postgresql15インストール

apt-get install postgresql

postgres.conf

listen_addresses = '*'          # what IP address(es) to listen on;

pg_hba.conf

host    all             all             all                 trust

postgresユーザのパスワード設定

サービスの停止とデータ削除

サービス停止

# /etc/init.d/postgresql stop
Stopping postgresql (via systemctl): postgresql.service.

データ削除

# rm -r /var/lib/postgresql/15/main/

ベースバックアップ開始

予め作成した reprication_user のパスワードが聞かれベースバックアップが開始される

pg_basebackup -h 192.168.0.15 -p 5432 -U replication_user -D /var/lib/postgresql/15/main --wal-method=fetch --checkpoint=fast --write-recovery-conf --progress
パスワード:
  669109/28709708 kB (2%), 0/1 テーブル空間

100%になるの待つ

28726104/28726104 kB (100%), 1/1 テーブル空間

postgres.auto.confが出来ているのを確認

 cat /var/lib/postgresql/15/main/postgresql.auto.conf
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.
primary_conninfo = 'user=replication_user password=******* channel_binding=prefer host=192.168.0.15 port=5432 sslmode=prefer sslcompression=0 sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'

権限変更

# chown -R postgres:postgres /var/lib/postgresql/15/main/

postgres.conf変更

マスターサーバからpostgres.conf をコピーして、スレーブサーバのpostgres.confと入れ替える。スレーブのpostgres.confはリネームして、マスターサーバのpostgres.confと入替

その後権限設定

# chown postgres:postgres postgresql.conf

スレーブのPostgresを起動

/etc/init.d/postgresql start

ログの確認

[2023-11-20 10:23:37 JST]  1178[3]LOG:  PostgreSQL 15.3 (Debian 15.3-0+deb12u1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit を起動しています
[2023-11-20 10:23:37 JST]  1178[4]LOG:  IPv4アドレス"0.0.0.0"、ポート5432で待ち受けています
[2023-11-20 10:23:37 JST]  1178[5]LOG:  IPv6アドレス"::"、ポート5432で待ち受けています
[2023-11-20 10:23:37 JST]  1178[6]LOG:  Unixソケット"/var/run/postgresql/.s.PGSQL.57481"で待ち受けています
[2023-11-20 10:23:37 JST]  1182[1]LOG:  データベースシステムは中断されました: 2023-11-20 09:54:39 JST まで動作していたことは確認できます
[2023-11-20 10:23:37 JST]  1182[2]LOG:  スタンバイモードに入ります
[2023-11-20 10:23:37 JST]  1182[3]LOG:  REDOを5/AA000028から開始します
[2023-11-20 10:23:37 JST]  1182[4]LOG:  5/AA000170 でリカバリの一貫性が確保されました
[2023-11-20 10:23:37 JST]  1178[7]LOG:  データベースシステムはリードオンリー接続の受け付け準備ができました
[2023-11-20 10:23:37 JST]  1183[1]LOG:  プライマリのタイムライン1の 5/AB000000からでWALストリーミングを始めます

ストリーミングレプリケーションが開始した事が確認できる

ストリーミングがうまくいっているか確認

プライマリDBサーバにて SQL発行

select * from pg_stat_replication;

status が streaming ならストリーミングされている

タイトルとURLをコピーしました