Postgresql 13流复制的实现
本文简单的介绍下Postgresql 13版本如何去实现流复制
在主服务器上
1、设定流复制访问权限
echo “host replication postgres 172.30.44.217/32 trust”>>pg_hba.conf
2、配置流复制
设定WAL大小wal_keep_size = 3200
3、使用命令 pgctl reload 重载配置文件
在备用服务器上
确保安装好postgresql需要和主服务器端的版本对应,如果是docker,需要在主机上安装postgresql-client-common postgresql-common,在第3步之后,挂载到docker。
1、创建一个空白文件夹,用于存放数据库流
2、使用命令
pg_basebackup -h 172.30.44.216 -p 5432 -U postgres -Fp -Xs -Pv -R -D /var/lib/postgresql/data/data
开始流复制
3、期间会在目录自动生成primaryinfo 和standby文件。
4、使用命令pg_ctl -D /var/lib/postgresql/data/data即可开始数据库。
5、pg_controldata -D /var/lib/postgresql/data/data查看流复制情况
确认流复制是否成功
在主服务器上,使用sql脚本查询
select client_addr,sync_state from pg_stat_replication;
如果依旧未成功,需要参考日志,日志在数据库目录下的log文件夹
主备切换过程
1、在主节点上,创建signal,写入primaryinfo到postgresql.auto.conf
primary_conninfo='user=postgrespassfile=''/root/.pgpass'' channel_binding=prefer host=172.30.44.217 port=5432 '
2、在备节点上,添加信任
echo “host replication postgres 192.168.3.0/24 trust”>>pg_hba.conf
3、删除备库中的signal,和注释primaryinfo
4、停止主库
5、停止备库
6、启动备库
7、启动主库
此时切换完成
查看备用服务器日志会如下
2021-11-16 13:52:19.611 CST [1] 日志: 正在监听IPv4地址"0.0.0.0",端口 5432
2021-11-16 13:52:19.611 CST [1] 日志: 正在监听IPv6地址"::",端口 5432
2021-11-16 13:52:19.613 CST [1] 日志: 在Unix套接字 "/var/run/postgresql/.s.PGSQL.5432"上侦听
2021-11-16 13:52:19.621 CST [29] 日志: 在2021-11-16 13:52:18 CST,数据库在恢复中关闭
2021-11-16 13:52:19.621 CST [29] 日志: 正在进入备用模式
2021-11-16 13:52:19.627 CST [29] 日志: redo 在 44A/A22524B8 开始
2021-11-16 13:52:19.742 CST [29] 日志: 在44A/A3772370上已到达一致性恢复状态
2021-11-16 13:52:19.742 CST [29] 日志: 44A/A3772370 处的记录长度不合法:想要 24,但得到的是 0
2021-11-16 13:52:19.743 CST [1] 日志: 数据库系统准备接受只读请求的连接
2021-11-16 13:52:19.749 CST [33] 日志: 在时间点: 44A/A3000000 (时间安排1)启动日志的流操作
遇见的问题
2021-11-16 12:22:21.101 CST [99] 致命错误: 不支持的前端协议 0.12: 服务端支持 2.0 到 3.0
这个可能是primaryinfo中指定了TLS版本,需要注释掉
如默认的连接信息,是带ssl模式的
primary_conninfo = 'user=postgres passfile=''/root/.pgpass'' channel_binding=prefer host=172.17.0.1 port=5432 sslmode=prefer sslcompression=0 ssl_min_protocol_version=TLSv1.2 gssencmode=prefer krbsrvname=postgres target_session_attrs=any
需要改成
primary_conninfo = 'user=postgres passfile=''/root/.pgpass'' channel_binding=prefer host=172.17.0.1 port=5432
作者:佛西
链接:https://foxi.buduanwang.vip/sql/postgresql/1519.html/
文章版权归作者所有,未经允许请勿转载
如需获得支持,请点击网页右上角
共有 0 条评论