2.5 KiB
2.5 KiB
HA 部署与验证 Runbook(Phase 3 MVP)
本文档对应 docker-compose.ha.yml,用于本地/测试环境验证高可用基础能力。
1. 启动方式
docker compose -f docker-compose.yml -f docker-compose.ha.yml up -d
说明:
- 基础业务服务仍来自
docker-compose.yml。 docker-compose.ha.yml覆盖了db、redis,并新增db-replica、postgres-backup、redis-replica、redis-sentinel-*。
2. 核心环境变量建议
在 backend/.env(或 shell 环境)中至少配置:
# PostgreSQL
POSTGRES_USER=dreamweaver
POSTGRES_PASSWORD=dreamweaver_password
POSTGRES_DB=dreamweaver_db
POSTGRES_REPMGR_PASSWORD=repmgr_password
# Redis Sentinel
REDIS_SENTINEL_ENABLED=true
REDIS_SENTINEL_NODES=redis-sentinel-1:26379,redis-sentinel-2:26379,redis-sentinel-3:26379
REDIS_SENTINEL_MASTER_NAME=mymaster
REDIS_SENTINEL_DB=0
REDIS_SENTINEL_SOCKET_TIMEOUT=0.5
# 可选:若 Sentinel/Redis 设置了密码
REDIS_SENTINEL_PASSWORD=
# 备份周期,默认 86400 秒(1 天)
BACKUP_INTERVAL_SECONDS=86400
3. 健康检查
3.1 PostgreSQL 主从
docker compose -f docker-compose.yml -f docker-compose.ha.yml ps
docker exec -it dreamweaver_db_primary psql -U dreamweaver -d dreamweaver_db -c "select now();"
docker exec -it dreamweaver_db_replica psql -U dreamweaver -d dreamweaver_db -c "select pg_is_in_recovery();"
期望:
- 主库可读写;
- 从库
pg_is_in_recovery()返回t。
3.2 Redis Sentinel
docker exec -it dreamweaver_redis_sentinel_1 redis-cli -p 26379 sentinel masters
docker exec -it dreamweaver_redis_sentinel_1 redis-cli -p 26379 sentinel replicas mymaster
期望:
mymaster存在;- 至少 1 个 replica 被发现。
3.3 备份任务
docker exec -it dreamweaver_postgres_backup sh -c "ls -lh /backups"
期望:
/backups下出现.dump文件;- 旧于 7 天的备份会被自动清理。
4. 故障切换演练(最小)
# 模拟 Redis 主节点故障
docker stop dreamweaver_redis_master
# 等待 Sentinel 选主后查看
docker exec -it dreamweaver_redis_sentinel_1 redis-cli -p 26379 sentinel get-master-addr-by-name mymaster
提示:应用与 Celery 已支持 Sentinel 配置。若未启用 Sentinel,仍可回退到 REDIS_URL / CELERY_BROKER_URL / CELERY_RESULT_BACKEND 直连模式。
5. 当前已知限制(下一步)
- PostgreSQL 侧当前仅完成主从拓扑,读写分离(PgBouncer/路由)待后续迭代。