【发布时间】:2019-03-05 14:58:12
【问题描述】:
我想在 Google Cloud Platform 上的抢占式实例上运行一项服务。这些实例将位于负载均衡器后面。大多数请求需要不到 10 秒的时间来处理。
我无法修改服务本身,但在我可以配置的服务前面的同一图像上有一个 nginx 实例。
据我所知,在实例关闭前 30 秒向实例发送了 ACPI 软关闭信号,此时我希望它停止接收请求。
我可以创建一个 shutdown script 来重新配置 nginx 以停止将运行状况检查转发到服务,而是用自己的拇指向下响应,但这似乎有点 hacky,我觉得应该有更好的方法。 (说服务不健康也感觉有点不对劲——它只是想被从池中取出。)
告诉负载均衡器停止向该实例发送请求的适当方法是什么,以便它可以(希望)满足其当前请求,然后在同时没有收到任何新请求的情况下关闭?
┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
Preemptible instance │ │
│ │
│ │
│ │
│ │
┌─────────┐ │ ┌─────────┐ ┌─────────┐ │
│ Load │ │ │ /health │ some │ │ │
────▶│balancer │──────┼──▶│ nginx │──────────▶│ service │ │
│ │ │ │ /api/… │ │ │ │
└─────────┘ │ └─────────┘ └─────────┘ │
│ │
│ │
│ │
│ │─
│─
└ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
【问题讨论】:
-
您使用的是什么类型的实例组?
-
@night-gold 对于当前的非抢占式实例:托管、自动扩展和自动修复。
-
你的健康检查怎么样?一个简单的答案路径? nginx 200 OK?
-
是的。
proxy_passed 通过 nginx 发送到some_service回复 200 OK(如果一切正常)。 -
你的 nginx 是否处于优雅停止模式?
标签: google-cloud-platform google-cloud-load-balancer