第二台机器(默认端口)(读写分离 + 每日备份)
主库 5432,从库 5433,镜像走
docker-hk.loda.net.cn
每日 03:00 自动 dump 主库 →/mnt/disk5t/backup/(保留 7 天)
1. 目录准备
# SSD
sudo mkdir -p /srv/pg-ha/data
sudo chown -R $USER:$USER /srv/pg-ha
# HDD
sudo mkdir -p /mnt/disk5t/backup
sudo chown -R $USER:$USER /mnt/disk5t/backup
2. 文件清单(放进 /srv/pg-ha)
2.1 .env
POSTGRES_DB=appdb
POSTGRES_USER=appuser
POSTGRES_PASSWORD=AppUser123
REPL_USER=repl_user
REPL_PASS=ReplPass123
2.2 docker-compose.yml
version: "3.9"
services:
pg-primary:
image: docker-hk.loda.net.cn/bitnami/postgresql:latest
container_name: pg-primary
restart: unless-stopped
environment:
POSTGRESQL_DATABASE: ${POSTGRES_DB}
POSTGRESQL_USERNAME: ${POSTGRES_USER}
POSTGRESQL_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRESQL_REPLICATION_MODE: master
POSTGRESQL_REPLICATION_USER: ${REPL_USER}
POSTGRESQL_REPLICATION_PASSWORD: ${REPL_PASS}
volumes:
- /srv/pg-ha/data:/bitnami/postgresql
ports:
- "5432:5432"
networks:
- pg-net
pg-replica:
image: docker-hk.loda.net.cn/bitnami/postgresql:latest
container_name: pg-replica
restart: unless-stopped
environment:
POSTGRESQL_MASTER_HOST: pg-primary
POSTGRESQL_MASTER_PORT_NUMBER: 5432
POSTGRESQL_REPLICATION_MODE: slave
POSTGRESQL_REPLICATION_USER: ${REPL_USER}
POSTGRESQL_REPLICATION_PASSWORD: ${REPL_PASS}
POSTGRESQL_DATABASE: ${POSTGRES_DB}
POSTGRESQL_USERNAME: ${POSTGRES_USER}
POSTGRESQL_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- /mnt/disk5t/postgre-r:/bitnami/postgresql
ports:
- "5433:5432"
depends_on:
- pg-primary
networks:
- pg-net
# 每日备份服务
pg-backup:
image: docker-hk.loda.net.cn/bitnami/postgresql:latest
container_name: pg-backup
restart: unless-stopped
environment:
PGPASSWORD: ${POSTGRES_PASSWORD}
volumes:
- /mnt/disk5t/backup:/backup
command: |
bash -c '
echo "0 3 * * * pg_dump -h pg-primary -U ${POSTGRES_USER} ${POSTGRES_DB} | gzip > /backup/backup_$$(date +\%Y\%m\%d_\%H\%M\%S).sql.gz && find /backup -name "*.sql.gz" -mtime +7 -delete" | crontab -
crond -f'
depends_on:
- pg-primary
networks:
- pg-net
networks:
pg-net:
driver: bridge
3. 一键启动
cd /srv/pg-ha
docker compose up -d
4. 验证备份
# 手动触发一次
docker exec pg-backup bash -c 'pg_dump -h pg-primary -U appuser appdb | gzip > /backup/test.sql.gz'
# 查看文件
ls -lh /mnt/disk5t/backup/
5. 常用命令
# 看日志
docker compose logs -f pg-primary
docker compose logs -f pg-replica
docker compose logs -f pg-backup
# 停集群
docker compose down
完事! 默认端口 + 每日备份 + 自建镜像源,全齐了。