postgresql 14 配置主从复制(实时备份,流复制)基于docker
1.启动Postgresql实例
主站第一次部署
主站docker-compose.yml文件
version: '2'
services:
db:
container_name: 容器名称
build: .
image: postgresql:14
restart: always
environment:
- POSTGRES_DB=postgres
- POSTGRES_PASSWORD=123456
- POSTGRES_USER=odoo
- PGDATA=/var/lib/postgresql/data/pgdata
ports:
- "5484:5432"
volumes:
- ./db-data:/var/lib/postgresql/data/pgdata
从站docker-compose.yml文件与主站保持一致,如果主从在同一台机器上则需要修改从站的容器名称和暴露出去的端口号
主站部署非首次部署
需要将主站数据复制到从站,可以使用pg_basebackup命令,或者使用rsync这类的复制命令
- 方式一:使用pg_basebackup命令
# 启动一个临时的从站服务docker容器,并将主站数据复制到从站
docker run -it --rm -e POSTGRES_PASSWORD=xxxx -e POSTGRES_USER=xxxx -e PGDATA=/var/lib/postgresql/data/pgdata -v ./db-data:/var/lib/postgresql/data/pgdata postgresql:14 -c "pg_basebackup -h 192.168.30.170 -p 5483 -D /var/lib/postgresql/data/pgdata -U replica -W -Fp -Xs -P -R"
- 方式二: 使用scp或者rsync
略...
2.主站配置
- 创建replica用户
# 进入中docker
docker exec -it 容器名称 bash
# 登入数据库
psql -U 用户名 -d 数据库名称
# 创建用户
CREATE ROLE replica WITH REPLICATION LOGIN PASSWORD 'xxxxxx';
- 在宿主机环境中编辑postgresql.conf文件
vim postgresql.conf
# 取消注释编辑或者在文件末尾加入以下参数
wal_level = replica
max_wal_senders = 32
wal_keep_size = 256
wal_sender_timeout = 60s
- 在宿主机环境中编辑pg_hba.conf
# 加入以下参数
host replication all all trust
# 或者
host replication replica 192.168.30.170/32 scram-sha-256
- 重启主站postgresql 容器
docker restart 容器名称
3.从站配置
- 编辑从站postgresql.conf
vim postgresql.conf
# 编辑下列参数或者直接在文末下列参数
max_connections = 1000 #必须大于主库的最大连接数
recovery_target_timeline = 'latest'
primary_conninfo = 'host=192.168.30.170 port=5483 user=replica password=xxxxxx'
hot_standby = on
max_standby_streaming_delay = 30s
wal_receiver_status_interval = 10s
hot_standby_feedback = on
max_wal_senders = 32
wal_keep_size = 256
wal_sender_timeout = 60s
- 以下配置请移除或注释
wal_level = replica
- 新建standby.signal
vim standby.signal
# 加入以下参数
standby_mode = on
- 重启从站postgresql 容器
docker restart 容器名称
4.最后在主站中数据发生了变化,查看从站中数据是否同步发送变化
此步骤过于简单,略。。。
postgresql 14 配置主从复制(实时备份,流复制)基于docker
https://www.diaoyc.cn//archives/postgresql-14-pei-zhi-zhu-cong-fu-zhi-shi-shi-bei-fen-liu-fu-zhi-ji-yu-docker