本ページは広告が含まれています。気になる広告をクリック頂けますと、サーバ運営費になります(^^
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 ならストリーミングされている
