• PostgreSQL配置主从备份(docker)


    一、服务器规划

    序号

    IP

    备注

    1192.168.1.110主数据库
    2192.168.1.120从数据库

    二、服务器部署

    2.1、主服务器部署(192.168.1.110)

    1)、于/opt/postgresql目录下,编辑docker-compose.yml

    1. version: "3"
    2. services:
    3. postgres-master:
    4. image: pgrouting/pgrouting:12-3.1-3.1.3
    5. container_name: postgres12-slave
    6. environment:
    7. POSTGRES_USER: postgres
    8. POSTGRES_PASSWORD: 7Y6G#pg2789#Ws
    9. ports:
    10. - 5432:5432
    11. volumes:
    12. - ./data:/var/lib/postgresql/data
    13. - /etc/localtime:/etc/localtime:ro
    14. #将外边时间直接挂载到容器内部,权限只读
    15. # restart: always

    2)、启动服务

    1. cd /opt/postgresql
    2. docker-compose up -d

    3)、连接主数据库,创建主从复制(流复制)用户

    执行创建SQL语句

    CREATE ROLE replica login replication encrypted password '123456';

    4)、修改./data/pg_hba.conf文件

    1. 1)允许远程登录
    2. host all all 192.168.1.120/24 md5
    3. 2)允许从数据库链接主数据库去拖wal日志数据
    4. host replication replica 192.168.1.120/32 md5
    5. 3)配置用户的访问权限
    6. 在ipv4下加入host all all 192.168.1.120/24 md5
    7. 修改postgres.conf文件
    8. 1)允许所有地址监听
    9. listen_addresses='*'
    10. 2)开启归档模式
    11. archive_mode = on
    12. 3)归档配置
    13. %p 是被归档的redo文件的路径,
    14. %f 是被归档的redo文档的文件名
    15. %% 是百分号
    16. archive_command ='cp -i %p /4T/%f
    17. 4)主从设置为热血模式,流复制必选
    18. wal_level=hot_standby
    19. 5)流复制允许连接进程
    20. max_wal_senders=5
    21. 6)pg_wal保留策略
    22. wal_keep_segments=64
    23. 7) 中断连接和表示到数据库的连接数
    24. wal_sender_timeout = 60s
    25. max_connections=1000

    5)、重启主数据库服务

    1. cd /opt/postgresql
    2. docker-compose down
    3. docker-compose up -d

    2.2、从服务器部署(192.168.1.120)

    1)、于/opt/postgresql目录下,编辑docker-compose.yml

    1. version: "3"
    2. services:
    3. postgres-slave:
    4. image: pgrouting/pgrouting:12-3.1-3.1.3
    5. container_name: postgres12-slave
    6. environment:
    7. POSTGRES_USER: postgres
    8. POSTGRES_PASSWORD: 7Y6G#pg2789#Ws
    9. ports:
    10. - 5432:5432
    11. volumes:
    12. - ./data:/var/lib/postgresql/data
    13. - /etc/localtime:/etc/localtime:ro
    14. #将外边时间直接挂载到容器内部,权限只读
    15. # restart: always

    2)、启动服务

    1. cd /opt/postgresql
    2. docker-compose up -d

    3)、进入到从库postgres的容器内配置流复制

    1. docker exec -it postgres12-slave /bin/bash
    2. #切换到postgres用户
    3. su - postgres
    4. #使用pg_basebackup命令备份主数据库中的数据
    5. pg_basebackup -h 192.168.1.110 -p 5432 -U replica --password -X stream -Fp --progress -D /var/lib/postgresql/data/pgdata -R;

    4)、修改postgres.conf配置

    1. # 在备份的同时允许查询
    2. hot_standby=on
    3. # 流复制最大延迟 (可选)
    4. max_standby_streaming_delay=30s
    5. # 从向主报告状态的最大间隔时间 (可选)
    6. wal_receiver_status_interval=10s
    7. # 查询冲突时向主反馈 #默认参数,非主从配置相关参数,表示到数据库的连接数 (可选)
    8. hot_standby_feedback=on
    9. # 一般从库做主要的读服务时,设置值需要高于主
    10. max_connections=1000

    5)、停止从数据库,配置docker-compose.yml文件

    1. cd /opt/postgresql
    2. docker-compose down

    于/opt/postgresql目录下,编辑docker-compose.yml

    1. version: "3"
    2. services:
    3. postgres-slave:
    4. image: pgrouting/pgrouting:12-3.1-3.1.3
    5. container_name: postgres12-slave
    6. environment:
    7. POSTGRES_USER: postgres
    8. POSTGRES_PASSWORD: 7Y6G#pg2789#Ws
    9. ports:
    10. - 5432:5432
    11. volumes:
    12. #- ./data:/var/lib/postgresql/data
    13. - ./data/pgdata:/var/lib/postgresql/data
    14. - /etc/localtime:/etc/localtime:ro
    15. #将外边时间直接挂载到容器内部,权限只读
    16. # restart: always

    三、验证主从是否成功

    1、连接数据库执行如下SQL命令

    1. select client_addr,sync_state from pg_stat_replication;

    2、连接数据执行如下SQL命令

    select pg_is_in_recovery();

  • 相关阅读:
    java实现克里金插值导出geojson矢量数据(kriging)
    html+css+php+mysql实现注册+登录+修改密码(附完整代码)
    嵌入式开发笔记:STM32的基本知识学习
    入侵检测模型(An Intrusion-Detection Model)
    Redis小而巧的数据库真的很实用,掌握了用起来很舒服
    Cesium Vue(一)— 项目初始化配置
    AJAX为什么叫AJAX
    流式 Isotype control 流式细胞仪control组
    跨平台使用:第三方美颜SDK在多种操作系统上的应用
    【牛客网】排序子序列
  • 原文地址:https://blog.csdn.net/ma_hoking/article/details/132723485