将外部直通式网络负载均衡器从目标池迁移到后端服务

本指南提供了有关如何将现有外部直通式网络负载均衡器从目标池后端迁移到区域级后端服务的说明。

迁移到区域后端服务后,您可以使用诸多功能,例如非旧版健康检查(TCP、SSL、HTTP、HTTPS、HTTP/2)、代管式实例组、连接排空故障切换政策


如需在 Google Cloud 控制台中直接遵循有关此任务的分步指导,请点击操作演示

操作演示


本指南将引导您迁移以下基于目标池的示例外部直通式网络负载均衡器以使用区域级后端服务。

之前:使用目标池的外部直通式网络负载均衡器
之前:使用目标池的外部直通式网络负载均衡器

生成的基于后端服务的外部直通式网络负载均衡器部署将如下所示。

之后:使用区域级后端服务的外部直通式网络负载均衡器
之后:使用区域级后端服务的外部直通式网络负载均衡器

此示例假定您有一个传统的基于目标池的外部直通式网络负载均衡器,并且在可用区 us-central-1aus-central-1c 各有两个实例。

这一转换所需的简要步骤如下:

  1. 将目标池实例按实例组进行分组。

    后端服务仅适用于代管式实例组或非代管式实例组。虽然单个目标池中的实例数量没有限制,但实例组具有大小上限。如果目标池中的实例数超过此上限,您需要将其后端拆分到多个实例组中。

    如果您的现有部署包含备用目标池,请为这些实例创建单独的实例组。此实例组将被配置为故障切换组。

  2. 创建区域级后端服务。

    如果您的部署包含备用目标池,则需要在创建后端服务时指定故障切换比率。此值应与先前为目标池部署配置的故障切换比率相匹配。

  3. 将之前创建的实例组添加到后端服务。

    如果您的部署包含备用目标池,请在将相应的故障切换实例组添加到后端服务时用 --failover 标志来标记它。

  4. 配置指向新后端服务的转发规则。

    您可以选择以下方式之一:

    • 更新现有转发规则以指向后端服务(推荐)。

    • 创建指向后端服务的新转发规则。这要求您为负载均衡器的前端创建新的 IP 地址。然后修改 DNS 设置,以从旧的基于目标池的负载均衡器的 IP 地址无缝转换到新的 IP 地址。

准备工作

安装 Google Cloud CLI。如需全面了解此工具,请参阅 gcloud 工具指南。您可以在 gcloud compute 命令组中找到与负载均衡相关的命令。

如果您之前未运行过 Google Cloud CLI,请先运行 gcloud init 进行身份验证。

本指南假定您熟悉 bash

确定要迁移的后端和转发规则

  1. 如需列出所有目标池,请在 Cloud Shell 中运行以下命令:

    gcloud compute target-pools list
    

    记下要从中迁移数据的目标池的名称;后面将以 TARGET_POOL_NAME 引用该名称。

  2. 如需列出目标池 TARGET_POOL_NAME 中的所有虚拟机实例,请在 Cloud Shell 中运行以下命令:

    gcloud compute target-pools describe TARGET_POOL_NAME \
      --region=us-central1
    

    记下虚拟机实例的名称;后面将以 BACKEND_INSTANCE1BACKEND_INSTANCE2BACKEND_INSTANCE3BACKEND_INSTANCE4 引用这些名称。

  3. 如需列出外部直通式网络负载均衡器中的转发规则,请在 Cloud Shell 中运行以下命令:

    gcloud compute forwarding-rules list
      --filter="target: ( TARGET_POOL_NAME )"
    

    记下转发规则的名称;后面将以 FORWARDING_RULE 引用该名称。

创建可用区非代管式实例组

为拥有后端的每个可用区创建一个可用区非代管式实例组。根据您的设置,您可以将实例分组为所需数量的实例组。在我们的示例中,我们仅使用两个实例组,每个实例组对应一个可用区,并将给定可用区中的所有后端虚拟机放在关联的实例组中。

在此示例中,我们创建两个实例组:一个位于 uc-central1-a 可用区,另一个位于 us-central1-c 可用区。

设置实例组

控制台

  1. 在 Google Cloud 控制台中,转到实例组页面。

    转到“实例组”

  2. 点击创建实例组
  3. 在左侧窗格中,选择新建非代管式实例组
  4. 对于名称,输入 ig-us-1
  5. 对于区域,请选择 us-central1
  6. 对于可用区,请选择 us-central1-a
  7. 根据实例所在的位置选择网络子网。在此示例中,现有目标池实例位于 default 网络和子网中。
  8. 如需将实例添加到实例组,请在虚拟机实例部分中选择 BACKEND_INSTANCE1BACKEND_INSTANCE2 这两个实例。
  9. 点击创建
  10. 重复上述步骤,创建具有如下设置的第二个实例组:

    • 名称ig-us-2
    • 区域us-central1
    • 可用区us-central1-c

    us-central1-c 可用区中的两个实例 BACKEND_INSTANCE3BACKEND_INSTANCE4 添加到此实例组。

  11. 如果您的现有负载均衡器部署还具有备用目标池,请重复这些步骤,为这些实例创建单独的故障切换实例组。

gcloud

  1. 使用 gcloud compute instance-groups unmanaged create 命令在 us-central1-a 可用区中创建一个非代管式实例组。

    gcloud compute instance-groups unmanaged create ig-us-1 \
        --zone us-central1-a
    
  2. us-central1-c 可用区中创建第二个非代管式实例组。

    gcloud compute instance-groups unmanaged create ig-us-2 \
        --zone us-central1-c
    
  3. 将实例添加到 ig-us-1 实例组。

    gcloud compute instance-groups unmanaged add-instances ig-us-1 \
        --instances BACKEND_INSTANCE_1,BACKEND_INSTANCE_2 \
        --zone us-central1-a
    
  4. 将实例添加到 ig-us-2 实例组。

    gcloud compute instance-groups unmanaged add-instances ig-us-2 \
        --instances BACKEND_INSTANCE_3,BACKEND_INSTANCE_4 \
        --zone us-central1-c
    
  5. 如果您的现有负载均衡器部署还具有备用目标池,请重复这些步骤,为这些实例创建单独的故障切换实例组。

创建健康检查

创建健康检查以确定实例组中实例的健康状况。现有基于目标池的外部直通式网络负载均衡器可能关联了旧版 HTTP 健康检查。

您可以创建一个与负载均衡器将分发的流量的协议相匹配的新健康检查。基于后端服务的外部直通式网络负载均衡器可以使用 TCP、SSL、HTTP(S) 和 HTTP/2 健康检查

控制台

  1. 在 Google Cloud 控制台中,转到健康检查页面。

    转到“健康检查”

  2. 点击创建健康检查
  3. 名称字段中,输入 network-lb-health-check
  4. 范围设置为区域
  5. 对于区域,请选择 us-central1
  6. 对于协议,选择 HTTP
  7. 对于端口,请输入 80
  8. 点击创建

gcloud

  1. 在此示例中,我们创建将与后端服务搭配使用的非旧版 HTTP 健康检查。

    gcloud compute health-checks create http network-lb-health-check \
    --region us-central1 \
    --port 80
    

配置后端服务

根据以下部分之一创建后端服务。如果现有的外部直通式网络负载均衡器具有备用目标池,您将需要在创建后端服务时配置故障切换比率。

将后端添加到后端服务时,您还需要使用 --failover 标志指定故障切换实例组。

没有备用目标池的部署

gcloud

  1. us-central1 区域中创建区域后端服务。

    gcloud compute backend-services create network-lb-backend-service \
       --region us-central1 \
       --health-checks network-lb-health-check \
       --health-checks-region us-central1 \
       --protocol TCP
    
  2. 将两个实例组(ig-us-1ig-us-2)作为后端添加到该后端服务。

    gcloud compute backend-services add-backend network-lb-backend-service \
       --instance-group ig-us-1 \
       --instance-group-zone us-central1-a \
       --region us-central1
    
    gcloud compute backend-services add-backend network-lb-backend-service \
       --instance-group ig-us-2 \
       --instance-group-zone us-central1-c \
       --region us-central1
    

有备用目标池的部署

gcloud

  1. us-central1 区域中创建区域后端服务。配置后端服务故障切换比率,需匹配先前为目标池配置的故障切换比率。

    gcloud compute backend-services create network-lb-backend-service \
       --region us-central1 \
       --health-check network-lb-health-check \
       --failover-ratio 0.5
    
  2. 将两个实例组(ig-us-1ig-us-2)作为后端添加到该后端服务。

    gcloud compute backend-services add-backend network-lb-backend-service \
       --instance-group ig-us-1 \
       --instance-group-zone us-central1-a \
       --region us-central1
    
    gcloud compute backend-services add-backend network-lb-backend-service \
       --instance-group ig-us-2 \
       --instance-group-zone us-central1-c \
       --region us-central1
    
  3. 如果创建了故障切换实例组,请将其添加到后端服务。在将此后端添加到后端服务时,用 --failover 标志标记此后端。

    gcloud compute backend-services add-backend network-lb-backend-service \
       --instance-group FAILOVER_INSTANCE_GROUP \
       --instance-group-zone ZONE \
       --region us-central1 \
       --failover
    

配置转发规则

您可以通过以下两种方式配置转发规则,以将流量定向到新的后端服务。您可以更新现有转发规则,也可以使用新的 IP 地址创建新的转发规则。

使用 set-target 标志将现有转发规则更新为指向新的后端服务。

gcloud compute forwarding-rules set-target FORWARDING_RULE  \
    --backend-service network-lb-backend-service \
    --region us-central1

FORWARDING_RULE 替换为现有转发规则的名称。

创建新的转发规则

如果您不想更新现有转发规则,则可以使用新的 IP 地址创建新的转发规则。由于给定的 IP 地址一次只能与一个转发规则关联,因此您需要手动修改 DNS 设置,以将传入流量从旧 IP 地址转移到新 IP 地址。

通过以下命令使用新的 IP 地址创建新转发规则。如果您想指定已在 us-central1 区域预留的 IP 地址,可以使用 --address 标志。

gcloud compute forwarding-rules create network-lb-forwarding-rule \
    --load-balancing-scheme external \
    --region us-central1 \
    --ports 80 \
    --backend-service network-lb-backend-service

测试负载均衡器

测试负载均衡器以确认转发规则是否按预期定向传入流量。

查询负载均衡器的外部 IP 地址

gcloud

输入以下命令,查看负载均衡器使用的 network-lb-forwarding-rule 转发规则的外部 IP 地址。

gcloud compute forwarding-rules describe network-lb-forwarding-rule
    --region us-central1

使用 nc 命令访问外部 IP 地址

在此示例中,我们采用会话亲和性的默认哈希方法,因此 nc 命令发出的请求将根据您的操作系统分配的来源端口随机分配到后端虚拟机。

  1. 如需测试连接,请先运行以下命令以在 Linux 上安装 Netcat:

    $ sudo apt install netcat
    
  2. 重复下面的命令几次,直到所有后端虚拟机都做出响应:

    $ nc IP_ADDRESS 80
    

移除与旧负载均衡器关联的资源

确认新的外部直通式网络负载均衡器可按预期工作后,您便可以删除旧的目标池资源。

  1. 在 Google Cloud 控制台中,转到负载均衡页面。

    进入“负载均衡”

  2. 选择与目标池关联的旧负载均衡器,然后点击删除
  3. 选择您创建的健康检查,然后点击删除负载均衡器及所选资源

后续步骤