postgres(10.1)主从流复制docker部署

本文详细介绍了如何在Docker环境中配置PostgreSQL主从复制,包括启动镜像、设置pg_hba.conf和recovery.conf,以及遇到的问题如pg_wal文件过多和数据一致性。还提供了解决方案,如清理pg_wal和主从关系恢复方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、准备

1、docker环境

2、准备两个服务器,假设ip分别为192.168.3.110(主)/192.168.3.111(从)

3、提前准备好postgres数据库镜像,版本10.1

二、启动镜像

docker run --name postgres --net hylink --log-opt max-size=1g --log-opt max-file=3 \
-v /home/hylink/docker/container/postgres/:/var/lib/postgresql/data/ \
-v /etc/localtime:/etc/localtime:ro \
--restart=always \
-p 5432:5432 -e POSTGRES_PASSWORD=Hylink2014@postgres -d 599272bf538f

在两台服务器上执行启动命令,之后可用navicat测试连接数据库

三、配置

1、主库

  • 找到挂载目录/home/hylink/docker/container/postgres/位置下pg_hba.conf文件,在最下面新增一行代码
host    replication    replica     192.168.3.110/32        md5
  • 进入容器
docker exec -it postgres /bin/bash
  • 连接数据库

注:创建的role用户名、密码根据需要自己修改

1)默认端口情况
输入:psql -U postgres;
输入:postgres密码;
输入:set synchronous_commit = off;
输入:create role replica login replication encrypted password '123456';
查看创建情况:\du;


2)修改端口情况
修改/home/hylink/docker/container/postgres/挂载目录下postgresql.conf文件的port = 5433;
进入容器 ;
输入:psql -U postgres -h 192.168.3.110 -p 5433;
输入:postgres密码;
输入:set synchronous_commit = off;
输入:create role replica login replication encrypted password '123456';
查看创建情况:\du;

2、从库

  • 主从同步
1)进入容器
2)备份同步:pg_basebackup -D /home -h 35.1.176.4 -p 5432 -U replica -Fp -R -X s -P -v
3)输入replica密码
3)覆盖数据:cp -R /home/* /var/lib/postgresql/data/
4)清空home:rm -rf /home/*
  • 新建recovery.conf文件

在挂载目录下新建recovery.conf文件,并填充如下内容

standby_mode = 'on'
primary_conninfo = 'user=replica password=123456 host=192.168.3.110 port=543 sslmode=prefer sslcompression=1 krbsrvname=postgres target_session_attrs=any'

四、按顺序重启主、从数据库

docker restart postgres

五、问题

1、当主库操作频繁时,会产生很多的流复制文件,也就是pg_wal文件夹内的文件,根据数据库主从复制的原理,从库会从主库的pg_wal文件夹内拿取文件执行,将主库数据同步到从库,一旦从库产生的文件过多,从库又来不及复制文件进行数据同步,这样就会导致主从数据不一致从而失去了主从流复制机制。

2、同样的问题,一旦主库产生的流复制文件过多造成堆积,会占用服务器物理空间,从而导致服务器挂掉

针对上面所产生的问题,建议使用postgres主从流复制机制的通知,也要充分考虑自己业务的应用场景,是否合适,至于彻底解决办法,目前还没有好的方式,后续如果处理了会更新文章

六、问题处理

当发生上述问题造成主从数据不一致时,或者因为误操作导致主从数据不一致,甚至是主从数据库无法正常启动的情况(一般就是starting up缺失文件两个问题),如果想继续恢复主从关系,在你没有其他的解决方法时,可以参考我的办法(暴力):

直接彻底删除从库,包括镜像和挂载目录,然后按照3-2的步骤操作,完成后重启从库即可

如果不想继续主从模式,关闭从库即可,如果依然不生效,建议重启一下docker之后再启动主库关闭从库试一试

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值