PostgreSQL配置主从备份(docker)

一、服务器规划

序号 IP 备注
1 192.168.1.110 主数据库
2 192.168.1.120 从数据库

二、服务器部署

2.1、主服务器部署(192.168.1.110)

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

复制代码
version: "3"
services:
  postgres-master:
    image: pgrouting/pgrouting:12-3.1-3.1.3
    container_name: postgres12-slave
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: 7Y6G#pg2789#Ws
    ports:
      - 5432:5432
    volumes:
      - ./data:/var/lib/postgresql/data
      - /etc/localtime:/etc/localtime:ro
        #将外边时间直接挂载到容器内部,权限只读
        #    restart: always

2)、启动服务

复制代码
cd /opt/postgresql
docker-compose up -d

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

执行创建SQL语句

复制代码
CREATE ROLE replica login replication encrypted password '123456';

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

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

5)、重启主数据库服务

复制代码
cd /opt/postgresql
docker-compose down
docker-compose up -d

2.2、从服务器部署(192.168.1.120)

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

bash 复制代码
version: "3"
services:
  postgres-slave:
    image: pgrouting/pgrouting:12-3.1-3.1.3
    container_name: postgres12-slave
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: 7Y6G#pg2789#Ws
    ports:
      - 5432:5432
    volumes:
      - ./data:/var/lib/postgresql/data
      - /etc/localtime:/etc/localtime:ro
        #将外边时间直接挂载到容器内部,权限只读
        #    restart: always

2)、启动服务

bash 复制代码
cd /opt/postgresql
docker-compose up -d

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

bash 复制代码
docker exec -it postgres12-slave /bin/bash
#切换到postgres用户
su - postgres
#使用pg_basebackup命令备份主数据库中的数据
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配置

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

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

bash 复制代码
cd /opt/postgresql
docker-compose down

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

bash 复制代码
version: "3"
services:
  postgres-slave:
    image: pgrouting/pgrouting:12-3.1-3.1.3
    container_name: postgres12-slave
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: 7Y6G#pg2789#Ws
    ports:
      - 5432:5432
    volumes:
      #- ./data:/var/lib/postgresql/data
      - ./data/pgdata:/var/lib/postgresql/data
      - /etc/localtime:/etc/localtime:ro  
        #将外边时间直接挂载到容器内部,权限只读
        #    restart: always

三、验证主从是否成功

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

bash 复制代码
select client_addr,sync_state from pg_stat_replication;

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

bash 复制代码
select pg_is_in_recovery();
相关推荐
小匠石钧知8 分钟前
02_在多个RockyLinux10虚拟机上安装k8s集群
云原生·容器·kubernetes·k8s
星野爱89534 分钟前
远程控制哪家安全性更高?ToDesk、UU远程、向日葵隐私屏深度测评!
linux·运维·网络
ALINX技术博客1 小时前
【黑金云课堂】FPGA技术教程Linux开发:系统定制
linux·运维·fpga开发
bmjwin2 小时前
一个监控脚本实时追踪记录进程隐秘连接ip方法
运维·服务器
霁月的小屋2 小时前
Docker 工程化实践(六):Docker Compose 管理多容器应用
运维·docker·容器
luyun0202022 小时前
论坛里的小工具,吾爱出品
运维·服务器·windows
江湖有缘3 小时前
Docker实战 | 使用Docker部署EasyNode服务器面板工具
服务器·docker·容器
心机之蛙qee3 小时前
Docker Compose 多容器编排
java·docker·容器
AI大佬的小弟3 小时前
私有化 Dify 应用开发(1):Dify 入门|Docker 一键部署全流程
docker·大模型落地·ai 应用开发·dify 教程·私有化 ai 部署·docker 实战·开源 ai 平台
Miao121313 小时前
工程交付指标入门:如何重新掌控软件交付
大数据·运维·devops