使用docker搭建postgresql主从复制

1、环境信息

服务器地址: 主节点:d14r1n17 10.4.14.18

                       从节点:d14r1n18 10.4.14.19

                       从节点:d14r1n19 10.4.14.20

2、主库配置

(1)创建容器

docker run -d -p 54321:5432  --name postgres --restart=always -v /devel/xwq/pgsql_data_dir/d14r1n17:/var/lib/postgresql/data/ 7e309048b14d

容器名称:postgres 端口:54321 账号:postgres 密码:admin

(2)进入容器并创建复制数据库用户

docker exec -it postgres /bin/bash
psql -h 10.4.14.18  -p 54321  -U postgres
CREATE ROLE replica login replication encrypted password 'admin'

(3)修改配置文件pg_hba.conf,增加replica用户,进行同步

host replication replica 10.4.14.19/32 md5
host replication replica 10.4.14.20/32 md5
注:即使有host all all all md5,也要添加上面两行

(4)修改配置文件postgresql.conf,修改以下几个地方

cd /devel/xwq/pgsql_data_dir/d14r1n17

vi postgresql.conf

Listen_adresses = '*'
# 这个是设置主为wal的主机
wal_level = hot_standby
# 这个设置了可以最多有几个流复制连接,差不多有几个从,就设置几个
max_wal_senders = 32 
# 设置流复制保留的最多的xlog数目
wal_keep_segments = 256 
# 设置流复制主机发送数据的超时时间
wal_sender_timeout = 60s 
# 这个设置要注意下,从库的max_connections必须要大于主库的
max_connections = 100 
# (与异步流复制区别!!!)
synchronous_standby_names = 'mydb_standby1'

(4)重启docker

docker restart postgres

3、从库配置

(1)创建容器

docker run -d -p 54321:5432  --name postgres  7e309048b14d
注:创建从库容器时不能挂载目录到宿主机,挂载的话在执行rm -rf /var/lib/postgresql/data/*时会报错

容器名称:postgres 端口:54321 账号:postgres 密码:admin

 

(1)登录postgre用户,测试连接主库数据库是否正常

docker exec -it postgres /bin/bash

psql -h 10.4.14.18 -p 54321 -U postgres

(2)通过pg_basebackup命令行在从库上生成基础备份

su postgres
rm -rf /var/lib/postgresql/data/*
pg_basebackup -D $PGDATA -Fp -Xs -v -P -h 10.4.14.18 -p 54321 -U replica -W -l replbackup20200114
#参数说明:
#        -h:指定连接的数据库的主机名或IP地址,这里就是主库的ip
#        -U:指定连接的用户名,此处是我们刚才创建的专门负责流复制的repl用户
#        -F:指定了输出的格式,支持p(原样输出)或者t(tar格式输出)
#        -x:表示备份开始后,启动另一个流复制连接从主库接收WAL日志
#        -P:表示允许在备份过程中实时的打印备份的进度
#        -R:表示会在备份结束后自动生成recovery.conf文件,这样也就避免了手动创建
#        -D:指定把备份写到哪个目录、postgresql配置文件所在的目录$PGDATA
#        -l:表示指定一个备份的标识,运行命令后看到如下进度提示就说明生成基础备份成功

 

(3)通过docker inspect命令在宿主机上找到配置文件目录,修改从库数据目录下的postgresql.conf文件,将hot_standby改为启用状态

docker inspect postgres

 

cd /var/lib/docker/volumes/50961942104a701a2b9220fef196c22d84beeb268ceece9bf533b9b3f5ae613b/_data
vi postgresql.conf
hot_standby=on

(4)新建recovery.conf,并编辑recovery.conf配置文件(与异步流复制区别)

vi recovery.conf
standby_mode = 'on'
​
#在primary_conninfo中加入application_name=mydb_standby1,例如
primary_conninfo = 'host=10.4.14.18  port=54321 user=replica password=admin application_name=mydb_standby1'
recovery_target_timeline = 'latest'

(6)重启docker

docker restart postgres

(7)到主库中查看是否配置成功

SELECT usename , application_name , client_addr, sync_state FROM pg_stat_replication;

 

参考文档列表:

基于docker容器的Postgresql 11主从复制搭建 及切换_chen123479960的专栏-CSDN博客_docker postgres主从

PostgreSQL 主从实现之同步流复制 - 简书

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
使用Docker搭建Redis主从复制,你需要按照以下步骤进行操作: 1. 首先,确保你已经安装了Docker。如果没有,请先安装Docker。 2. 创建一个用于主节点的Redis容器。在终端中运行以下命令: ``` docker run -d --name redis-master -p 6379:6379 redis ``` 这将在后台运行一个名为redis-master的Redis容器,并将其映射到本地的6379端口。 3. 创建两个用于从节点的Redis容器。在终端中运行以下命令: ``` docker run -d --name redis-slave1 redis docker run -d --name redis-slave2 redis ``` 这将在后台分别运行两个名为redis-slave1和redis-slave2的Redis容器。 4. 获取主节点的IP地址。运行以下命令以获取主节点容器的IP地址: ``` docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-master ``` 记下这个IP地址,稍后将在配置从节点时使用。 5. 配置从节点连接到主节点。首先,进入第一个从节点容器: ``` docker exec -it redis-slave1 redis-cli ``` 然后,运行以下命令设置从节点连接到主节点: ``` slaveof <主节点IP地址> 6379 ``` 将`<主节点IP地址>`替换为步骤4中获取的主节点IP地址。 6. 重复步骤5,配置第二个从节点连接到主节点: ``` docker exec -it redis-slave2 redis-cli slaveof <主节点IP地址> 6379 ``` 7. 现在,你已经成功配置了Redis主从复制。你可以通过连接到任何一个从节点,并在其中执行命令来验证复制是否正常工作。例如,可以在从节点上运行`INFO replication`命令来检查复制状态。 请注意,这只是一个基本的设置示例。在实际生产环境中,你可能还需要进行更多的配置和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值