Shutdown Check

搜索文档

查找页面或章节

SC310:未撤回就绪状态

SC310(未撤回就绪状态)表示收到 SIGTERM 后直到截止时间,就绪检查路由仍然报告就绪。收到 SIGTERM 时应返回 503,或者停止监听。

SC310 表示收到 SIGTERM 之后,就绪检查路由仍在报告就绪。负载均衡器可能会继续把流量发给这个已经在关闭的实例。

诊断码SC310 FAIL
阶段排空流量
CLI 退出码1
含义开启 readinessWithdrawal 后,从收到 SIGTERM 一直到截止时间,就绪检查路由仍在返回就绪状态码。
输出信息
  • Readiness was not withdrawn before the shutdown deadline
首先检查收到 SIGTERM 时,让就绪检查路由返回 503(或者停止监听),这样负载均衡器就不再发送流量。

如何撤回就绪状态?

信号一到就设置一个排空标志,并让就绪检查路由返回表示未就绪的状态码:

let draining = false;
 
app.get("/health", (_request, response) => {
  response.sendStatus(draining ? 503 : 200);
});
 
process.on("SIGTERM", () => {
  draining = true;
  server.close();
});

关闭监听器也算撤回,因为就绪检查的连接会被拒绝。就绪检查请求超时则不算撤回,因为这会让流量状态变得不明确。

如何确认已修复?

时间线应在 signal sent 之后不久记录 readiness withdrawn。在可控的排空过程中手动测试这个路由,确认它从就绪状态码变成 503 或其他表示未就绪的状态码。

如果应用的状态变了,测试却没有观察到,检查 readiness.path 是否指向平台使用的同一个路由。