PostgreSQL主从复制 Docker版

版本

Docker 18.03
Postgres 10.3
主IP:172.17.0.12
从IP:172.17.0.13

启动docker容器

  1. 创建数据存储目录 mkdir -p /home/data/pgdata{1,2}

  2. 分别启动主库和从库(建议使用docker-compose)
    docker run -e POSTGRES_PASSWORD=12345678 -e TZ=Asia/Shanghai --name pg-master -d -p 5435:5432 -v /home/data/pgdata1:/var/lib/postgresql/data postgres:10

    docker run -e POSTGRES_PASSWORD=12345678 -e TZ=Asia/Shanghai --name pg-slaver -d -p 5436:5432 -v /home/data/pgdata2:/var/lib/postgresql/data postgres:10

  3. 记录IP【也可以启动命令指定】

主服务器

  • cd /home/data/pgdata1

  • vi pg_hba.conf

    host    replication     all             172.17.0.13/32          trust
    
  • vi postgresql.conf

    archive_mode = on   #开启归档模式
    archive_command = 'cp %p /var/lib/postgresql/data/%f'   #归档命令
    wal_level = hot_standby    #热备模式
    max_wal_senders = 10   #最多有1个流复制连接     
    wal_sender_timeout = 60s    #流复制超时时间
    max_connections = 100   #最大连接时间,必须要小于从库的配置
    
  • 重启

从服务器

  • 进入docker exec

    docker exec -it pg-slaver bash
    cd /var/lib/postgresql
    pg_basebackup -h 172.17.0.12 -U postgres –D data2/ -X stream -R –P
    rm -rf data
    mv data2 data
    

    -R 表示自动生成recovery.conf文件,若不加,可以自定义该文件:

    standby_mode = on  #表示该节点是从库
    primary_conninfo = 'host=172.17.0.12  post=5432  user=postgres  password=12345678'
    recovery_target_timelint = 'latest' #说明恢复到最新状态
    
  • 退出docker
    cd /home/data/pgdata2
    vi postgresql.conf

    wal_level = hot_standby    #热备模式
    max_connections = 200   #最大连接
    hot_standby = on #说明这台机器不仅用于数据归档,还可以用于数据查询
    max_standby_streaming_delay = 30s #流备份的最大延迟时间
    wal_receiver_status_interval = 10s  #向主机汇报本机状态的间隔时间
    hot_standby_feedback = on #r出现错误复制,向主机反馈
    
  • 重启

验证

进入主服务器,连接数据库,执行:select client_addr,sync_state from pg_stat_replication;
正确显示地址,表示配置成功。
接下来可以建表进行测试。

要在Docker上安装主从PostgreSQL,可以按照以下步骤进行操作: 1. 首先,在Docker中安装PostgreSQL。可以使用以下命令来安装PostgreSQL容器: ``` docker run --name postgres \ --restart=always \ -e TZ=Asia/Shanghai \ -e POSTGRES_PASSWORD=ly123456 \ -p 5432:5432 \ -v /data/postgresql/data:/var/lib/postgresql/data \ -d postgres ``` 这个命令将创建一个名为 "postgres" 的PostgreSQL容器,并设置了密码为 "ly123456",将PostgreSQL的数据目录挂载到宿主机的"/data/postgresql/data"路径上。 2. 然后,配置主从复制。首先,检查postgresql.auto.conf文件是否包含"primary_conninfo"配置项,其中包含了主数据库的连接信息。可以使用以下命令查看文件内容: ``` cat /data/postgresql/data/postgresql.auto.conf ``` 如果没有该配置项,可以手动添加它。在文件末尾添加以下内容: ``` primary_conninfo = 'user=syncuser' ``` 其中,"syncuser"是在主数据库上创建的用于复制的用户。 3. 接下来,创建从数据库。可以使用以下命令创建一个新的PostgreSQL容器作为从数据库: ``` docker run -d -p 54321:5432 --name postgres --restart=always -v /devel/xwq/pgsql_data_dir/d14r1n17:/var/lib/postgresql/data/ 7e309048b14d ``` 这个命令将创建一个名为 "postgres" 的从数据库容器。 4. 重新启动容器以使配置生效: ``` docker restart postgres ``` 现在,你已经成功安装了主从PostgreSQL。你可以通过连接到主数据库和从数据库来进行验证。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [使用docker搭建postgresql主从复制](https://blog.csdn.net/yyb1369584682/article/details/122498271)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [docker PostgreSQL 14.1 主从配置](https://blog.csdn.net/huangwp2000/article/details/126361659)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值