连接排空过程旨在确保在从实例组中移除虚拟机或从区域 NEG 中移除端点时,为进行中的现有请求留出一定的时间,让这些请求可以完成。
如需启用连接排空功能,请为后端服务设置连接排空超时时间。超时持续时间必须介于 0 到 3600 秒之间(含边界值)。
在指定的超时持续时间内,系统会为对已移除虚拟机或端点发出的现有请求留出一定的时间,让这些请求可以完成。负载平衡器不会向已移除的虚拟机发送新请求。达到超时持续时间之后,系统会关闭与该虚拟机的所有剩余连接。
每当您执行以下操作时,连接排空过程即会开始:
- 您手动从实例组中移除虚拟机。
- 您可以通过执行
resize()
、deleteInstances()
、recreateInstances()
或abandonInstances()
调用从托管实例组中移除实例。 - Google Cloud 在自动扩缩过程中删除实例。
- 您使用托管实例组更新程序执行对托管实例组的更新。
- 您手动从区域 NEG 中移除端点。
在指定的超时持续时间过后,系统可能需要长达 60 秒的时间才会终止实例。
如果在多项共享相同实例组或 NEG 的后端服务中启用连接排空功能,系统会使用最大超时值。例如,假设两项后端服务使用同一实例组或区域 NEG 作为后端,其中一项后端服务的连接排空超时时间为 100 秒,另一项后端服务的连接排空超时时间为 200 秒。Google Cloud 会使用 200 秒作为有效连接排空超时时间,这样现有连接就可以在被 Google Cloud 终止之前保留 200 秒。如果后端是托管实例组,则删除实例的操作至少延迟 200 秒。
规范
连接排空适用于属于以下负载平衡器的后端服务:
连接排空也适用于 Traffic Director 部署中的后端服务。
设置连接排空超时并且从实例组移除实例或从可用区 NEG 移除端点后,Google Cloud 负载平衡器和 Traffic Director 的行为如下:
不会向已移除的实例或端点发送新连接。
支持已移除实例或端点的现有连接的活跃 TCP 会话可以一直留存到配置的连接排空超时时间结束为止。超时时间结束后,Google Cloud 会终止已移除的实例或端点上的现有连接。
如果您未设置连接排空超时时间,或者连接排空超时时间设为零 (0),Google Cloud 会尽快终止已移除实例或端点上的现有连接。
启用连接排空
控制台
更新负载平衡器
- 转到 Google Cloud Console 中的“负载平衡”页面。
转到“负载平衡” - 点击您的负载平衡器对应的修改 按钮,或者创建新的负载平衡器。
- 点击后端配置。
- 点击后端服务底部的高级配置。
- 在连接排空超时时间字段中,输入一个介于
0
到3600
之间的值。将此值设为0
表示停用连接排空。
更新 Traffic Director
- 转到 Cloud Console 中的 Traffic Director 页面。
转到 Traffic Director - 点击您的服务的名称。
- 点击服务底部的高级配置。
- 在连接排空超时时间字段中,输入一个介于
0
到3600
之间的值。将此值设为0
表示停用连接排空。 - 点击保存。
gcloud
您可以使用 --connection-draining-timeout
标志,为新的或现有的后端服务启用连接排空。以下示例演示了如何更改连接排空超时时间:
对于现有外部 HTTP(S) 负载平衡器、SSL 代理负载平衡器、TCP 代理负载平衡器或 Traffic Director 部署:
gcloud compute backend-services update BACKEND_SERVICE \ --global \ --connection-draining-timeout=CONNECTION_TIMEOUT_SECS
对于现有网络负载平衡器,内部 TCP/UDP 负载平衡器或内部 HTTP(S) 负载平衡器:
gcloud compute backend-services update BACKEND_SERVICE \ --region=REGION \ --connection-draining-timeout=CONNECTION_TIMEOUT_SECS
请将占位符替换为有效值:
- BACKEND_SERVICE:要更新的后端服务。
CONNECTION_TIMEOUT_SECS:与实例或端点的现有连接终止前等待的秒数,介于
0
到3600
秒之间(含边界值)。将此值设为0
表示停用连接排空。 连接排空超时时间设置适用于后端服务的所有后端。您还可以使用
gcloud compute backend-services edit
命令更新现有后端服务。
API
如需在创建或更新实例或端点时在 API 中启用连接排空,请向相应的 API URI 发出请求,以在请求正文中添加 connectionDraining
字段。以下示例演示了如何通过修改现有后端服务来设置该属性。如需了解其他必需属性,请参阅每个负载平衡器对应的文档。
对于外部 HTTP(S) 负载平衡器、SSL 代理负载平衡器、TCP 代理负载平衡器和 Traffic Director:
PATCH https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices
对于网络负载平衡器,内部 TCP/UDP 负载平衡器和内部 HTTP(S) 负载平衡器:
PATCH https://www.googleapis.com/compute/v1/projects/PROJECT_ID/region/REGION/backendServices
{
"name": "BACKEND_SERVICE",
"connectionDraining": {
"drainingTimeoutSec": CONNECTION_TIMEOUT_SECS
}
}
其中:
PROJECT_ID
是包含负载平衡器或 Traffic Director 部署的项目 ID。BACKEND_SERVICE
是负载平衡器或 Traffic Director 部署使用的后端服务。CONNECTION_TIMEOUT_SECS
是实例或端点从实例组或 NEG 移除前等待的秒数,介于 0 到 3600 秒之间(含边界值)。此超时持续时间适用于后端服务引用的所有实例组或 NEG。
后续步骤
如需了解后端服务的一般信息,请参阅后端服务概览。