• 基于Docker实现pgsql的热备


    准备镜像

    直接使用postgres的docker可能会出现无法字符集的问题,建议直接构建中文镜像

    创建dockerfile文件

    FROM postgres:11.5
    RUN localedef -i zh_CN -c -f UTF-8 -A /usr/share/locale/locale.alias zh_CN.UTF-8
    ENV LANG zh_CN.utf8
    
    • 1
    • 2
    • 3

    本同目录下执行docker build -t pgsql-cn .

    linux数据库与docker之间的主备

    主机操作

    1. 创建replica账号
    2. 修改pgsql/data/pg_hba.conf,echo host replication replica all md5 >> /var/lib/postgresql/data/pg_hba.conf
    3. 重启pg,切换为posgres账号执行在pgsql主目录下./bin/pg_ctl -D ./data restart
    4. 执行sql,select * from pg_create_physical_replication_slot('standby1_slot');

    备机操作

    1. docker run -it --rm -v 存储路径:/var/lib/postgresql/data pgsql-cn pg_basebackup -R -h 主机ip -U repilica -X stream -P -S standby1_slot -D /var/lib/postgresql/data
    2. docker run -d --restart=unless-stopped -v 存储路径:/var/lib/postgresql/data -p 45432:5432 pgsql-cn

    验证

    主机执行sql

    SELECT slot_name, slot_type, active from pg_replication_slots;

    本地两个docker之间的主备

    搭建主数据库

    docker run -d --restart=unless-stopped -e POSTGRES_DB=test -e POSTGRES_USER=replica -e POSTGRES_PASSWORD=123456 -p 35432:5432 pgsql-cn

    也可以通过pg_basebackup 备份的数据启动,这样就不能设置账号,数据库等信息了

    docker exec -it 主容器id sh -c “echo host replication replica all md5 >> /var/lib/postgresql/data/pg_hba.conf”

    docker exec -it -u postgres 主容器id sh -c “pg_ctl reload”

    docker exec -it 主容器id psql -U replica -c “select * from pg_create_physical_replication_slot(‘standby1_slot’);”

    搭建备份数据库

    docker run -it --rm -v 存储路径:/var/lib/postgresql/data pgsql-cn pg_basebackup -R -h 主机ip -U repilica -X stream -P -S standby1_slot -D /var/lib/postgresql/data

    docker run -d --restart=unless-stopped -v 存储路径:/var/lib/postgresql/data -p 45432:5432 pgsql-cn

    故障恢复

    备库恢复

    1. 备库执行docker exec -it -u postgres 备机id pg_ctl promote
    2. 在备库执行SELECT pg_promote(true,60);【只在pg12以上有效】

    主库恢复

    1. 在原备库中创建备份槽,以便原主库接入并恢复数据

    docker exec -it 备容器id psql -U test -c “select * from pg_create_physical_replication_slot(‘main_slot’);”

    1. 从备份库恢复数据

    使用pg_basebackup从备份库恢复数据到数据卷,-R参数会自动生成热备配置到postgresql.auto.conf中

    docker run -it --rm --network pg-cluster-network -v /main-back:/var/lib/postgresql/data pgsql-cn pg_basebackup -R -h 备库ip -U 账号 -X stream -P -S main_slot -D /var/lib/postgresql/data

    参考:

    • https://my.oschina.net/u/4254626/blog/5403511
  • 相关阅读:
    Mybatis懒加载
    Java应用如何不改代码,调整窗口大小
    linux软件安装
    JetCache设计原理浅析
    RT-Thread实战笔记-小白一看就会的平衡车教程(附源码)
    jQuery总结
    Qt http
    小程序源码:AI微信小程序源码下载人脸照片AI转换动漫照片
    【操作系统】错题库
    OpenCV入门8:区域分割和区域生长
  • 原文地址:https://blog.csdn.net/zhaoenweiex/article/details/127596626