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/
来源:佛西博客
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
< <上一篇
下一篇>>
文章目录
关闭
目 录