Docker 部署 PostgreSQL 主从

主从部署准备

先pull容器,并运行,这里我是将密码设置为123456,你可以自定义

docker run -d -p 5432:5432 --name postgresql -e POSTGRES_PASSWORD=123456 postgres

创建挂载目录

mkdir /docker_data/postgres/master -p
mkdir /docker_data/postgres/slave -p

为防止数据随容器被删除而丢失,这里将数据复制到主机的/docker_data/postgres下,并准备了两套环境,准备做主从容器的挂载目录

docker cp postgresql:/var/lib/postgresql/data /docker_data/postgres/master/
docker cp postgresql:/var/lib/postgresql/data /docker_data/postgres/slave/

停止并删除该容器,准备启动主从

docker stop postgresql
docker rm postgresql

启动主库

docker run -d -p 15432:5432 --name pgmaster -e POSTGRES_PASSWORD=123456 -v /docker_data/postgres/master/data:/var/lib/postgresql/data postgres

启动从库

docker run -d -p 25432:5432 --name pgslave -e POSTGRES_PASSWORD=123456 -v /docker_data/postgres/slave/data:/var/lib/postgresql/data postgres

主库

docker exec -it pgmaster bash   # 进入pgmaster容器
psql -U postgres                # postgres用户 执行psql

创建用户 syscuser 密码为123456 用于主从同步

create role syncuser login replication encrypted password '123456';
\du

在这里插入图片描述

主库配置文件 /docker_data/postgres/master/data/pg_hba.conf
在会后一行加入以下配置

host    replication     syncuser        172.17.0.1/32           trust

注意,这里的172.17.0.1是容器的网关IP,这里也可以写容器的IP,不过docker容器的IP可能每次启动都不一样,这里单机版的主从配置推荐这样配置,如果是多台服务器的主从,这里的IP需要配置成从节点的IP

修改/docker_data/postgres/master/data/postgresql.conf

listen_addresses = '*'   #监听所有IP
archive_mode = on      #允许归档
archive_command = '/bin/date'    #用该命令来归档logfile segment,这里取消归档。
wal_level = replica    #开启热备
max_wal_senders = 10    #这个设置了可以最多有几个流复制连接,差不多有几个从,就设置几个
wal_keep_size = 1024    #设置wal的大小,单位M。
wal_sender_timeout = 60s #设置流复制主机发送数据的超时时间
max_connections = 100    #这个设置要注意下,从库的max_connections必须要大于主库的

重启容器

docker restart pgmaster

从库

进入从库容器,删除自身数据,同步主节点数据

docker exec -it pgslave bash
cd /var/lib/postgresql/data/
rm -rf *
pg_basebackup -h 172.17.0.1 -p 15432 -U syncuser -Fp -Xs -Pv -R -D /var/lib/postgresql/data

新增并配置standby.signal文件

vi /docker_data/postgres/slave/data/standby.signal

内容为

standby_mode = 'on'

修改 /docker_data/postgres/slave/data/postgresql.conf

wal_level = replica   # WAL 日志级别为 replica
primary_conninfo = 'host=172.17.0.1 port=15432 user=syncuser password=123456'   # 主库连接信息	
hot_standby = on                     # 恢复期间,允许查询
recovery_target_timeline = latest    # 默认
max_connections = 120                # 大于等于主节点,正式环境应当重新考虑此值的大小

重启主库和从库

docker restart pgmaster pgslave

验证

验证主从是否正常
主库上执行以下命令,可以看到从库信息
docker exec -it pgmaster bash
psql -U postgres

select client_addr,sync_state from pg_stat_replication;
在这里插入图片描述
在主节点中,能看到这个ip就说明从节点已经成功同步主节点

打开navicat验证
在这里插入图片描述
在主库中新建库和表,从库已经自动同步了库和表
完毕

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值