postgresql_同步流复制配置
在postgresql.conf文件中的参数
synchronous_commit参数详解
此参数是指:数据库提交事务时是否需要等待wal日志写入硬盘后才向客户端返回成功
这几个参数的含义:
场景1:单实例环境
on:当数据库提交事务时,wal先写入wal buffer在写入wal日志,设置为on时需等待本地wal写入wal日志之后才向客户端返回成功,安全数据库性能有损耗
off:不需要等待本地wal buffer写入wal日志,返回成功,数据库宕机时,最新提交的少量事务可能会丢失,但重启数据库会认为这些事务异常终止,off能提高数据库性能
local:与on类似
场景2:流复制
remote_write:本地wal已落盘,备库还在备库的操作系统缓存中,只有一份持久化的wal,事务响应时间较低
on:两份持久化wal,主备两库wal已经落盘,响应时间较高
remote_apply:本地已落盘,且备库已落盘也完成了重做,事务响应时间最高
配置同步流复制
备库recovery.conf中添加
primary_conninfo = 'host=192.168.12.10 port=1921 user=repuser application_name=node2'
主库的postgresql.conf的synchronous_standby_names参数可引用备库application_name选项设置的值,这里是node2
主库上postgresql.conf上设置,红色添加的其余和异步流复制设置一样
wal_level = replica archive_mode = on archive_command ='/bin/date' max_wal_senders = 10 wal_keep_segments = 512 hot_standby = on synchronous_standby_names = 'node2' synchronous_commit = on
主库执行pg_ctl reload使得修改生效,备库调整了recovery.conf文件需要重启备库才能生效pg_ctl restart
在主库查看sync_state 字段已经变成了sync,同步流复制配置完成
postgres=# select usename,application_name,client_addr,sync_state from pg_stat_replication ; usename | application_name | client_addr | sync_state ---------+------------------+---------------+------------ repuser | node2 | 192.168.12.11 | sync (1 row)