| 序号 | IP | 备注 |
|---|---|---|
| 1 | 192.168.1.110 | 主数据库 |
| 2 | 192.168.1.120 | 从数据库 |
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
- 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
1)、于/opt/postgresql目录下,编辑docker-compose.yml
- 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)、启动服务
-
- cd /opt/postgresql
- docker-compose up -d
3)、进入到从库postgres的容器内配置流复制
-
- 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配置
- # 在备份的同时允许查询
- hot_standby=on
- # 流复制最大延迟 (可选)
- max_standby_streaming_delay=30s
- # 从向主报告状态的最大间隔时间 (可选)
- wal_receiver_status_interval=10s
- # 查询冲突时向主反馈 #默认参数,非主从配置相关参数,表示到数据库的连接数 (可选)
- hot_standby_feedback=on
- # 一般从库做主要的读服务时,设置值需要高于主
- max_connections=1000
5)、停止从数据库,配置docker-compose.yml文件
-
- cd /opt/postgresql
- docker-compose down
于/opt/postgresql目录下,编辑docker-compose.yml
- 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命令
-
- select client_addr,sync_state from pg_stat_replication;
2、连接数据执行如下SQL命令
select pg_is_in_recovery();