目标
- 部署多个启用了自动调节功能的区域 Compute Engine 托管式实例组。
- 创建跨区域负载均衡器。
- 生成来自全球不同区域的测试流量。
- 使用 Google Cloud 控制台直观呈现负载均衡器如何路由请求以及实例组如何通过自动扩缩来满足需求。
费用
本教程使用 Google Cloud 的计费组件,包括:- Compute Engine
准备工作
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine API.
应用架构
应用包括以下 Compute Engine 组件:
- 实例模板:用于在实例组中创建每个实例的模板。
- 实例组:根据传入流量进行自动调节的多个实例组。
- 负载均衡器:在实例组之间分配流量的 HTTP 负载均衡器。
- 实例:生成来自全球不同区域的测试流量的多个测试实例。
设置 Web 服务
创建实例组
控制台
为实例组创建网络。
在 Google Cloud 控制台中,转到 VPC 网络页面。
点击创建 VPC 网络。
将名称设置为
fortressnet
。将子网创建模式设置为自动。
点击该页面底部的创建。
为该网络创建防火墙规则。此规则将允许发送到您的实例的所有 HTTP 请求。
在 Google Cloud 控制台中,转到防火墙规则页面。
点击创建防火墙规则。
将名称设置为
fortressnet-allow-http
。对于网络,请选择
fortressnet
。对于目标,请选择
All instances in the network
。将来源 IPv4 范围设置为
0.0.0.0/0
。在协议和端口字段中,选择指定的协议和端口,然后选择 tcp 复选框并输入
80
。点击创建。
创建实例模板。包含在每个实例上启动一个简单的 Apache 网络服务器的启动脚本。
在 Google Cloud 控制台中,转到实例模板页面。
点击创建实例模板。
将名称设置为
fort-template
。在机器配置字段中,选择
e2-micro
(2 个 vCPU,1 GB 内存)。在高级选项部分中,展开网络,然后执行以下操作:
- 在网络接口部分中,展开网络接口以进行修改。
- 对于网络,请选择
fortressnet
。
在管理部分的自动化字段中,输入以下启动脚本:
apt update && apt -y install apache2
点击创建。
使用实例模板创建多个区域托管实例组。为每个实例组配置自动扩缩。
在 Google Cloud 控制台中,转到实例组页面。
点击创建实例组以创建新的托管实例组。
选择新的托管式实例组(无状态)。
将名称设置为
us-central1-pool
。对于实例模板,请选择
fort-template
。对于位置,选择多个可用区。
对于区域,选择
us-central1
。对于可用区,将预定义值保留为选中状态。对于自动扩缩模式,选择开启:在实例组中添加和移除实例。
将最小实例数设置为
1
。将最大实例数设置为
5
。在自动扩缩信号字段中,修改默认选项(CPU 利用率),并将信号类型设置为 HTTP 负载均衡利用率。
将目标 HTTP 负载均衡利用率设置为
80
。点击完成。
点击创建。对话框中的消息显示,您还必须将该实例组分配给 HTTP 负载均衡器的后端服务。
在确认对话框中,点击确认。 您可以在创建所有实例组后配置负载均衡器。
重复这些步骤,创建另外两个具有不同名称的实例组:
- 创建一个名称为
europe-west1-pool
且区域为europe-west1
的组。 - 创建一个名称为
asia-east1-pool
且区域为asia-east1
的组。
- 创建一个名称为
(可选)验证实例是否正常运行并且传送 HTTP 流量。测试一个或多个实例的外部 IP 地址。您可能需要等待一分钟,让实例完成启动过程。
在 Google Cloud 控制台中,转到虚拟机实例页面。
确认每个正在运行的实例在实例组名称旁的状态列中都有绿色对勾标记。
复制实例的外部 IP 并将其粘贴到网络浏览器中。
您应该会看到“Apache2 Debian Default Page”网页。
如果未出现该内容,请等待片刻。
gcloud
为实例组创建网络。
gcloud compute networks create fortressnet --subnet-mode auto
为该网络创建防火墙规则。此规则将允许发送到您的实例的所有 HTTP 请求。
gcloud compute firewall-rules create fortressnet-allow-http \ --network fortressnet \ --allow tcp:80
创建实例模板。在其中添加用于在每个实例上启动一个简单的 Apache Web 服务器的启动脚本。
gcloud compute instance-templates create fort-template \ --machine-type e2-micro \ --network fortressnet \ --metadata startup-script='apt update && apt -y install apache2'
使用实例模板创建多个区域托管实例组。为每个实例组配置自动扩缩。
gcloud compute instance-groups managed create us-central1-pool \ --region us-central1 \ --template fort-template \ --size 1 gcloud compute instance-groups managed set-autoscaling us-central1-pool \ --region us-central1 \ --min-num-replicas 1 \ --max-num-replicas 5 \ --scale-based-on-load-balancing \ --target-load-balancing-utilization .8
gcloud compute instance-groups managed create europe-west1-pool \ --region europe-west1 \ --template fort-template \ --size 1 gcloud compute instance-groups managed set-autoscaling europe-west1-pool \ --region europe-west1 \ --min-num-replicas 1 \ --max-num-replicas 5 \ --scale-based-on-load-balancing \ --target-load-balancing-utilization .8
gcloud compute instance-groups managed create asia-east1-pool \ --region asia-east1 \ --template fort-template \ --size 1 gcloud compute instance-groups managed set-autoscaling asia-east1-pool \ --region asia-east1 \ --min-num-replicas 1 \ --max-num-replicas 5 \ --scale-based-on-load-balancing \ --target-load-balancing-utilization .8
(可选)验证实例是否正常运行并且传送 HTTP 流量。测试一个或多个实例的外部 IP 地址。您可能需要等待一分钟,让实例完成启动过程。
列出您的实例。
gcloud compute instances list
在
STATUS
列验证实例是否RUNNING
。通过在
EXTERNAL_IP
列查询实例的 IP 地址来检查实例。curl http://EXTERNAL_IP | head
您应该会看到一些 HTML 文本,包括行
<title>Apache2 Debian Default Page: It works</title>
。如果未出现该内容,请等待片刻。
配置负载均衡器
负载均衡器将在您的多个后端之间分配客户端请求。
控制台
开始配置
在 Google Cloud 控制台中,转到负载均衡页面。
- 点击创建负载均衡器。
- 在负载均衡器的类型字段中,选择应用负载均衡器 (HTTP/HTTPS),然后点击下一步。
- 在公共或内部字段中,选择公共(外部),然后点击下一步。
- 在全球或单个区域部署字段中,选择最适合全球性工作负载,然后点击下一步。
- 在负载均衡器世代字段中,选择全球外部应用负载均衡器,然后点击下一步。
- 点击配置。
基本配置
- 将负载均衡器名称设置为
fortressnet-balancer
。
后端配置
- 在创建全球外部应用负载均衡器页面上,点击后端配置。
- 在创建或选择后端服务和后端存储桶下拉菜单中,选择后端服务,然后选择创建后端服务。您应该会看到创建后端服务对话框。
- 将后端服务的名称设置为
fortressnet-backend-service
。 - 在新建后端对话框下,将实例组设置为
asia-east1-pool
。 - 对于平衡模式,请选择速率。
- 将 RPS 上限设置为每个实例
100
RPS。 - 点击完成。
- 点击添加后端。
- 在新建后端对话框下,将实例组设置为
europe-west1-pool
。 - 对于平衡模式,请选择速率。
- 将 RPS 上限设置为每个实例
100
RPS。 - 点击完成。
- 点击添加后端。
- 在新建后端对话框下,将实例组设置为
us-central1-pool
。 - 对于平衡模式,请选择速率。
- 将 RPS 上限设置为每个实例
100
RPS。 - 点击完成。
- 在健康检查中,选择创建健康检查。
- 将名称设置为
http-basic-check
。 - 对于协议,请选择
HTTP
。 - 将端口设置为
80
。 - 点击保存并继续。
- 点击创建。
宿主机和路径规则
- 在创建全球外部应用负载均衡器页面的左侧面板中,点击主机和路径规则。
在本示例中,由于所有流量均将采用默认规则,我们无需配置任何主机或路径规则。因此,我们可以接受预填充的默认值。
前端配置
- 在创建全球外部应用负载均衡器页面的左侧面板中,点击前端配置。
- 将名称设置为
fortressnet-http-rule
。 - 对于 IP 版本,请选择 IPv4。
- 对于 IP 地址,请选择创建 IP 地址。
- 在保留新的静态 IP 对话框中,将名称设置为
fortressnet-ip
。 - 点击保留并稍等片刻。
- 点击新建前端 IP 和端口对话框底部的完成。
- 点击添加前端 IP 和端口。
- 将名称设置为
fortressnet-http-ipv6-rule
。 - 对于 IP 版本,请选择 IPv6。
- 对于 IP 地址,请选择创建 IP 地址。
- 在对话框中,将名称设置为
fortressnet-ipv6
。 - 点击保留并稍等片刻。
- 点击新建前端 IP 和端口对话框底部的完成。
检查并最终确定
- 在创建全球外部应用负载均衡器页面的左侧面板中,点击检查并最终确定。
- 将设置与您打算创建的内容进行比较。
- 如果设置正确,请点击左侧面板底部的创建。您将返回到“负载均衡”屏幕。创建负载均衡器后,其旁边的绿色对勾标记表示它正在运行。
gcloud
后端配置
创建基本健康检查。这将检查负载均衡器后端是否对 HTTP 请求做出响应。
gcloud compute health-checks create http http-basic-check
创建全局后端服务。此后端服务将接收来自负载均衡器的 HTTP 流量。
gcloud compute backend-services create fortressnet-backend-service \ --protocol HTTP \ --health-checks http-basic-check \ --global
将实例组添加为后端服务的区域后端。此配置将根据每个实例的最大每秒请求数 (RPS) 在后端之间分配流量。
gcloud compute backend-services add-backend fortressnet-backend-service \ --balancing-mode RATE \ --max-rate-per-instance 100 \ --instance-group us-central1-pool \ --instance-group-region us-central1 \ --global gcloud compute backend-services add-backend fortressnet-backend-service \ --balancing-mode RATE \ --max-rate-per-instance 100 \ --instance-group europe-west1-pool \ --instance-group-region europe-west1 \ --global gcloud compute backend-services add-backend fortressnet-backend-service \ --balancing-mode RATE \ --max-rate-per-instance 100 \ --instance-group asia-east1-pool \ --instance-group-region asia-east1 \ --global
主机和路径规则
定义网址映射。网址映射会将不同的网址路由到不同的后端服务。由于我们只有一个后端服务,因此我们只需将该后端服务设置为所有网址的默认服务即可。
gcloud compute url-maps create fortressnet-balancer \ --default-service fortressnet-backend-service
创建 HTTP 代理路由。HTTP 代理路由接受 HTTP 请求,并根据您的网址映射路由它们。在这种情况下,它会将所有请求发送到您的单个后端服务。
gcloud compute target-http-proxies create fortressnet-http-proxy \ --url-map fortressnet-balancer
前端配置
创建两个全局静态外部 IP 地址:一个用于 IPv4,另一个用于 IPv6。它们将成为负载均衡器的全局外部 IP 地址。
gcloud compute addresses create fortressnet-ip \ --ip-version IPV4 \ --network-tier=PREMIUM \ --global gcloud compute addresses create fortressnet-ipv6 \ --ip-version IPV6 \ --network-tier=PREMIUM \ --global
查询负载均衡器的外部 IP 地址。
gcloud compute addresses list
创建外部 IP 地址的全局转发规则。这会将 IPv4 和 IPv6 HTTP 请求均转发到您的 HTTP 代理。
gcloud compute forwarding-rules create fortressnet-http-rule \ --load-balancing-scheme=EXTERNAL \ --network-tier=PREMIUM \ --global \ --target-http-proxy fortressnet-http-proxy \ --ports 80 \ --address LOAD_BALANCER_IP_ADDRESS
gcloud compute forwarding-rules create fortressnet-http-ipv6-rule \ --load-balancing-scheme=EXTERNAL \ --network-tier=PREMIUM \ --global \ --target-http-proxy fortressnet-http-proxy \ --ports 80 \ --address LOAD_BALANCER_IPV6_ADDRESS
(可选)验证负载均衡器是否正常工作。您可能需要等待一到三分钟。
控制台
在 Google Cloud 控制台中,转到负载均衡页面。
等待
fortressnet-balancer
的后端列下出现一个绿色的对勾标记。点击
fortressnet-balancer
。在前端下复制 IP:端口列下的 IPv4 地址。(IPv4 地址的格式为
www.xxx.yyy.zzz
。您不需要末尾的端口号:nn
。)如果缺少前端部分,请等待片刻,然后重新加载该网页。在网络浏览器中输入 IP 地址。
您应该会看到“Apache2 Debian Default Page”网页。
如果显示“错误 404(找不到)”网页,请再等待几分钟。
gcloud
查询负载均衡器的外部 IP 地址。
gcloud compute addresses list
查询 IPv4 地址。(IPv4 地址的格式为
www.xxx.yyy.zzz
。)curl http://LOAD_BALANCER_IP_ADDRESS | head
您应该会看到一些 HTML 文本,包括行 <title>Apache2 Debian Default Page: It works</title>
。
如果显示 <title>Error 404 (Not Found)!!1</title>
,请再等待几分钟。
最佳做法:创建安全防火墙,仅允许来自负载均衡器和健康检查的内部流量。然后删除允许任何 HTTP 请求的原始防火墙。这可以防止外部客户端访问各个实例。
控制台
创建新的防火墙,仅允许来自负载均衡器和健康检查的流量。
在 Google Cloud 控制台中,转到防火墙规则页面。
点击创建防火墙规则。
将名称设置为
fortressnet-allow-load-balancer
。对于网络,请选择
fortressnet
。对于目标,请选择
All instances in the network
。在来源 IP 地址范围部分,键入
130.211.0.0/22
并按 Enter 键,然后键入35.191.0.0/16
并再次按 Enter 键。在协议和端口下,选择 tcp 并输入
80
。点击创建。
删除旧的全部允许防火墙。
- 选中
fortressnet-allow-http
旁边的复选标记。 - 点击页面顶部的删除。
- 在对话框中,点击删除。
- 选中
gcloud
创建新的防火墙,仅允许来自负载均衡器和健康检查的流量。
gcloud compute firewall-rules create fortressnet-allow-load-balancer \ --network fortressnet \ --source-ranges 130.211.0.0/22,35.191.0.0/16 \ --allow tcp:80
删除旧的全部允许防火墙。
gcloud compute firewall-rules delete fortressnet-allow-http -q
(可选)验证自动扩缩和负载均衡功能是否正常运行
生成一些测试流量
假设现在是欧洲的早晨,您的 Web 服务突然人气暴增。从欧洲突然生成大量客户端请求。
控制台
创建安装了 Siege 负载测试工具的实例。
在 Google Cloud 控制台中,转到创建实例页面。
将名称设置为
europe-loadtest
。对于区域,请选择
europe-west1
。对于高级设置,请展开高级选项部分,然后执行以下操作:
- 展开管理部分。
- 在自动化字段中,输入以下启动脚本:
apt -y install siege
如需创建虚拟机,请点击创建。
获取负载均衡器的 IPv4 地址。
在 Google Cloud 控制台中,转到负载均衡页面。
点击
fortressnet-balancer
。在前端下复制 IP:端口列下的 IPv4 地址。(IPv4 地址的格式为
www.xxx.yyy.zzz
。)
通过 SSH 连接到负载测试实例。
在 Google Cloud 控制台中,转到虚拟机实例页面。
等待
europe-loadtest
实例的名称列下出现一个绿色的对勾标记。点击SSH列下
europe-loadtest
上的 SSH。
启动 siege。定位负载均衡器的 IPv4 地址。
siege -c150 http://LOAD_BALANCER_IP_ADDRESS
gcloud
创建安装了 Siege 负载测试工具的实例。
gcloud compute instances create europe-loadtest \ --network default \ --zone europe-west1-c \ --metadata startup-script='apt -y install siege'
获取负载均衡器的 IPv4 地址。
gcloud compute addresses list
打开新的 shell 会话,其中
gcloud
命令可用。在新的 shell 会话中,通过 SSH 连接到负载测试实例。
gcloud compute ssh --zone europe-west1-c europe-loadtest
启动 siege。定位负载均衡器的 IPv4 地址。
siege -c150 http://LOAD_BALANCER_IP_ADDRESS
运行 siege
命令后,您应该会看到输出声明 The server is now under siege...
[alert] Zip encoding disabled; siege requires zlib support to enable it ** SIEGE 4.0.2 ** Preparing 150 concurrent users for battle. The server is now under siege...
监控负载均衡和自动扩缩
在 Google Cloud 控制台中,转到负载均衡页面。
点击名为
fortressnet-balancer
的负载均衡器。点击监控标签。
在后端下拉列表中,选择
fortressnet-backend-service
。
最多可能需要十分钟才能显示足够的数据。您应该很快会看到类似如下的显示内容:
这里发生的事情:
负载测试开始一次性发送大量流量。最初,负载均衡器在三个后端之间平均分配请求。请求数量很快超过了您的自动扩缩限制,甚至可能导致服务器返回
Backend 5xx errors
(这将在监控显示器上显示)。自动扩缩程序开始根据需要启动更多实例。自动调节通过扩容满足容量需求。为了最大程度降低请求延迟,Compute Engine 负载均衡器尝试将请求路由到最靠近客户端的后端。在这种情况下,由于负载测试流量来自欧洲,因此负载均衡器倾向于将更多请求路由到欧洲后端。因此,自动调节可能会在欧洲后端启动更多实例,以处理更多的请求。
在其他位置生成测试流量
假设您的 Web 服务在亚洲的午后也人气大增。从亚洲生成大量请求。
控制台
如需创建另一个安装了 Siege 负载测试工具的实例,请执行以下操作:
在 Google Cloud 控制台中,转到虚拟机实例页面。
点击创建实例。
将名称设置为
asia-loadtest
。对于区域,请选择
asia-east1
。展开高级选项部分。
展开管理部分。
在自动化部分中,输入以下启动脚本:
apt -y install siege
点击创建。
如需获取负载均衡器的 IP 地址,请执行以下操作:
在 Google Cloud 控制台中,转到负载均衡页面。
点击
fortressnet-balancer
。在前端下复制 IP:端口列下的 IPv4 地址。(IPv4 地址的格式为
www.xxx.yyy.zzz
。)
通过 SSH 连接到负载测试实例。
- 等待
asia-loadtest
实例的名称列下出现一个绿色的对勾标记。 - 点击SSH列下
asia-loadtest
上的 SSH。
- 等待
启动 siege。定位负载均衡器的 IPv4 地址。
siege -c150 http://LOAD_BALANCER_IP_ADDRESS
gcloud
在原始 shell 会话中,创建另一个安装了 Siege 负载测试工具的实例。
gcloud compute instances create asia-loadtest \ --network default \ --zone asia-east1-c \ --metadata startup-script='apt -y install siege'
获取负载均衡器的 IPv4 地址。
gcloud compute addresses list
打开新的 shell 会话,其中
gcloud
命令可用。在新的 shell 会话中,通过 SSH 连接到负载测试实例。
gcloud compute ssh --zone asia-east1-c asia-loadtest
启动 siege。定位负载均衡器的 IPv4 地址。
siege -c150 http://LOAD_BALANCER_IP_ADDRESS
同样,您应该会看到输出声明 The server is now under siege...
[alert] Zip encoding disabled; siege requires zlib support to enable it ** SIEGE 4.0.2 ** Preparing 150 concurrent users for battle. The server is now under siege...
监控负载均衡和自动扩缩
返回上次的负载均衡监控显示。最多可能需要十分钟才能显示足够的新数据。您应该很快会看到类似如下的显示内容:
这里发生的事情:
同样,负载测试再次一次性发送大量请求。最初,负载均衡器在现有的三个后端之间平均分配请求。当请求数超过您的自动调节限制时,自动调节程序会根据需要开始启动更多实例。
自动扩缩通过扩容满足新的容量需求。负载均衡器仍然倾向于将请求路由到最近的可用后端。因此,最终亚洲后端将主要接收来自亚洲的请求,欧洲后端将主要接收来自欧洲的请求,美国后端将接收所有其他请求。
清理
完成本教程后,您可以清理您创建的资源,让它们停止使用配额,以免产生费用。以下部分介绍如何删除或关闭这些资源。
删除项目
为了避免产生费用,最简单的方法是删除您为本教程创建的项目。
如需删除项目,请执行以下操作:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
删除实例
如需删除 Compute Engine 实例,请执行以下操作:
- In the Google Cloud console, go to the VM instances page.
- Select the checkbox for the instance that you want to delete.
- To delete the instance, click More actions, click Delete, and then follow the instructions.
后续步骤
- 根据负载均衡服务容量进行扩缩。
- Google Cloud 上的全球负载均衡。
- 在 Google Cloud 上构建可扩缩的弹性 Web 应用。
- 探索有关 Google Cloud 的参考架构、图表和最佳实践。查看我们的 Cloud 架构中心。