数据库的健康检查看起来就是 select 1,但它走哪个连接池、数据库卡住时多久放弃,都会改变探针的含义。这篇用真实的 PostgreSQL 和 gunicorn 逐项验证(健康检查接口的基本形态见第 179 篇,连接重连见第 100 篇)。
数据库正常:200 ready(8 ms) 数据库停掉:503 OperationalError(1 ms) 数据库重新启动后:200 ready(13 ms)
上一篇:Secret Key 轮换;下一篇:容器信号处理。
数据库是自己起的 PostgreSQL 实例(非默认端口);「卡住」的数据库用一个接受连接但不回应的本地端口模拟。
就绪检查走业务连接池(/ready-shared):HTTP 200 ready,2497 ms 就绪检查用独立的 1 连接小池(/ready-own):HTTP 200 ready,10 ms
连不上,不设 connect_timeout → 探针客户端 6 秒后放弃(TimeoutError) 连不上,connect_timeout=1 → HTTP 503 OperationalError,2002 ms 查询很慢,不设 statement_timeout → HTTP 200 ready,3013 ms 查询很慢,statement_timeout=500ms → HTTP 503 OperationalError,512 ms