健康检查
健康检查告诉 Zenavo 实例何时可以接收流量。部署时,新实例在旧实例旁边启动,只有新实例通过检查后才切换流量,这就是零停机发布的原理。
在 服务 → 设置 → 健康检查 中选择检查方式:
- 端口(默认):Zenavo 检查服务的第一个 TCP 或 HTTP 端口能否接受连接,每 10 秒一次,超时 5 秒,允许失败 3 次。没有这类端口的服务不做检查,启动后即视为就绪。
- HTTP:Zenavo 在服务的第一个 TCP 或 HTTP 端口(或你指定的端口)上请求一个路径,例如
/healthz。任何 2xx 或 3xx 响应都表示就绪。请求从集群内发出,所以镜像中不需要curl或wget。这是 Web 应用的最佳选择。 - 命令:在容器内运行的命令,例如
pg_isready -U postgres;退出码为 0 表示就绪。命令不经过 shell 运行,所以需要&&、|或$VARIABLES时请写成sh -c "…"。从控制台添加的数据库和许多模板都自带这种检查。
HTTP 和命令检查的时间参数可以调整:两次检查之间的间隔、单次检查的超时、实例被判定为不健康之前允许的失败次数(默认 6),以及容器启动后的启动等待时间(默认 10 秒)。启动较慢的应用,例如 Java 应用或启动时执行数据库迁移的应用,请调大启动等待时间。
在 manifest 中:
json
"healthcheck": { "http": { "path": "/healthz" }, "interval": 10, "timeout": 5, "retries": 6, "start_period": 10 }或者用 "command": ["pg_isready", "-U", "postgres"] 代替 "http"。
检查失败时
- 部署期间: 如果新实例持续无法通过检查,一旦可以确定,部署就会失败,并给出最后一次检查的原因(例如
HTTP probe failed with statuscode: 404)和实例最新的日志。旧实例继续提供服务。 - 部署之后: 不再通过检查的实例不会再接收流量,服务显示为 不健康。Zenavo 不会因为检查失败而重启它;请查看日志,然后重新部署或重启。
崩溃限制
如果服务反复崩溃,Zenavo 可以在重启一定次数(即崩溃限制)后暂停它,而不是无限重启。服务随后会显示提示;请查看日志,然后恢复服务或部署修复。