docker postgresql17 主从复制
//启动主库容器
sudo docker run -d --name postgres -e TZ=Asia/Shanghai -e POSTGRES_USER=dev -e POSTGRES_PASSWORD=testPassword --restart always -p 5432:5432 -v /server/db/pg/data:/var/lib/postgresql/data postgres:17.5
//创建复制专用账号
sudo docker exec -it postgres psql -U dev -c "CREATE USER replicator WITH REPLICATION LOGIN PASSWORD 'testPassword';"
//修改 pg_hba.conf,放行复制连接
//docker exec postgres sh -c 'echo "host replication replicator 0.0.0.0/0 md5" >> /var/lib/postgresql/data/pg_hba.conf'
docker exec -it pg-primary bash
# 容器内执行:
echo "host replication replicator 0.0.0.0/0 md5" >> /var/lib/postgresql/data/pg_hba.conf
exit
//打开 WAL 流复制参数
docker exec postgres psql -U dev -c "ALTER SYSTEM SET wal_level = 'replica';"
docker exec postgres psql -U dev -c "ALTER SYSTEM SET max_wal_senders = 10;"
docker exec postgres psql -U dev -c "ALTER SYSTEM SET max_replication_slots = 10;"
docker exec postgres psql -U dev -c "ALTER SYSTEM SET hot_standby = 'on';"
//启主库让 WAL level 生效
docker restart postgres
//创建从库的文件目录
mkdir /server/db/pg_slave/data
//启动一个一次性容器,执行 pg_basebackup把主库数据写到 /server/db/pg_slave/data:
docker run --rm \
-e PGPASSWORD='testPassword' \
-v /server/db/pg_slave/data:/var/lib/postgresql/data \
postgres:17.5 \
pg_basebackup \
-h 127.0.0.1 \
-p 5432 \
-U replicator \
-D /var/lib/postgresql/data \
-Xs -P -R -v
//启动从库容器
docker run -d \
--name pg-replica \
-p 5433:5432 \
-v /server/db/pg_slave/data:/var/lib/postgresql/data \
-e POSTGRES_PASSWORD=testPassword \
-e TZ=Asia/Shanghai \
postgres:17.5
[参考]
pg16主备主从
留待后查,同时方便他人
联系我:ivesbao@163.com
联系我:ivesbao@163.com

浙公网安备 33010602011771号