将网络负载平衡器从目标池转换为后端服务

本指南说明如何将现有网络负载平衡器从目标池后端转换为区域后端服务。

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

本指南将引导您将以下示例基于目标池的网络负载平衡器转换为使用区域后端服务。

使用目标池的网络负载平衡器
之前:具有目标池的网络负载平衡

生成的基于后端服务的网络负载平衡器部署将如下所示。

使用区域后端服务的网络负载平衡器
之后:具有区域性后端服务的网络负载平衡

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

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

  1. 将目标池实例分组到实例组中。
    后端服务仅适用于代管式实例组或非代管式实例组。请注意,单个目标池中的实例数量没有限制,但实例组具有大小上限。如果目标池中的实例数超过此上限,您需要将其后端拆分到多个实例组中。
    如果您的现有部署包含备份目标池,请为这些实例创建单独的实例组。此实例组将配置为故障转移组。
  2. 创建区域后端服务。
    如果您的部署包含备份目标池,则需要在创建后端服务时指定故障转移比率。此值应与先前为目标池部署配置的故障转移比率相匹配。
  3. 将之前创建的实例组添加到后端服务。
    如果您的部署包含备份目标池,请在将相应的故障转移实例组添加到后端服务时用 --failover 标志来标记它。
  4. 配置指向新后端服务的转发规则。
    您有两种选择:
    • 推荐)更新现有转发规则以指向后端服务。
    • 创建指向后端服务的新转发规则。这要求您为负载平衡器的前端创建新的 IP 地址。然后修改 DNS 设置,以从旧的基于目标池的负载平衡器的 IP 地址无缝转换到新的 IP 地址。

准备工作

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

如果您之前未运行过 gcloud 命令行工具,请先运行 gcloud init 进行身份验证。

本指南假定您熟悉 bash

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

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

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

设置实例组

Cloud Console

  1. 在 Cloud Console 中,转到实例组页面。

    转到“实例组”页面

  2. 点击创建实例组
  3. 选择左侧的新建非托管式实例组
  4. 名称输入 ig-us-1
  5. 位置下方,选择单个区域
  6. 对于地区,请选择 us-central1
  7. 对于区域,请选择 us-central1-a
  8. 根据实例所在的位置选择网络子网。在此示例中,现有目标池实例位于 default 网络和子网中。
  9. 虚拟机实例下,选择要添加到此实例组的两个实例。
  10. 点击创建
  11. 重复上述步骤,使用以下规范创建第二个实例组:
    • 名称ig-us-2
    • 地区us-central1
    • 可用区us-central1-cus-central1-c 可用区中的两个实例添加到此实例组。
  12. 如果您的现有负载平衡器部署还具有备用目标池,请重复这些步骤,为这些实例创建单独的故障转移实例组。

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. 转到 Cloud Console 中的运行状况检查页面。

    转到“运行状况检查”页面

  2. 输入名称
  3. 范围设置为区域
  4. 对于区域,选择 us-central1
  5. 对于协议,选择 HTTP
  6. 对于端口,输入 80
  7. 点击创建

gcloud

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

    gcloud compute health-checks create http http-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 http-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 http-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 network-lb-forwarding-rule  \
    --backend-service network-lb-backend-service \
    --region us-central1

创建新的转发规则

如果您不想更新现有转发规则,则可以使用新的 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 命令发出的请求将根据您的操作系统分配的来源端口随机分配到后端虚拟机。

重复该命令几次,直到所有后端虚拟机都做出响应。

$ nc IP_ADDRESS 80

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

确认新的网络负载平衡器可按预期工作后,您可以删除旧的目标池资源和旧的转发规则(如适用)。

后续步骤