站保站

服务市场
  • 网站市场
  • 单机游戏
  • 平台大厅
  • 转让市场
  • 发卡市场
  • 广告市场
  • 下载市场
  • 收录市场
  • 本站平台
    平台客服
    微信Q群



    平台微博/weibo    平台微信/公众号    平台抖音/快手   
    曝光台    保障    地图   
    上传资源 快速赚钱
    站保站    登录      |  注册  |  

    只需一步,快速开始!

     找回密码   |   协议
    热门搜索: 网站开发 App报毒 挖矿源码 代办资质

    【开发笔记】 Postgres-12.1数据库,基于docker-compose做主从备份

    • 时间:2020-10-26 09:41 编辑:love__nana 来源: 阅读:52
    • 扫一扫,手机访问
    摘要:

    如题,关于postgres 12.1版本做主从备份

    一开始安装了两个数据库,照着好多教程,配置主数据库后,数据库无法启动,查看启动日志,发现是主数据库的postgresql.conf中的配置了wal_keep_segments,配置文件中有这个参数的说明,但是配置了就无法启动,原因在查找中

    折腾了一天,最后在大神的帮助下,基于网上现成的9.5版本的docker,改造调试了下,将12.1版本的整理出来

    直接上配置:(将下面四个文件放在一个目录下)

    docker-compose

    1. version: '2.0'
    2. services:
    3. # 从数据库
    4. postgres-slave:
    5. build:
    6. context: ./
    7. dockerfile: ./Dockerfile
    8. container_name: PG-SLAVE
    9. ports:
    10. - 20002:5432
    11. links:
    12. - postgres-master
    13. environment:
    14. REPLICATION_ROLE: slave
    15. POSTGRES_MASTER_SERVICE_HOST: postgres-master
    16. POSTGRES_PASSWORD: 123456
    17. # 主数据库
    18. postgres-master:
    19. container_name: PG-MASTER
    20. build:
    21. context: ./
    22. dockerfile: ./Dockerfile
    23. ports:
    24. - 20001:5432
    25. environment:
    26. REPLICATION_ROLE: master
    27. POSTGRES_PASSWORD: 123456

    dockerfile

    1. # -*- mode: conf -*-
    2. FROM postgres:12.1
    3. MAINTAINER ***
    4. # common settings
    5. ENV MAX_CONNECTIONS 500
    6. ENV MAX_WAL_SENDERS 100
    7. # master/slave settings
    8. ENV REPLICATION_USER replication
    9. ENV REPLICATION_PASSWORD 123456
    10. # slave settings
    11. ENV POSTGRES_MASTER_SERVICE_HOST localhost
    12. ENV POSTGRES_MASTER_SERVICE_PORT 5432
    13. COPY 10-config.sh /docker-entrypoint-initdb.d/
    14. COPY 20-replication.sh /docker-entrypoint-initdb.d/
    15. # Evaluate vars inside PGDATA at runtime.
    16. # For example HOSTNAME in 'ENV PGDATA=/mnt/$HOSTNAME'
    17. # is resolved runtime rather then during build
    18. RUN sed -i 's/set -e/set -e -x\nPGDATA=$(eval echo "$PGDATA")/' /docker-entrypoint.sh

    两个脚本文件

    10-config.sh

    1. #!/bin/bash
    2. set -e
    3. echo [*] configuring $REPLICATION_ROLE instance
    4. echo "max_connections = $MAX_CONNECTIONS" >> "$PGDATA/postgresql.conf"
    5. # We set master replication-related parameters for both slave and master,
    6. # so that the slave might work as a primary after failover.
    7. echo "wal_level = hot_standby" >> "$PGDATA/postgresql.conf"
    8. echo "max_wal_senders = $MAX_WAL_SENDERS" >> "$PGDATA/postgresql.conf"
    9. # slave settings, ignored on master
    10. echo "hot_standby = on" >> "$PGDATA/postgresql.conf"
    11. echo "host replication $REPLICATION_USER 0.0.0.0/0 trust" >> "$PGDATA/pg_hba.conf"

    20-replication.sh

    1. #!/bin/bash
    2. set -e
    3. if [ $REPLICATION_ROLE = "master" ]; then
    4. psql -U postgres -c "CREATE ROLE $REPLICATION_USER WITH REPLICATION PASSWORD '$REPLICATION_PASSWORD' LOGIN"
    5. elif [ $REPLICATION_ROLE = "slave" ]; then
    6. # stop postgres instance and reset PGDATA,
    7. # confs will be copied by pg_basebackup
    8. pg_ctl -D "$PGDATA" -m fast -w stop
    9. # make sure standby's data directory is empty
    10. rm -r "$PGDATA"/*
    11. pg_basebackup \
    12. --write-recovery-conf \
    13. --pgdata="$PGDATA" \
    14. --username=$REPLICATION_USER \
    15. --host=$POSTGRES_MASTER_SERVICE_HOST \
    16. --port=$POSTGRES_MASTER_SERVICE_PORT \
    17. --progress \
    18. --verbose
    19. #--xlog-method=fetch \
    20. # useless postgres start to fullfil docker-entrypoint.sh stop
    21. pg_ctl -D "$PGDATA" \
    22. -o "-c listen_addresses='*'" \
    23. -w start
    24. fi
    25. echo [*] $REPLICATION_ROLE instance configured!

    文件部署后,直接运行 docker-compose up

    该配置是在同一个主机上部署,如果要将两个数据库部署在不同主机

    则将docker-compose中的主备分开,先在主机上跑

    在从机上部署时,需要把主机的数据库ip和端口手动写入dockerfile和20-replication.sh文件中

    • 全部评论(0)
    • 最新

    信息加载中,请等待

    微信客服(速回)

    微信客服(慢回)



    企业微信客服二维码
    联系我们
    平台客服: 平台QQ客服

    平台电话:400电话迁移中!

    平台邮箱:28292383@qq.com

    工作时间:周一至周五:早10:00 晚:18:00

    营业执照     网站ICP备案:鲁ICP备20027607号-1     鲁公网安备:37068702000078号     增值电信业务经营许可证、在线数据与交易处理业务许可证:鲁B2-20200681      © 2016-2024 站保站  https://www.zhanbaozhan.com/ 版权所有!      平台规范:   关于我们   广告合作   隐私条款   免责声明   法律声明   服务条款   网站地图   平台工单!