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