欢迎光临
我们一直在努力

进阶实战】从单机跑通到高可用架构:我的全栈监控大屏性能与安全优化

问题

执行 docker compose up -d 启动后,docker ps 显示所有容器均为 Up 状态,但访问网站却返回 502。

Flask 日志:

Can't connect to MySQL server on 'db'

原因

Up ≠ 能用。

MariaDB 启动后要 20-30 秒加载数据、建索引。这段时间容器是 Up,但连不上。

而 depends_on 默认只等容器创建完成,不等它真的能干活——所以 Flask 启动时数据库还没好。

解决

给数据库加 healthcheck,让 Flask 等它健康了再启动。

1. MariaDB 加健康检查

db:
image: mariadb:latest
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
healthcheck:
test: ["CMD-SHELL", "mariadb-admin ping -h localhost -u root -p${DB_ROOT_PASSWORD} || exit 1"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s # 宽限期,避免误判

2. Flask 等它健康

dashboard_a:
build: .
depends_on:
db:
condition: service_healthy # 关键

3. 重启验证

docker compose down && docker compose up -d
docker compose ps

启动时会看到 my-mariadb (health: starting),30 秒后变 (healthy),Flask 才开始启动。

顺便:零停机滚动更新

有了健康检查,更新时可以逐个来:

# 先更新 A,B 继续扛流量
docker compose up -d –no-deps –build dashboard_a

# 等 A 健康后,再更新 B
docker compose up -d –no-deps –build dashboard_b

三个坑

坑 1:Up 是"进程活着",healthy 才是"能干活"。

坑 2:忘了 start_period,MariaDB 启动时的失败会被误判为 unhealthy,容器反复重启。

坑 3:healthcheck 里别硬编码密码,用 ${DB_ROOT_PASSWORD} 变量引用。

赞(0)
未经允许不得转载:171主机测评 » 进阶实战】从单机跑通到高可用架构:我的全栈监控大屏性能与安全优化
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址