启用连接排空

连接排空过程旨在确保在从实例组中移除虚拟机或从区域 NEG 中移除端点时,为进行中的现有请求留出一定的时间,让这些请求可以完成。

如需启用连接排空功能,请为后端服务设置连接排空超时时间。超时持续时间必须介于 0 到 3600 秒之间。

在指定的超时持续时间内,系统会为对已移除虚拟机发出的现有请求留出一定的时间,让这些请求可以完成。负载平衡器不会向已移除的虚拟机发送新请求。达到超时持续时间之后,系统会关闭与该虚拟机的所有剩余连接。

每当您执行以下操作时,连接排空过程即会开始:

在指定的超时持续时间过后,系统可能需要长达 60 秒的时间才会终止实例。

如果在多项共享相同实例组或 NEG 的后端服务中启用连接排空功能,系统会使用最大超时值。例如,假设两项后端服务使用同一实例组或区域 NEG 作为后端,其中一项后端服务的连接排空超时时间为 100 秒,另一项后端服务的连接排空超时时间为 200 秒。Google Cloud 会使用 200 秒作为有效连接排空超时时间,这样现有连接就可以在被 Google Cloud 终止之前保留 200 秒。如果后端是托管实例组,则删除实例的操作至少延迟 200 秒。

规范

  • 连接排空适用于属于以下负载平衡器的后端服务:

  • 如果设置了连接排空超时时间,并且已从实例组中移除实例,或者已从区域 NEG 中移除端点,则 Google Cloud 负载平衡器会按以下方式运行:

    • 不会向已移除的实例或端点发送新连接。

    • 支持已移除实例或端点的现有连接的活跃 TCP 会话可以一直留存到配置的连接排空超时时间结束为止。超时时间结束后,Google Cloud 会终止已移除的实例或端点上的现有连接。

  • 如果您未设置连接排空超时时间,或者连接排空超时时间设为零 (0),Google Cloud 会尽快终止已移除实例或端点上的现有连接。

启用连接排空

控制台

  1. 转到 Google Cloud Console 中的“负载平衡”页面。
    转到“负载平衡”页面
  2. 点击您的负载平衡器对应的修改 按钮,或者创建新的负载平衡器。
  3. 点击后端配置
  4. 点击后端服务底部的高级配置
  5. 连接排空超时时间字段中,输入一个介于 03600 之间的值。将此值设为 0 表示停用连接排空。

gcloud

您可以使用 --connection-draining-timeout 标志,为新的或现有的后端服务启用连接排空。以下示例演示了如何更改连接排空超时时间:

  • 对于现有外部 HTTP(S) 负载平衡器、SSL 代理负载平衡器或 TCP 代理负载平衡器:

    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:在终止与实例或端点的现有连接之前等待的秒数,介于 03600 秒(含)之间。将此值设为 0 表示停用连接排空。 连接排空超时时间设置适用于后端服务的所有后端。

    您还可以使用 gcloud compute backend-services edit 命令更新现有后端服务。

API

如需在创建或更新实例或端点时在 API 中启用连接排空,请向相应的 API URI 发出请求,以在请求正文中添加 connectionDraining 字段。以下示例演示了如何通过修改现有后端服务来设置该属性。如需了解其他必需属性,请参阅每个负载平衡器对应的文档。

对于外部 HTTP(S) 负载平衡器、SSL 代理负载平衡器和 TCP 代理负载平衡器:

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 是包含您的负载平衡器的项目 ID。
  • BACKEND_SERVICE 是您的负载平衡器使用的后端服务。
  • CONNECTION_TIMEOUT_SECS 是从实例组或 NEG 中移除实例或端点之前等待的秒数,介于 0 到 3600 秒(含)之间。此超时持续时间适用于属于后端服务的所有实例组或 NEG。

后续步骤

如需了解后端服务的一般信息,请参阅后端服务概览