本指南通过示例,教您如何为 Google Cloud 内部直通式负载均衡器配置故障转移。在按照本指南进行操作之前,请先熟悉以下内容:
权限
要按照本指南进行操作,您需要在项目中创建实例并修改网络。您应该具有项目的 Owner 或 Editor 角色,或者应该具有以下 Compute Engine IAM 角色:
任务 | 所需角色 |
---|---|
创建网络、子网和负载均衡器组件 | Network Admin |
添加和移除防火墙规则 | Security Admin |
创建实例 | Compute Instance Admin |
如需了解详情,请参阅以下指南:
设置
本指南介绍如何配置和测试使用故障切换的内部直通式网络负载均衡器。此部分中的步骤介绍了如何配置以下内容:
- 带有自定义子网的示例 VPC 网络
- 允许后端虚拟机的传入连接的防火墙规则
- 后端虚拟机:
- 区域
us-west1-a
中非代管实例组中的一个主后端 - 区域
us-west1-c
中的非代管实例组中的一个故障转移后端
- 区域
- 一个用于测试连接并观察故障切换行为的客户端虚拟机
- 以下内部直通网络负载均衡器组件:
- 后端服务健康检查
us-west1
区域内的后端服务,用于管理后端虚拟机之间的连接分配- 负载平衡器前端的内部转发规则和内部 IP 地址
此示例的架构如下所示:
在本示例中,主要后端和故障切换后端均使用了非代管式实例组。如需了解详情,请参阅支持的实例组。
配置网络、区域和子网
本示例使用以下 VPC 网络、区域和子网:
网络:网络为自定义模式 VPC 网络,名为
lb-network
。区域:区域为
us-west1
。子网:子网为
lb-subnet
,使用10.1.2.0/24
IP 地址范围。
如需创建示例网络和子网,请按照以下步骤操作。
控制台
在 Google Cloud 控制台中,进入 VPC 网络页面。
点击创建 VPC 网络。
输入
lb-network
作为名称。在子网部分中执行以下操作:
- 将子网创建模式设置为自定义。
- 在新子网部分中,输入以下信息:
- 名称:
lb-subnet
- 区域:
us-west1
- IP 地址范围:
10.1.2.0/24
- 点击完成。
- 名称:
点击创建。
gcloud
创建自定义 VPC 网络:
gcloud compute networks create lb-network --subnet-mode=custom
在
us-west1
区域的lb-network
网络中创建子网:gcloud compute networks subnets create lb-subnet \ --network=lb-network \ --range=10.1.2.0/24 \ --region=us-west1
API
向 networks.insert
方法发出 POST
请求。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
/global/networks
{ "routingConfig": { "routingMode": "REGIONAL" }, "name": "lb-network", "autoCreateSubnetworks": false }
向 subnetworks.insert
方法发出 POST
请求。将 PROJECT_ID
替换为您的 Google Cloud 项目 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
/regions/us-west1/subnetworks
{ "name": "lb-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "ipCidrRange": "10.1.2.0/24", "privateIpGoogleAccess": false }
配置防火墙规则
此示例使用以下防火墙规则:
fw-allow-lb-subnet
:适用于 VPC 网络中所有目标的入站规则,允许来自10.1.2.0/24
范围内来源的流量。此规则允许从lb-subnet
内的任何来源向负载平衡实例(虚拟机)传入流量。fw-allow-ssh
:适用于负载平衡实例的入站流量规则,该规则允许从任何地址到 TCP 端口 22 的传入 SSH 连接。您可以为此规则选择限制性更强的来源 IP 地址范围;例如,您可以指定计划从中启动 SSH 会话的系统的 IP 地址范围。此示例使用目标标记allow-ssh
来标识防火墙规则应该应用到的虚拟机。fw-allow-health-check
:入站流量规则,它适用于负载均衡实例,允许来自 Google Cloud 健康检查系统(130.211.0.0/22
和35.191.0.0/16
)的流量。此示例使用目标标记allow-health-check
来标识应该应用该规则的实例。
如果不使用上述防火墙规则,则默认拒绝入站规则会阻止传入后端实例的流量。
控制台
在 Google Cloud 控制台中,转到防火墙页面。
点击创建防火墙规则并输入以下信息,以创建允许子网流量的规则:
- 名称:
fw-allow-lb-subnet
- 网络:
lb-network
- 优先级:
1000
- 流量方向:入站
- 对匹配项执行的操作:允许
- 目标:网络中的所有实例
- 来源过滤条件:IPv4 范围
- 来源 IPv4 范围:
10.1.2.0/24
- 协议和端口:允许全部
- 名称:
点击创建。
再次点击创建防火墙规则,以创建允许传入 SSH 连接的规则:
- 名称:
fw-allow-ssh
- 网络:
lb-network
- 优先级:
1000
- 流量方向:入站
- 对匹配项执行的操作:允许
- 目标:指定的目标标记
- 目标标记:
allow-ssh
- 来源过滤条件:IPv4 范围
- 来源 IPv4 范围:
0.0.0.0/0
- 协议和端口:选择指定的协议和端口,然后输入
tcp:22
- 名称:
点击创建。
第三次点击创建防火墙规则,以创建允许 Google Cloud 健康检查的规则:
- 名称:
fw-allow-health-check
- 网络:
lb-network
- 优先级:
1000
- 流量方向:入站
- 对匹配项执行的操作:允许
- 目标:指定的目标标记
- 目标标记:
allow-health-check
- 来源过滤条件:IPv4 范围
- 来源 IPv4 范围:
130.211.0.0/22
和35.191.0.0/16
- 协议和端口:允许全部
- 名称:
点击创建。
gcloud
创建
fw-allow-lb-subnet
防火墙规则以允许与子网通信:gcloud compute firewall-rules create fw-allow-lb-subnet \ --network=lb-network \ --action=allow \ --direction=ingress \ --source-ranges=10.1.2.0/24 \ --rules=tcp,udp,icmp
创建
fw-allow-ssh
防火墙规则,允许通过 SSH 连接到网络标记为allow-ssh
的虚拟机。如果省略source-ranges
,Google Cloud 会将规则解释为表示所有来源。gcloud compute firewall-rules create fw-allow-ssh \ --network=lb-network \ --action=allow \ --direction=ingress \ --target-tags=allow-ssh \ --rules=tcp:22
创建
fw-allow-health-check
规则以允许 Google Cloud 健康检查。gcloud compute firewall-rules create fw-allow-health-check \ --network=lb-network \ --action=allow \ --direction=ingress \ --target-tags=allow-health-check \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --rules=tcp,udp,icmp
API
向 firewalls.insert
方法发出 POST
请求,以创建 fw-allow-lb-subnet
防火墙规则。 将 PROJECT_ID
替换为您的 Google Cloud 项目 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
/global/firewalls
{ "name": "fw-allow-lb-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "priority": 1000, "sourceRanges": [ "10.1.2.0/24" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
向 firewalls.insert
方法发出 POST
请求,以创建 fw-allow-ssh
防火墙规则。 将 PROJECT_ID
替换为您的 Google Cloud 项目 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
/global/firewalls
{ "name": "fw-allow-ssh", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "priority": 1000, "sourceRanges": [ "0.0.0.0/0" ], "targetTags": [ "allow-ssh" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
向 firewalls.insert
方法发出 POST
请求,以创建 fw-allow-health-check
防火墙规则。 将 PROJECT_ID
替换为您的 Google Cloud 项目 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
/global/firewalls
{ "name": "fw-allow-health-check", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "priority": 1000, "sourceRanges": [ "130.211.0.0/22", "35.191.0.0/16" ], "targetTags": [ "allow-health-check" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
创建后端虚拟机和实例组
在此步骤中,您要创建后端虚拟机和非代管式实例组:
us-west1-a
中的实例组ig-a
是包含两个虚拟机的主后端:vm-a1
vm-a2
us-west1-c
中的实例组ig-c
是包含两个虚拟机的故障切换后端:vm-c1
vm-c2
为便于说明以及展示一个可用区发生故障时处理故障切换的方式,主后端和故障切换后端位于不同的可用区中。
各主虚拟机和备用虚拟机均配置为在 TCP 端口 80 和 443 上运行 Apache Web 服务器。我们为各虚拟机分配了 lb-subnet
内的一个内部 IP 地址,供客户端访问时使用;此外还分配了一个临时外部(公共)IP 地址,供 SSH 访问时使用。
如需了解移除外部 IP 地址的信息,请参阅从后端虚拟机移除外部 IP 地址。
默认情况下,Apache 配置为绑定到任何 IP 地址。内部直通式网络负载均衡器通过保留目标 IP 地址来传送数据包。
确保在主虚拟机和备用虚拟机上运行的服务器软件在监听负载平衡器内部转发规则的 IP 地址。如果您配置了多条内部转发规则,请确保您的软件会监听与每条规则关联的内部 IP 地址。由内部直通式网络负载均衡器传送到后端虚拟机的数据包的目标 IP 地址是转发规则的内部 IP 地址。
为便于说明,所有主虚拟机和备用虚拟机均运行 Debian GNU/Linux 10。
控制台
创建后端虚拟机
在 Google Cloud 控制台中,前往虚拟机实例页面。
使用以下名称和可用区组合重复执行以下步骤,以创建四个虚拟机。
- 名称:
vm-a1
,可用区:us-west1-a
- 名称:
vm-a2
,可用区:us-west1-a
- 名称:
vm-c1
,可用区:us-west1-c
- 名称:
vm-c2
,可用区:us-west1-c
- 名称:
点击创建实例。
按照第 2 步中的说明设置名称。
对于区域,选择
us-west1
,然后按照第 2 步中的说明选择一个可用区。在启动磁盘部分,确保所选映像为 Debian GNU/Linux 9 10 (buster)。如有必要,请点击选择更改映像。
点击高级选项。
点击网络并配置以下字段:
- 对于网络标记,请输入
allow-health-check
和allow-ssh
。 - 对于网络接口,请选择以下内容:
- 网络:
lb-network
- 子网:
lb-subnet
- 网络:
- 对于网络标记,请输入
点击管理。将以下脚本输入启动脚本字段。 所有四个虚拟机的脚本内容均相同:
#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2
点击创建。
创建实例组
在 Google Cloud 控制台中,转到实例组页面。
使用以下组合重复执行下述步骤,以创建两个非代管式实例组,每个组包含两个虚拟机。
- 实例组:
ig-a
,可用区:us-west1-a
,虚拟机:vm-a1
和vm-a2
- 实例组:
ig-c
,可用区:us-west1-c
,虚拟机:vm-c1
和vm-c2
- 实例组:
点击创建实例组。
点击新建非代管式实例组。
按照第 2 步中的说明设置名称。
在位置部分,为区域选择
us-west1
,然后按照第 2 步中的说明选择一个可用区。对于网络,请输入
lb-network
。对于子网,请输入
lb-subnet
。在虚拟机实例部分中,添加第 2 步中说明的虚拟机。
点击创建。
gcloud
使用
VM_NAME
和ZONE
的下列四种组合运行以下命令四次,创建四个虚拟机。全部四个虚拟机的脚本内容均相同。VM_NAME
为vm-a1
,ZONE
为us-west1-a
VM_NAME
为vm-a2
,ZONE
为us-west1-a
VM_NAME
为vm-c1
,ZONE
为us-west1-c
VM_NAME
为vm-c2
,ZONE
为us-west1-c
gcloud compute instances create VM_NAME \ --zone=ZONE \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh,allow-health-check \ --subnet=lb-subnet \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2'
在每个可用区中创建两个非代管实例组:
gcloud compute instance-groups unmanaged create ig-a \ --zone=us-west1-a gcloud compute instance-groups unmanaged create ig-c \ --zone=us-west1-c
将虚拟机添加到相应的实例组中:
gcloud compute instance-groups unmanaged add-instances ig-a \ --zone=us-west1-a \ --instances=vm-a1,vm-a2 gcloud compute instance-groups unmanaged add-instances ig-c \ --zone=us-west1-c \ --instances=vm-c1,vm-c2
API
向 instances.insert
方法发出四个 POST
请求,以创建四个后端虚拟机。
对于四个虚拟机,请使用以下虚拟机名称和地区:
VM_NAME
为vm-a1
,ZONE
为us-west1-a
VM_NAME
为vm-a2
,ZONE
为us-west1-a
VM_NAME
为vm-c1
,ZONE
为us-west1-c
VM_NAME
为vm-c2
,ZONE
为us-west1-c
请替换以下内容:
PROJECT_ID
:您的项目 IDZONE
:实例的可用区DEBIAN_IMAGE_NAME
:实例的 Debian 映像的名称。您可以通过运行以下gcloud
命令来获取当前的DEBIAN_IMAGE_NAME
:gcloud compute images list \ --filter="family=debian-12"
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
/zones/ZONE
/instances
{ "name": "VM_NAME", "tags": { "items": [ "allow-health-check", "allow-ssh" ] }, "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/machineTypes/e2-standard-2", "canIpForward": false, "networkInterfaces": [ { "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "accessConfigs": [ { "type": "ONE_TO_ONE_NAT", "name": "external-nat", "networkTier": "PREMIUM" } ] } ], "disks": [ { "type": "PERSISTENT", "boot": true, "mode": "READ_WRITE", "autoDelete": true, "deviceName": "VM_NAME", "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/DEBIAN_IMAGE_NAME", "diskType": "projects/PROJECT_ID/zones/ZONE/diskTypes/pd-standard", "diskSizeGb": "10" } } ], "metadata": { "items": [ { "key": "startup-script", "value": "#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nvm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\nhttp://metadata.google.internal/computeMetadata/v1/instance/name)\"\necho \"Page served from: $vm_hostname\" | \\\ntee /var/www/html/index.html\nsystemctl restart apache2" } ] }, "scheduling": { "preemptible": false }, "deletionProtection": false }
向 instanceGroups.insert
方法发出一个 POST
请求,以创建两个实例组。 将 PROJECT_ID
替换为您的 Google Cloud 项目 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
/zones/us-west1-a/instanceGroups
{ "name": "ig-a", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet" }
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
/zones/us-west1-c/instanceGroups
{ "name": "ig-c", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet" }
向 instanceGroups.addInstances
方法发出一个 POST
请求,为每个实例组添加实例。 将 PROJECT_ID
替换为您的 Google Cloud 项目 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
/zones/us-west1-a/instanceGroups/ig-a/addInstances
{ "instances": [ { "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a1", "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a2" } ] }
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
/zones/us-west1-c/instanceGroups/ig-c/addInstances
{ "instances": [ { "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-c1", "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-c2" } ] }
创建客户端虚拟机
此示例在与负载平衡器相同的区域内创建一个客户端虚拟机 (vm-client
)。该客户端用于演示故障切换的工作原理。
控制台
在 Google Cloud 控制台中,转到虚拟机实例页面。
点击创建实例。
将名称设置为
vm-client
。将可用区设置为
us-west1-a
。点击高级选项。
点击网络并配置以下字段:
- 对于网络标记,请输入
allow-ssh
。 - 对于网络接口,请选择以下内容:
- 网络:
lb-network
- 子网:
lb-subnet
- 网络:
- 对于网络标记,请输入
点击创建。
gcloud
客户端虚拟机可以位于负载平衡器所在的同一区域的任何可用区中,并且可以使用该区域中的任何子网。在此示例中,客户端位于 us-west1-a
可用区,该客户端使用的子网与主虚拟机和备用虚拟机使用的子网相同。
gcloud compute instances create vm-client \ --zone=us-west1-a \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh \ --subnet=lb-subnet
API
向 instances.insert
方法发出 POST
请求。
请替换以下内容:
PROJECT_ID
:您的项目 IDDEBIAN_IMAGE_NAME
:实例的 Debian 映像的名称。您可以通过运行以下gcloud
命令来获取当前的DEBIAN_IMAGE_NAME
:gcloud compute images list \ --filter="family=debian-12"
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
/zones/us-west1-a/instances
{ "name": "vm-client", "tags": { "items": [ "allow-ssh" ] }, "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/machineTypes/e2-standard-2", "canIpForward": false, "networkInterfaces": [ { "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "accessConfigs": [ { "type": "ONE_TO_ONE_NAT", "name": "external-nat", "networkTier": "PREMIUM" } ] } ], "disks": [ { "type": "PERSISTENT", "boot": true, "mode": "READ_WRITE", "autoDelete": true, "deviceName": "vm-client", "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/DEBIAN_IMAGE_NAME", "diskType": "projects/PROJECT_ID/zones/us-west1-a/diskTypes/pd-standard", "diskSizeGb": "10" } } ], "scheduling": { "preemptible": false }, "deletionProtection": false }
配置负载均衡器组件
以下步骤会配置所有内部直通式网络负载均衡器组件,先配置健康检查和后端服务,然后配置前端组件:
健康检查:本示例使用仅检查 HTTP
200
(OK) 响应的 HTTP 健康检查。如需了解详情,请参阅内部直通式网络负载均衡器概览的健康检查部分。后端服务:由于本示例通过负载平衡器传递 HTTP 流量,因此配置中指定 TCP,而非 UDP。为演示故障切换,此后端服务的故障切换率为
0.75
。转发规则:本示例创建了一条内部转发规则。
内部 IP 地址:在本示例中,我们在创建转发规则时指定了内部 IP 地址
10.1.2.99
。
控制台
开始配置
在 Google Cloud 控制台中,转到负载均衡页面。
- 点击创建负载均衡器。
- 对于负载均衡器的类型,选择网络负载均衡器 (TCP/UDP/SSL),然后点击下一步。
- 对于代理或直通,选择直通式负载均衡器,然后点击下一步。
- 在公共或内部字段中,选择内部,然后点击下一步。
- 点击配置。
基本配置
- 将名称设置为
be-ilb
。 - 将区域设置为
us-west1
。 - 将网络设置为
lb-network
。 - 点击后端配置 并进行以下更改:
- 对于后端中的新建内容部分,选择
ig-a
实例组。确保未选中将此实例组作为备份的故障转移组。点击完成。 - 点击添加后端。在显示的新建内容部分中,选择
ig-c
实例组。选中将此实例组作为备份的故障转移组。点击完成。 - 对于健康检查,选择另创建一项健康检查,输入以下信息,然后点击保存并继续:
- 名称:
hc-http-80
- 协议:
HTTP
- 端口:
80
- 代理协议:
NONE
- 请求路径:
/
请注意,当您使用 Google Cloud 控制台创建负载均衡器时,健康检查是全球性的。如果要创建地区性健康检查,请使用gcloud
或 API。
- 名称:
- 点击高级配置。在故障切换政策部分中,配置以下各项:
- 故障转移比率:
0.75
- 选中在进行故障切换时启用连接排空。
- 故障转移比率:
- 请先确认后端配置旁边是否有蓝色对勾标记,然后再继续操作。如果没有,请检查此步骤。
- 对于后端中的新建内容部分,选择
- 点击前端配置。在新建前端 IP 和端口部分,进行以下更改:
- 名称:
fr-ilb
- 子网:
ilb-subnet
- 在内部 IP 中,选择保留静态内部 IP 地址,输入以下信息,然后点击保留:
- 名称:
ip-ilb
- 静态 IP 地址:让我选择
- 自定义 IP 地址:
10.1.2.99
- 名称:
- 端口:选择单个,然后输入
80
作为端口号。 - 请先确认前端配置旁边是否有蓝色对勾标记,然后再继续操作。如果没有,请检查此步骤。
- 名称:
- 点击检查并最终确定。仔细检查您的设置。
- 点击创建。
gcloud
创建一个新的 HTTP 健康检查,以测试端口 80 上的虚拟机的 TCP 连接。
gcloud compute health-checks create http hc-http-80 \ --region=us-west1 \ --port=80
为 HTTP 流量创建后端服务:
gcloud compute backend-services create be-ilb \ --load-balancing-scheme=internal \ --protocol=tcp \ --region=us-west1 \ --health-checks=hc-http-80 \ --health-checks-region=us-west1 \ --failover-ratio 0.75
向后端服务添加主后端:
gcloud compute backend-services add-backend be-ilb \ --region=us-west1 \ --instance-group=ig-a \ --instance-group-zone=us-west1-a
将故障转移后端添加到后端服务:
gcloud compute backend-services add-backend be-ilb \ --region=us-west1 \ --instance-group=ig-c \ --instance-group-zone=us-west1-c \ --failover
为后端服务创建转发规则。创建转发规则时,请指定
10.1.2.99
作为子网中的内部 IP 地址。gcloud compute forwarding-rules create fr-ilb \ --region=us-west1 \ --load-balancing-scheme=internal \ --network=lb-network \ --subnet=lb-subnet \ --address=10.1.2.99 \ --ip-protocol=TCP \ --ports=80 \ --backend-service=be-ilb \ --backend-service-region=us-west1
API
向 regionHealthChecks.insert
方法发出 POST
请求,以创建健康检查。请将 PROJECT_ID
替换为您的项目 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
/regions/us-west1/regionHealthChecks
{ "name": "hc-http-80", "type": "HTTP", "httpHealthCheck": { "port": 80 } }
向 regionBackendServices.insert
方法发出 POST
请求,以创建地区后端服务。 请将 PROJECT_ID
替换为您的项目 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
/regions/us-west1/backendServices
{ "name": "be-ilb", "backends": [ { "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a", "balancingMode": "CONNECTION" }, { "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups/ig-c", "balancingMode": "CONNECTION" "failover": true } ], "failoverPolicy": { "failoverRatio": 0.75 }, "healthChecks": [ "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80" ], "loadBalancingScheme": "INTERNAL", "connectionDraining": { "drainingTimeoutSec": 0 } }
向 forwardingRules.insert
方法发出 POST
请求,以创建转发规则。 请将 PROJECT_ID
替换为您的项目 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
/regions/us-west1/forwardingRules
{ "name": "fr-ilb", "IPAddress": "10.1.2.99", "IPProtocol": "TCP", "ports": [ "80", "8008", "8080", "8088" ], "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb", "networkTier": "PREMIUM" }
测试
这部分中的测试展示了如何验证负载平衡器配置并了解其预期行为。
客户端测试过程
此过程会从客户端虚拟机联系负载平衡器。您将利用此过程完成其他测试。
连接到客户端虚拟机实例。
gcloud compute ssh vm-client --zone=us-west1-a
使用
curl
连接负载平衡器的 IP 地址,通过这种方式向负载平衡器发送 Web 请求。curl http://10.1.2.99
请注意
curl
命令返回的结果。该结果文本中显示了生成响应的后端虚拟机的名称,例如:Page served from: vm-a1
测试初始状态
在配置示例负载平衡器之后,全部四个后端虚拟机都应该保持良好的运行状况:
- 两个主虚拟机:
vm-a1
和vm-a2
- 两个备用虚拟机:
vm-c1
和vm-c2
遵循客户端测试过程执行操作。重复执行第 2 步多次。预期行为是:两个主虚拟机(vm-a1
和 vm-a2
)都传送流量,因为两者均运行状况良好。您应该看到两个主虚拟机各在大约一半的时间里提供响应,因为我们尚未为此平衡器配置会话粘性。
测试故障转移
此测试模拟了 vm-a1
故障的情形,因此您可以观察故障转移行为。
连接到
vm-a1
虚拟机。gcloud compute ssh vm-a1 --zone=us-west1-a
停止 Apache Web 服务器。经过 10 秒之后,Google Cloud 会将此虚拟机视为运行状况不良。(您在设置过程中创建的
hc-http-80
健康检查使用 5 秒的默认检查间隔时间,以及连续两次探测失败的健康状况不良阈值。)sudo apachectl stop
遵循客户端测试过程执行操作。重复执行第 2 步多次。预期行为是:两个备用虚拟机(
vm-c1
和vm-c2
)都传送流量。因为只有vm-a2
这一个主虚拟机运行状况良好,运行状况良好的主虚拟机与主虚拟机总数的比率为0.5
。 这个数字低于故障切换阈值(即0.75
),因此 Google Cloud 会重新配置负载均衡器的活跃池,使其使用备用虚拟机。只要我们尚未为此负载平衡器配置会话亲和性,您就应该看到两个备用虚拟机各在大约一半的时间里提供响应。
测试故障恢复
此测试通过重启位于 vm-a1
的 Apache 服务器模拟故障恢复。
连接到
vm-a1
虚拟机。gcloud compute ssh vm-a1 --zone=us-west1-a
启动 Apache Web 服务器并等待 10 秒钟。
sudo apachectl start
遵循客户端测试过程执行操作。重复执行第 2 步多次。预期行为是:两个主虚拟机(
vm-a1
和vm-a2
)都传送流量。两个主虚拟机均健康状况良好,并且健康状况良好的主虚拟机与主虚拟机总数的比率为1.0
,高于故障切换阈值(即0.75
),因此 Google Cloud 将活跃池配置为再次使用主虚拟机。
添加更多后端虚拟机
本部分在前面的示例配置基础上进行了延伸,向负载平衡器添加了更多主虚拟机和备用虚拟机。为此,我们在本示例中额外创建了两个后端实例组,以演示您可以将主虚拟机和备用虚拟机分布设置在同一地区的多个不同区域中:
- 第三个实例组(即
us-west1-c
中的ig-d
)用作具有如下两个虚拟机的主后端:vm-d1
vm-d2
- 第三个实例组(即
us-west1-a
中的ig-b
)用作具有如下两个虚拟机的故障切换后端:vm-b1
vm-b2
经过修改后,此示例的修改架构如下所示:
创建额外的虚拟机和实例组
按照以下步骤创建额外的主虚拟机和备用虚拟机,以及与其对应的非代管式实例组。
控制台
创建后端虚拟机
在 Google Cloud 控制台中,前往虚拟机实例页面。
使用以下名称和可用区组合重复执行以下步骤,以创建四个虚拟机。
- 名称:
vm-b1
,可用区:us-west1-a
- 名称:
vm-b2
,可用区:us-west1-a
- 名称:
vm-d1
,可用区:us-west1-c
- 名称:
vm-d2
,可用区:us-west1-c
- 名称:
点击创建实例。
按照第 2 步中的说明设置名称。
对于区域,选择
us-west1
,然后按照第 2 步中的说明选择一个可用区。在启动磁盘部分,确保所选映像为 Debian GNU/Linux 9 10 (buster)。如有必要,请点击选择更改映像。
点击高级选项并进行以下更改:
- 点击网络并添加以下网络标记:
allow-ssh
和allow-health-check
- 点击网络接口下的修改按钮并进行以下更改,然后点击完成:
- 网络:
lb-network
- 子网:
lb-subnet
- 主要内部 IP:临时(自动)
- 外部 IP:临时
- 网络:
点击管理。在启动脚本字段中,复制并粘贴以下脚本内容。所有四个虚拟机的脚本内容均相同:
#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2
- 点击网络并添加以下网络标记:
点击创建。
创建实例组
在 Google Cloud 控制台中,转到实例组页面。
使用这些组合重复执行以下步骤,以创建两个非代管式实例组,每个组包含两个虚拟机。
- 实例组:
ig-b
,区域:us-west1-a
,虚拟机:vm-b1
和vm-b2
- 实例组:
ig-d
,可用区:us-west1-c
,虚拟机:vm-d1
和vm-d2
- 实例组:
点击创建实例组。
点击新建非代管式实例组。
按照第 2 步中的说明设置名称。
在位置部分,为区域选择
us-west1
,然后按照第 2 步中的说明选择一个可用区。对于网络,请输入
lb-network
。对于子网,请输入
lb-subnet
。在虚拟机实例部分中,添加第 2 步中说明的虚拟机。
点击创建。
gcloud
使用
VM_NAME
和ZONE
的下列四种组合运行以下命令四次,创建四个虚拟机。全部四个虚拟机的脚本内容均相同。VM_NAME
为vm-b1
,ZONE
为us-west1-a
VM_NAME
为vm-b2
,ZONE
为us-west1-a
VM_NAME
为vm-d1
,ZONE
为us-west1-c
VM_NAME
为vm-d2
,ZONE
为us-west1-c
gcloud compute instances create VM_NAME \ --zone=ZONE \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh,allow-health-check \ --subnet=lb-subnet \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2'
在每个可用区中创建两个非代管实例组:
gcloud compute instance-groups unmanaged create ig-b \ --zone=us-west1-a gcloud compute instance-groups unmanaged create ig-d \ --zone=us-west1-c
将虚拟机添加到相应的实例组中:
gcloud compute instance-groups unmanaged add-instances ig-b \ --zone=us-west1-a \ --instances=vm-b1,vm-b2 gcloud compute instance-groups unmanaged add-instances ig-d \ --zone=us-west1-c \ --instances=vm-d1,vm-d2
API
向 instances.insert
方法发出四个 POST
请求,以创建四个后端虚拟机。
对于四个虚拟机,请使用以下虚拟机名称和地区:
VM_NAME
为vm-b1
,ZONE
为us-west1-a
VM_NAME
为vm-b2
,ZONE
为us-west1-a
VM_NAME
为vm-d1
,ZONE
为us-west1-c
VM_NAME
为vm-d2
,ZONE
为us-west1-c
请替换以下内容:
PROJECT_ID
:您的项目 IDDEBIAN_IMAGE_NAME
:实例的 Debian 映像的名称。您可以通过运行以下gcloud
命令来获取当前的DEBIAN_IMAGE_NAME
:gcloud compute images list \ --filter="family=debian-12"
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
/zones/ZONE/instances
{ "name": "VM_NAME", "tags": { "items": [ "allow-health-check", "allow-ssh" ] }, "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/machineTypes/e2-standard-2", "canIpForward": false, "networkInterfaces": [ { "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "accessConfigs": [ { "type": "ONE_TO_ONE_NAT", "name": "external-nat", "networkTier": "PREMIUM" } ] } ], "disks": [ { "type": "PERSISTENT", "boot": true, "mode": "READ_WRITE", "autoDelete": true, "deviceName": "VM_NAME", "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/DEBIAN_IMAGE_NAME", "diskType": "projects/PROJECT_ID/zones/ZONE/diskTypes/pd-standard", "diskSizeGb": "10" } } ], "metadata": { "items": [ { "key": "startup-script", "value": "#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nvm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\nhttp://metadata.google.internal/computeMetadata/v1/instance/name)\"\necho \"Page served from: $vm_hostname\" | \\\ntee /var/www/html/index.html\nsystemctl restart apache2" } ] }, "scheduling": { "preemptible": false }, "deletionProtection": false }
向 instanceGroups.insert
方法发出一个 POST
请求,以创建两个实例组。 请将 PROJECT_ID
替换为您的项目 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
/zones/us-west1-a/instanceGroups
{ "name": "ig-b", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet" }
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
/zones/us-west1-c/instanceGroups
{ "name": "ig-d", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet" }
向 instanceGroups.addInstances
方法发出一个 POST
请求,为每个实例组添加实例。 请将 PROJECT_ID
替换为您的项目 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
/zones/us-west1-a/instanceGroups/ig-b/addInstances
{ "instances": [ { "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-b1", "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-b2" } ] }
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
/zones/us-west1-c/instanceGroups/ig-d/addInstances
{ "instances": [ { "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-d1", "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-d2" } ] }
添加主后端
您可以将此过程用作模板,了解如何将非代管实例组作为主后端,添加到现有内部直通式网络负载均衡器的后端服务。此过程利用示例配置,向您展示如何将实例组 ig-d
作为主后端添加到 be-ilb
负载平衡器。
控制台
在 Google Cloud 控制台中,转到负载均衡页面。
在负载平衡器标签页中,点击现有内部 TCP 或内部 UDP 负载平衡器的名称(在此示例中是
be-ilb
)。点击修改
。在后端配置中,点击添加后端并选择一个非代管式实例组(在此示例中是
ig-d
)。确保未选中将此实例组作为备份的故障转移组。
点击完成,然后再点击更新。
gcloud
使用以下 gcloud
命令将主后端添加到现有内部直通式网络负载均衡器的后端服务。
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --instance-group INSTANCE_GROUP_NAME \ --instance-group-zone INSTANCE_GROUP_ZONE \ --region REGION
请替换以下内容:
BACKEND_SERVICE_NAME
:负载平衡器的后端服务的名称。对于此示例,请使用be-ilb
。INSTANCE_GROUP_NAME
:要作为主后端添加的实例组的名称。对于此示例,请使用ig-d
。INSTANCE_GROUP_ZONE
是定义了该实例组的可用区。对于此示例,请使用us-west1-c
。REGION
是负载平衡器所在的区域。对于此示例,请使用us-west1
。
API
使用 regionBackendServices.patch
方法将主后端添加到现有后端服务。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/backendServices/BACKEND_SERVICE_NAME { "backends": [ { "balancingMode": "connection", "failover": false, "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/INSTANCE_GROUP_ZONE/instanceGroups/INSTANCE_GROUP_NAME" } ] }
请替换以下内容:
PROJECT_ID
:您的项目 IDREGION
是负载平衡器所在的区域。对于此示例,请使用us-west1
。BACKEND_SERVICE_NAME
:负载平衡器的后端服务的名称。对于此示例,请使用be-ilb
。INSTANCE_GROUP_NAME
:要作为主后端添加的实例组的名称。对于此示例,请使用ig-d
。INSTANCE_GROUP_ZONE
:定义了该实例组的区域。对于此示例,请使用us-west1-c
。
添加故障切换后端
您可以将此过程用作模板,了解如何将非代管实例组作为故障切换后端,添加到现有内部直通式网络负载均衡器的后端服务。此过程利用示例配置,向您展示如何将实例组 ig-b
作为故障切换主后端添加到 be-ilb
负载均衡器。
控制台
在 Google Cloud 控制台中,转到负载均衡页面。
在负载均衡器标签页中,点击 TCP/UDP(内部)类型的现有负载均衡器的名称(在此示例中为
be-ilb
)。点击修改
。在后端配置中,点击添加后端并选择一个非代管式实例组(在此示例中是
ig-b
)。选中将此实例组作为备份的故障转移组。
点击完成,然后再点击更新。
gcloud
使用以下 gcloud
命令将故障切换后端添加到现有内部直通式网络负载均衡器的后端服务。
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --instance-group INSTANCE_GROUP_NAME \ --instance-group-zone INSTANCE_GROUP_ZONE \ --region REGION \ --failover
请替换以下内容:
BACKEND_SERVICE_NAME
:负载平衡器的后端服务的名称。对于此示例,请使用be-ilb
。INSTANCE_GROUP_NAME
:要作为主后端添加的实例组的名称。对于此示例,请使用ig-b
。INSTANCE_GROUP_ZONE
是定义了该实例组的可用区。对于此示例,请使用us-west1-a
。REGION
是负载平衡器所在的地区。 对于此示例,请使用us-west1
。
API
使用 regionBackendServices.patch
方法将故障切换后端添加到现有后端服务。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/backendServices/BACKEND_SERVICE_NAME { "backends": [ { "balancingMode": "connection", "failover": true, "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/INSTANCE_GROUP_ZONE/instanceGroups/INSTANCE_GROUP_NAME" } ] }
请替换以下内容:
PROJECT_ID
:您的项目 IDBACKEND_SERVICE_NAME
:负载平衡器的后端服务的名称。对于此示例,请使用be-ilb
。INSTANCE_GROUP_NAME
:要作为主后端添加的实例组的名称。对于此示例,请使用ig-b
。INSTANCE_GROUP_ZONE
是定义了该实例组的可用区。对于此示例,请使用us-west1-a
。REGION
是负载平衡器所在的区域。对于此示例,请使用us-west1
。
转换主后端或故障切换后端
您可以将主后端转换为故障切换后端,反之亦然,而且不需要从内部直通式网络负载均衡器的后端服务中移除实例组。
控制台
在 Google Cloud 控制台中,转到负载均衡页面。
在负载均衡器标签页中,点击类型为 TCP/UDP (内部)的现有负载均衡器的名称。
点击修改
。在后端配置中,点击一个后端实例组的名称。然后:
- 如需将此实例组设为故障转移后端,请选中将此实例组作为备份的故障转移组。
- 如需将此实例组设为主后端,请取消选中将此实例组作为备份的故障切换组。
点击完成,然后再点击更新。
gcloud
使用以下 gcloud
命令将现有主后端转换为故障转移后端:
gcloud compute backend-services update-backend BACKEND_SERVICE_NAME \ --instance-group INSTANCE_GROUP_NAME \ --instance-group-zone INSTANCE_GROUP_ZONE \ --region REGION \ --failover
使用以下 gcloud
命令将现有故障切换后端转换为主后端:
gcloud compute backend-services update-backend BACKEND_SERVICE_NAME \ --instance-group INSTANCE_GROUP_NAME \ --instance-group-zone INSTANCE_GROUP_ZONE \ --region REGION \ --no-failover
请替换以下内容:
BACKEND_SERVICE_NAME
:负载平衡器的后端服务的名称INSTANCE_GROUP_NAME
:要作为主后端添加的实例组的名称INSTANCE_GROUP_ZONE
:定义了该实例组的可用区REGION
:负载平衡器所在的地区
API
使用 regionBackendServices.patch
方法将主后端转换为故障切换后端,反之亦然。
将主后端转换为故障切换后端的方法如下:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/backendServices/BACKEND_SERVICE_NAME { "backends": [ { "failover": true, "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/INSTANCE_GROUP_ZONE/instanceGroups/INSTANCE_GROUP_NAME" } ] }
将故障切换后端转换为主后端的方法如下:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/backendServices/BACKEND_SERVICE_NAME { "backends": [ { "failover": false, "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/INSTANCE_GROUP_ZONE/instanceGroups/INSTANCE_GROUP_NAME" } ], }
请替换以下内容:
PROJECT_ID
:您的项目 IDBACKEND_SERVICE_NAME
:负载平衡器的后端服务的名称INSTANCE_GROUP_NAME
:要作为主后端添加的实例组的名称INSTANCE_GROUP_ZONE
:定义了该实例组的可用区REGION
:负载平衡器所在的地区
配置故障转移政策
这部分介绍了如何为内部直通式网络负载均衡器的后端服务管理故障切换政策。故障切换政策包含以下内容:
- 故障切换比率
- 当所有后端虚拟机运行状况都不佳时舍弃流量
- 在进行故障切换时排空连接
如需详细了解故障切换政策的参数,请参阅:
定义故障切换政策
以下说明介绍如何为现有的内部直通式网络负载均衡器定义故障切换政策。
控制台
如需使用 Google Cloud 控制台定义故障切换政策,您必须至少具有一个故障切换后端。
在 Google Cloud 控制台中,转到负载均衡页面。
在负载均衡器标签页中,点击类型为 TCP/UDP(内部)的现有负载均衡器的名称。
点击修改
。确保您至少有一个故障切换后端。至少必须有一个负载均衡器的后端已选中将此实例组作为备份的故障切换组。
点击高级配置。
- 对于故障切换政策,将故障切换比率设置为介于
0.0
和1.0
之间的值。 - 如果要在所有活跃虚拟机和所有备用虚拟机运行状况不佳时舍弃流量,请选中启用舍弃流量旁边的复选框。
- 如果您希望在故障切换过程中快速终止现有连接,请选中在进行故障切换时启用连接排空旁边的复选框。
- 对于故障切换政策,将故障切换比率设置为介于
点击检查并最终确定,然后点击更新。
gcloud
如需使用 gcloud CLI 定义故障切换政策,请更新负载均衡器的后端服务:
gcloud compute backend-services update BACKEND_SERVICE_NAME \ --region REGION \ --failover-ratio FAILOVER_RATIO \ --drop-traffic-if-unhealthy \ --no-connection-drain-on-failover
替换以下内容:
BACKEND_SERVICE_NAME
:负载平衡器的后端服务的名称。对于此示例,请使用be-ilb
。REGION
是负载平衡器所在的区域。对于此示例,请使用us-west1
。FAILOVER_RATIO
:故障切换比率。可能的值介于0.0
和1.0
之间。对于此示例,请使用0.75
。- 如果所有主虚拟机和所有备用虚拟机均运行状况不佳时,
--drop-traffic-if-unhealthy
会指示负载平衡器舍弃流量。如果要在所有后端虚拟机运行状况不佳时,将流量分配到所有主虚拟机之间,请将此值更改为--no-drop-traffic-if-unhealthy
。 --no-connection-drain-on-failover
指示负载均衡器在故障切换期间快速终止现有的 TCP 连接。使用--connection-drain-on-failover
在进行故障切换时启用连接排空。
API
使用 regionBackendServices.patch
方法定义故障切换政策。
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/backendServices/BACKEND_SERVICE_NAME { "failoverPolicy": { "failoverRatio": FAILOVER_RATIO, "dropTrafficIfUnhealthy": [true|false], "disableConnectionDrainOnFailover": [true|false] } }
请替换以下内容:
PROJECT_ID
:您的项目 IDREGION
:负载平衡器所在的地区BACKEND_SERVICE_NAME
:负载平衡器的后端服务的名称FAILOVER_RATIO
:故障切换比率。可能的值介于0.0
和1.0
之间。- 将
dropTrafficIfUnhealthy
设置为true
会指示负载平衡器在所有主虚拟机和所有备用虚拟机运行状况不佳时舍弃流量。如果要在所有后端虚拟机运行状况不佳时,将流量分配到所有主虚拟机之间,请将此值设置为false
。 - 将
disableConnectionDrainOnFailover
设置为true
会指示负载均衡器在执行故障切换时快速终止现有的 TCP 连接。将此值设置为false
即可在进行故障切换时启用连接排空。
查看故障切换政策
以下说明介绍如何查看内部直通式网络负载均衡器的现有故障切换政策。
控制台
在您修改内部直通式网络负载均衡器时,Google Cloud 控制台会显示现有故障切换政策的设置。如需查看相关说明,请参阅定义故障转移政策。
gcloud
如需使用 gcloud CLI 列出故障切换政策设置,请使用以下命令。故障切换政策中的未定义设置会使用默认的故障切换政策值。
gcloud compute backend-services describe BACKEND_SERVICE_NAME \ --region REGION \ --format="get(failoverPolicy)"
请替换以下内容:
BACKEND_SERVICE_NAME
:负载平衡器的后端服务的名称REGION
:负载平衡器所在的地区
API
使用 regionBackendServices.get
方法查看故障切换政策。
对此 API 请求的响应中会显示故障转移政策。下面显示了一个示例。
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/backendServices/BACKEND_SERVICE_NAME
请替换以下内容:
PROJECT_ID
:您的项目 IDREGION
:负载平衡器所在的地区BACKEND_SERVICE_NAME
:负载平衡器的后端服务的名称
{ ... "failoverPolicy": { "disableConnectionDrainOnFailover": false, "dropTrafficIfUnhealthy": false, "failoverRatio": 0.75 ... }
后续步骤
- 如需了解重要的基础知识,请参阅内部直通式网络负载均衡器概览。
- 如需了解有关故障切换的重要信息,请参阅内部直通式网络负载均衡器的故障切换概念。
- 如需查看内部直通式网络负载均衡器配置示例,请参阅设置内部直通式网络负载均衡器。
- 如需了解如何为内部直通式网络负载均衡器配置日志记录和监控功能,请参阅内部直通式网络负载均衡器日志记录和监控。
- 如需了解如何从与您的 VPC 网络连接的对等互连网络访问内部直通式网络负载均衡器,请参阅内部直通式网络负载均衡器和连接的网络。
- 如需了解如何排查内部直通式网络负载均衡器的问题,请参阅内部直通式网络负载均衡器问题排查。
- 清理负载均衡器设置。