主库配置
# 1.进入主库数据库,创建同步的用户名su postgrespsqlcreate role repl login replication encrypted password 'password';# 2. 修改主库 pg_hba.conf 的配置文件vim /usr/local/postgresql/data/pg_hba.conf# 增加如下配置host all all 192.168.1.0/24 trusthost replication repl 192.168.1.0/24 md5# 3. 修改 主库 postgres.conf 的配置文件vim /usr/local/postgresql/data/postgresql.confshared_buffers = 128MB dynamic_shared_memory_type = posix wal_level = hot_standby #此参数主数据库和从数据库不一样(从库为relpica)archive_mode = on archive_command = 'cp %p /usr/local/postgresql/data/pg_archive/%f' max_wal_senders = 6 wal_keep_segments = 10240 wal_sender_timeout = 60s log_directory = 'log'# 4. 创建归档目录mkdir /usr/local/postgresql/data/pg_archive# 5. 重启主库systemctl restart postgresql11systemctl status postgresql11
从库配置
# 从库不需要从初始化操作,直接从主库备份
# 如果已经初始化,则清空data目录即可 rm -rf /usr/local/postgresql/data
# 1. 从主库备份
su postgres
cd # 切换家目录
pg_basebackup -D /usr/local/postgresql/data -Fp -Xs -v -P -h 192.168.1.10 -p 5432 -U repl
# 3. 修改配置文件
vim /usr/local/postgresql/data/postgresql.conf
shared_buffers = 128MB
dynamic_shared_memory_type = posix
wal_level = replica
archive_mode = on
archive_command = 'cp %p /usr/local/postgresql/data/pg_archive/%f'
wal_sender_timeout = 60s
hot_standby = on
max_standby_streaming_delay = 30s
wal_receiver_status_interval = 10s
hot_standby_feedback = on
log_directory = 'log'
# 4. 拷贝并修改recovery文件
cp /usr/local/postgresql/share/recovery.conf.sample /usr/local/postgresql/data/recovery.conf
vim /usr/local/postgresql/data/recovery.conf
recovery_target_timeline = 'latest' #同步到最新数据
standby_ mode = on #指明从库身份
trigger_file = 'failover.now'
primary_conninfo = 'host=192.168.1.10 port=5432 user=repl password=password'
# 重启数据库
systemctl restart postgresql11
# 如果启动报错
chmod 700 -R /usr/local/postgresql
# 5. 验证从库
postgres=# select pg_is_in_recovery();
pg_is_in_recovery
-------------------
t
(1 row)
# 6. 验证主库
postgres=# select pg_is_in_recovery();
pg_is_in_recovery
-------------------
f
(1 row)
postgres=# select * from pg_stat_replication;
-[ RECORD 1 ]----+------------------------------
pid | 61806
usesysid | 16384
usename | repl
application_name | walreceiver
client_addr | 192.168.1.11
client_hostname |
client_port | 57038
backend_start | 2022-06-15 22:23:48.630817+08
backend_xmin |
state | streaming
sent_lsn | 0/5000140
write_lsn | 0/5000140
flush_lsn | 0/5000140
replay_lsn | 0/5000140
write_lag |
flush_lag |
replay_lag |
sync_priority | 0
sync_state | async