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();
相关推荐
wuyikeer2 小时前
docker下搭建redis集群
redis·docker·容器
hsjcjh3 小时前
Nodemailer使用教程:在Node.js中发送电子邮件
linux·运维·node.js
没有梦想的咸鱼185-1037-16634 小时前
北斗高精度数据解算:破解城市峡谷/长基线/无网区难题,从毫米级定位到自动化交付——(GAMIT/GLOBK底层核心解算技术方法)
运维·arcgis·数据分析·自动化
不怕犯错,就怕不做4 小时前
linux 如何查看自己的帐号密码及samba的帐号和密码
linux·运维·服务器
实在智能RPA4 小时前
Agent 在物流行业能实现哪些自动化?——深度拆解 AI Agent 驱动的智慧物流新范式
运维·人工智能·ai·自动化
张3235 小时前
Linux 启动过程
linux·运维
chinesegf5 小时前
ubuntu建虚拟环境制作docker容器
linux·ubuntu·docker
李彦亮老师(本人)5 小时前
Rocky Linux 9.x 新特性详解
linux·运维·服务器·centos·rocky linux
Keanu-5 小时前
Docker---容器编排工具Docker Compose
docker·容器