排水
在几种不同的场景中,Envoy 将尝试优雅地卸载连接。例如,在服务器关闭期间,可以阻止现有请求,并将监听器设置为停止接受请求,以减少服务器关闭时打开的连接数量。排水行为由服务器选项以及各个监听器配置定义。
排水发生在以下时间
服务器正在 热重启.
服务器通过 drain_listeners?graceful 管理端点开始优雅排水序列。
服务器已通过 healthcheck/fail 管理端点手动进行健康检查失败。有关更多信息,请参阅 健康检查过滤器 架构概述。
各个监听器正在通过 LDS 进行修改或删除。
默认情况下,Envoy 服务器将在服务器关闭时立即关闭监听器。要在服务器关闭之前将监听器排水一段时间,请使用 drain_listeners 关闭服务器。监听器将直接停止,没有任何优雅排水行为,并且立即停止接受新连接。
要在监听器关闭之前添加优雅排水时间段,请使用查询参数 drain_listeners?graceful。默认情况下,Envoy 会在一段时间内(由 --drain-time-s
确定)阻止请求,但在排水超时之前继续接受新连接。请求阻止的行为由排水管理器确定。
请注意,尽管排水是每个监听器的概念,但它必须在网络过滤器级别得到支持。目前,唯一支持优雅排水的过滤器是 Redis、Mongo、Thrift(如果启用了 envoy.reloadable_features.thrift_connection_draining
运行时功能)和 HTTP 连接管理器.
默认情况下,HTTP 连接管理器 过滤器将向 HTTP1 请求添加“Connection: close”,发送 HTTP2 GOAWAY,并在请求完成后终止连接(在延迟关闭时间段之后)。
每个 配置的监听器 都具有 drain_type 设置,该设置控制排水何时发生。当前支持的值为
- default
Envoy 将响应上述所有三种情况(管理健康检查失败、热重启和 LDS 更新/删除)来排水监听器。这是默认设置。
- modify_only
Envoy 将仅响应上述第 2 和第 3 种情况(热重启和 LDS 更新/删除)来排水监听器。此设置在 Envoy 承载入口和出口监听器时很有用。可能需要在出口监听器上设置modify_only,以便它们仅在修改期间排水,同时依靠入口监听器排水在尝试进行受控关闭时执行完整的服务器排水。