本文档用于说明PostgresSQL数据库流复制(Streaming Replication)配置和主从切换过程。
参考博客地址:https://blog.youkuaiyun.com/ywd1992/article/details/81698556
1.主从配置
主:192.168.57.4
安装目录:/home/postgres/9.6/
Data目录:/home/postgres/9.6/data
备:192.168.57.3
安装目录:/home/postgres/9.6/
Data目录:/home/postgres/9.6/data
1.1在主服务操作
1)修改postgresql.conf文件
vi postgresql.conf
wal_level = hot_standby ##WAL日志信息的输出级别,minimal、replica、logical三种模式
max_wal_senders = 10 ##默认为10,一个流复制备库通常只需要消耗流复制主库一个WAL 发送进程,必须小于max_connections
wal_keep_segments = 512 ##越大越好,根据归档存储空间定,默认单个WAL文件大小为16M,这里为512×16MB=8GB
hot_standby = on ##开启流复制
logging_collector = on ##开启日志
log_directory = 'pg_log' ##开启日志路径
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' ##开启日志文件名
synchronous_commit = off ##只能为off,否则主库会一直等待备机响应,备机故障时主机也会出问题
2)创建replication用户
psql:进入psql执行
create user repli replication LOGIN password '123456';
3)配置pg_hba.conf
添加以下配置,考虑到主备角色互换,建议pg_hba.conf主备完全一样
host replication repli 192.168.1.128/32 md5
host replication repli 192.168.1.129/32 md5
4)重启数据库
$ pg_ctl stop -m fast
$ pg_ctl start
1.2在从服务操作
1)测试从服务器能否连接主服务器数据库
psql -h 192.168.57.4 -U postgres
连接成功后停掉从库的服务,清空从节点数据
rm –rf /nh_sdap/postgres/9.6/data/*
2)从主节点拷贝数据到从节点
pg_basebackup -h 192.168.57.4 -U repli -D /home/postgres/9.6/data -X stream -P
3)修改recovery.conf文件
复制share目录下的recovery.conf.sample文件
cp $PGHOME/share/recovery.conf.sample $PGDATA/recovery.conf
修改以下配置
standby_mode='on'
recovery_target_timeline = 'latest'
primary_conninfo='host=10.251.9.39 port=5432 user= repli password=123456' ##配置主机的ip、用户、端口等,repli即主库创建的用于流复制的用户
##trigger_file='/opt/PostgreSQL/9.3/data/trigger'
4)重启备库
$ pg_ctl stop -m fast
$ pg_ctl start
3、 查看主备状态
1)通过进程查看
主库为wal sender
备库为wal receiver
2)执行sql查询
在主库执行
说明192.168.57.4服务器是从节点,在接收流,而且是异步流复制
select pg_is_in_recovery();--主库是false 备库是true
3)测试主备是否正常
通过建表、插入数据测试即可
2、主从切换
2.1 文件触发方式(略)
2.2 pg_ctl promote方式主从切换
1、停掉主库
2、pg_ctl promote 从库执行切换,执行之后发现recovery.conf变为recovery.done文件,代表 切换成功
3、mv recovery.done recovery.conf 在原主库(当前从库)执行(修改其中的ip为当前的主库ip)
4、启动原主库(当前从库)
5、观察主、备库是否正常