PostgreSQL16.3 异步流复制搭建
一.配置环境
主机信息如下:
两个系统的postgres用户环境变量如下
export PATH=$PATH:$HOME/.local/bin:$HOME/bin:/u01/postgres/pgsql/bin
export LD_LIBRARY_PATH=/u01/postgres/pgsql/lib:$LD_LIBRARY_PATH
export PGDATA=/u01/postgres/pgdata
export LANG=en_US.UTF-8
二.主数据库的配置
要使用流复制,需要允许主库接受流复制的连接,需要在pg_hba.conf中做如下配置
host replication all 0.0.0.0/0 md5
这条的含义是允许任意用户从任何网络上发起到本数据库的流复制连接,使用MD5密码认证。用户 postgres 是该演示环境上的超级用户,当然,换成一个有流复制权限的用户也可以
要搭建流复制,需要在主库的postgresql.conf中设置以下几个参数
listen_addresses = '*'
max_wal_senders = 10
wal_level = replica
一定把 max_wal_senders 参数设置成一个大于零的值,在这里设置为10,同时需要把 wal_level 参数设置为 replica 或 logical
(对上面两个参数的修改都是需要重启数据库的,所以在实际生产中第一次建生产库时,最好先把这两个参数设置成上面的值)
另外 min_wal_size 的参数默认是80MB,通常太小,容易导致备库失效,也需要设置的大一些
min_wal_size = 800MB
三.在Standby上生成基础备份
做完以上准备工作后,就可以使用pg_basebackup命令行工具在备库机器上生成基础备份了,命令如下
pg_basebackup -h 192.168.1.217 -U postgres -F p -P -X stream -R -D $PGDATA -l osdbabackup20240717
执行成功后可以在备库的数据目录下看到复制过来的文件和配置文件
因为使用了 -R 参数,也会生成 standby.signal 文件,同时在 postgresql.auto.conf 中生成如下内容
如果没有加 -R 参数,我们也可以手动添加上面的内容。
如果是PostgreSQL12版本之前的数据库,使用了 -R 参数会生成 recovery.conf文件
四.启动Standby数据库
在启动备库之前,检查 postgresql.conf 中的参数 hot_standby 是否为 on,设置该参数是为了让备库是 Hot Standby,即可以对外提供只读服务。当然该参数在比较新的版本中默认就是on
启动备库,就可以自动进入Hot Standby状态
这时在主库的pg_stat_replication视图中,就可以看到从备库过来的流复制连接
select client_addr,state,sync_state from pg_stat_replication;
如果看不到备库过来的连接,说明有问题,需要检查备库的日志查看原因。如果看到的流复制状态 state不是 streaming 说明备库的流复制也有问题
因为 Hot Standby是只读的,所以如果在备库上做修改会操作失败
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?