本指南使用範例說明如何為 Google Cloud 內部直通式網路負載平衡器設定容錯移轉功能。在按照本指南操作之前,請先熟悉以下內容:
權限
如要按照本指南操作,您必須在專案中建立執行個體和修改網路,因此您必須是專案擁有者或編輯者,或是需要下列所有 Compute Engine 身分與存取權管理角色:
工作 | 必要角色 |
---|---|
建立網路、子網路和負載平衡器元件 | 網路管理員 |
新增與移除防火牆規則 | 安全性管理員 |
建立執行個體 | Compute 執行個體管理員 |
詳情請參閱下列指南:
設定
本指南說明如何設定及測試使用容錯移轉功能的內部直通式網路負載平衡器。本節中的步驟說明如何設定以下項目:
- 包含自訂子網路的範例虛擬私人雲端網路
- 允許連入連線到後端 VM 的防火牆規則
- 後端 VM:
- 一個主要後端,位於
us-west1-a
區域的非代管執行個體群組中 - 一個容錯移轉後端,位於
us-west1-c
區域的非代管執行個體群組中
- 一個主要後端,位於
- 一個用戶端 VM,用於測試連線和觀察容錯移轉行為
- 以下內部直通式網路負載平衡器元件:
- 一個用於後端服務的健康狀態檢查
- 一個位於
us-west1
地區的內部後端服務,用於管理後端 VM 之間的連線分配 - 一個用於負載平衡器前端的內部轉送規則和內部 IP 位址
這個範例的架構如下所示:
在這個範例中,非代管執行個體群組會用於主要和容錯移轉後端。詳情請參閱支援的執行個體群組一節。
設定網路、地區和子網路
這個範例使用以下虛擬私人雲端網路、地區和子網路:
網路:網路為名為
lb-network
的自訂模式虛擬私人雲端網路。地區:地區為
us-west1
。子網路:子網路
lb-subnet
使用10.1.2.0/24
IP 範圍。
如要建立範例網路和子網路,請按照以下步驟操作。
主控台
在 Google Cloud 控制台中,前往「VPC Networks」(虛擬私有雲網路) 頁面。
按一下「建立虛擬私有雲網路」。
輸入
lb-network
的「Name」。在「Subnets」(子網路) 區段中:
- 將「Subnet creation mode」(子網路建立模式) 設為 [Custom] (自訂)。
- 在「New subnet」(新的子網路) 區段中,輸入以下資訊:
- Name (名稱):
lb-subnet
- Region (區域):
us-west1
- IP address range (IP 位址範圍):
10.1.2.0/24
- 按一下 [完成]。
- Name (名稱):
按一下 [建立]。
gcloud
建立自訂虛擬私人雲端網路:
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
:輸入規則,適用於虛擬私人雲端網路中的所有目標,允許來源在10.1.2.0/24
範圍內的流量。這項規則允許的傳入流量為從lb-subnet
內任何來源到要進行負載平衡的執行個體 (VM)。fw-allow-ssh
:輸入規則,適用於要進行負載平衡的執行個體,允許在 TCP 通訊埠 22 上有來自任何位址的連入 SSH 連線。您可以為這項規則選擇較嚴格的來源 IP 範圍;例如,您可以指定打算啟動 SSH 工作階段之系統的 IP 範圍。這個範例會使用目標標記allow-ssh
來辨識套用防火牆規則的 VM。fw-allow-health-check
:輸入規則,適用於要進行負載平衡的執行個體,允許來自 Google Cloud 健康檢查系統 (130.211.0.0/22
和35.191.0.0/16
) 的流量。這個範例會使用目標標記allow-health-check
來辨識應套用此規則的執行個體。
如果沒有這些防火牆規則,預設拒絕輸入規則將會封鎖傳入至後端執行個體的流量。
主控台
在 Google Cloud 控制台中,前往「Firewall policies」(防火牆政策) 頁面。
按一下「Create firewall rule」(建立防火牆規則),然後輸入以下資訊,以建立允許子網路流量的規則:
- Name (名稱):
fw-allow-lb-subnet
- Network (網路):
lb-network
- Priority (優先順序):
1000
- 「Direction of traffic」(流量方向):[ingress] (輸入)
- 「Action on match」(相符時執行的動作):[allow] (允許)
- 「Targets」(目標):[All instances in the network] (網路中的所有執行個體)
- 來源篩選器:IPv4 範圍
- Source IPv4 ranges (來源 IPv4 範圍):
10.1.2.0/24
- 「Protocols and ports」(通訊協定和通訊埠):[Allow all] (全部允許)
- Name (名稱):
按一下 [建立]。
再次按一下「Create firewall rule」(建立防火牆規則),以建立允許連入 SSH 連線的規則:
- Name (名稱):
fw-allow-ssh
- Network (網路):
lb-network
- Priority (優先順序):
1000
- 「Direction of traffic」(流量方向):[ingress] (輸入)
- 「Action on match」(相符時執行的動作):[allow] (允許)
- 「Target」(目標):指定的目標標記
- 「Target tags」(目標標記):
allow-ssh
- 來源篩選器:IPv4 範圍
- Source IPv4 ranges (來源 IPv4 範圍):
0.0.0.0/0
- 「Protocols and ports」(通訊協定和通訊埠):選擇「Specified protocols and ports」(指定的通訊協定和通訊埠),然後輸入
tcp:22
。
- Name (名稱):
按一下 [建立]。
第三次按一下「Create firewall rule」(建立防火牆規則),以建立允許Google Cloud 健康狀態檢查的規則:
- Name (名稱):
fw-allow-health-check
- Network (網路):
lb-network
- Priority (優先順序):
1000
- 「Direction of traffic」(流量方向):[ingress] (輸入)
- 「Action on match」(相符時執行的動作):[allow] (允許)
- 「Target」(目標):指定的目標標記
- 「Target tags」(目標標記):
allow-health-check
- 來源篩選器:IPv4 範圍
- Source IPv4 ranges (來源 IPv4 範圍):
130.211.0.0/22
和35.191.0.0/16
- 「Protocols and ports」(通訊協定和通訊埠):[Allow all] (全部允許)
- Name (名稱):
按一下 [建立]。
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
防火牆規則,允許與具有allow-ssh
網路標記的 VM 建立 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 }
建立後端 VM 和執行個體群組
在這個步驟中,您將建立後端 VM 和非代管執行個體群組:
us-west1-a
中的執行個體群組ig-a
是包含兩個 VM 的主要後端:vm-a1
vm-a2
us-west1-c
中的執行個體群組ig-c
是包含兩個 VM 的容錯移轉後端:vm-c1
vm-c2
將主要和容錯移轉後端置於不同的區域中,除了讓說明清楚易懂,還可在一個區域停止運作時處理容錯移轉作業。
每個主要 VM 和備用 VM 都會設定為在 TCP 通訊埠 80 和 443 上執行 Apache 網路伺服器。每個 VM 都會獲指派 lb-subnet
中的一個內部 IP 位址以供用戶端存取,以及一個臨時外部 (公開) IP 位址以供透過 SSH 存取。如要瞭解如何移除外部 IP 位址,請參閱「從後端 VM 移除外部 IP 位址」一節。
根據預設,Apache 會設定為繫結至任何 IP 位址。內部直通式網路負載平衡器會透過保留目的地 IP 來傳遞封包。
請確認在主要 VM 和備用 VM 上執行的伺服器軟體正在監聽負載平衡器內部轉送規則的 IP 位址。如果您設定了多個內部轉送規則,請確認您的軟體會監聽與每個規則相關聯的內部 IP 位址。由內部直通式網路負載平衡器傳遞至後端 VM 的封包目的地 IP 位址是轉送規則的內部 IP 位址。
為方便說明,所有主要 VM 和備用 VM 都會執行 Debian GNU/Linux 12。
主控台
建立後端 VM
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
使用下列的名稱和區域組合,重複以下步驟來建立四個 VM。
- 名稱:
vm-a1
,區域:us-west1-a
- 名稱:
vm-a2
,區域:us-west1-a
- 名稱:
vm-c1
,區域:us-west1-c
- 名稱:
vm-c2
,區域:us-west1-c
- 名稱:
點選「建立執行個體」。
按照步驟 2 指定的名稱設定「Name」(名稱)。
在「Region」(區域) 中選擇
us-west1
,然後選擇步驟 2 列出的「Zone」(可用區)。在「Boot disk」(開機磁碟) 專區中,確認所選映像檔為 Debian GNU/Linux 12 (bookworm)。如有需要,請按一下「選擇」,以變更圖片。
點選「進階選項」。
按一下「網路」,然後設定下列欄位:
- 在「Network tags」(網路標記) 中輸入
allow-health-check
和allow-ssh
。 - 在「網路介面」中,選取下列項目:
- Network (網路):
lb-network
- Subnet (子網路):
lb-subnet
- Network (網路):
- 在「Network tags」(網路標記) 中輸入
按一下 [Management] (管理)。在「Startup script」(開機指令碼) 欄位中輸入下列指令碼。四個 VM 的指令碼內容完全相同:
#! /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
按一下 [Create] (建立)。
建立執行個體群組
前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。
使用下列組合,重複以下的步驟來建立兩個非代管執行個體群組,每個非代管執行個體群組各包含兩個 VM。
- 執行個體群組:
ig-a
,區域:us-west1-a
,VM:vm-a1
和vm-a2
- 執行個體群組:
ig-c
,區域:us-west1-c
,VM:vm-c1
和vm-c2
- 執行個體群組:
點選「建立執行個體群組」。
按一下「New unmanaged instance group」(新增非代管的執行個體群組)。
按照步驟 2 指定的名稱設定「Name」(名稱)。
在「Location」(位置) 區段,為「Region」(區域) 選擇
us-west1
,然後選擇步驟 2 列出的「Zone」(可用區)。在「Network」中輸入
lb-network
。在「Subnetwork」(子網路) 中輸入
lb-subnet
。在「VM instances」(VM 執行個體) 區段中,按照步驟 2 指定的 VM 新增 VM。
按一下 [建立]。
gcloud
使用下列四個
VM_NAME
和ZONE
組合,透過執行以下指令四次來建立四個 VM。四個 VM 的指令碼內容完全相同。vm-a1
的VM_NAME
和us-west1-a
的ZONE
vm-a2
的VM_NAME
和us-west1-a
的ZONE
vm-c1
的VM_NAME
和us-west1-c
的ZONE
vm-c2
的VM_NAME
和us-west1-c
的ZONE
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
將 VM 新增至適當的執行個體群組:
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。
針對四個 VM,請使用以下 VM 名稱和區域:
vm-a1
的VM_NAME
和us-west1-a
的ZONE
vm-a2
的VM_NAME
和us-west1-a
的ZONE
vm-c1
的VM_NAME
和us-west1-c
的ZONE
vm-c2
的VM_NAME
和us-west1-c
的ZONE
更改下列內容:
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
這個範例會在與負載平衡器相同的地區中建立用戶端 VM (vm-client
)。這個用戶端用於示範容錯移轉的運作方式。
主控台
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
點選「建立執行個體」。
將「Name」(名稱) 設為
vm-client
。將「可用區」設為
us-west1-a
。點選「進階選項」。
按一下「網路」,然後設定下列欄位:
- 在「網路標記」中輸入
allow-ssh
。 - 在「網路介面」中,選取下列項目:
- Network (網路):
lb-network
- Subnet (子網路):
lb-subnet
- Network (網路):
- 在「網路標記」中輸入
按一下 [建立]。
gcloud
用戶端 VM 可以位於與負載平衡器相同地區的任何區域中,也可以使用該地區中的任何子網路。在本範例中,用戶端位於 us-west1-a
區域,並使用與主要 VM 和備用 VM 相同的子網路。
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 控制台的「Load balancing」(負載平衡)頁面。
- 點選「建立負載平衡器」。
- 在「負載平衡器類型」部分,選取「網路負載平衡器 (TCP/UDP/SSL)」,然後點選「下一步」。
- 在「直通或使用 Proxy」部分,選取「直通式負載平衡器」,然後點選「下一步」。
- 在「公開或內部」部分,選取「內部」,然後點選「下一步」。
- 按一下 [設定]。
基本設定
- 將「Name」(名稱) 設為
be-ilb
。 - 將「區域」設為
us-west1
。 - 將「Network」(網路) 設為
lb-network
。 - 按一下「後端設定」,然後進行以下變更:
- 在「Backends」(後端) 之下的「New item」(新增項目) 區段中,選取
ig-a
執行個體群組。確認「未」勾選「Use this instance group as a failover group for backup」(將這個執行個體群組當做備份用容錯移轉群組)。按一下「完成」。 - 按一下 [Add backend] (新增後端)。在隨後顯示的「New item」(新增項目) 區段中,選取
ig-c
執行個體群組。勾選「Use this instance group as a failover group for backup」(將這個執行個體群組當做備份用容錯移轉群組)。並點選「完成」。 - 在「Health check」(健康狀態檢查) 部分,選擇「Create another health check」(建立另一個健康狀態檢查),輸入以下資訊,然後按一下「Save and continue」(儲存並繼續):
- Name (名稱):
hc-http-80
- Protocol (通訊協定):
HTTP
- Port (通訊埠):
80
- Proxy protocol (Proxy 通訊協定):
NONE
- 要求路徑:
/
請注意,使用 Google Cloud 主控台建立負載平衡器時,系統會啟用全域健康狀態檢查。如要建立區域健康狀態檢查,請使用gcloud
或 API。
- Name (名稱):
- 按一下 [Advanced configurations] (進階設定)。在「Failover policy」(容錯移轉政策) 區段中,設定以下項目:
- 容錯移轉率:
0.75
- 勾選 [Enable connection draining on failover] (啟用「容錯移轉時排除連線」功能)。
- 容錯移轉率:
- 繼續操作之前,請先驗證「Backend configuration」(後端設定) 旁是否有藍色勾號。如果沒有,請檢查這個步驟。
- 在「Backends」(後端) 之下的「New item」(新增項目) 區段中,選取
- 按一下 [Frontend configuration] (前端設定)。在「New Frontend IP and port」區段中,進行以下變更:
- Name (名稱):
fr-ilb
- Subnetwork (子網路):
ilb-subnet
- 在「Internal IP」(內部 IP) 中,選擇「Reserve a static internal IP address」(保留靜態內部 IP 位址),輸入以下資訊,然後按一下「Reserve」(保留):
- Name (名稱):
ip-ilb
- Static IP address (靜態 IP 位址):「Let me choose」(自行選擇)
- Custom IP address (自訂 IP 位址):
10.1.2.99
- Name (名稱):
- 「Ports」(通訊埠):選擇「Single」(單個),然後輸入
80
做為「Port number」(通訊埠編號)。 - 繼續操作之前,請先驗證「Frontend configuration」(前端設定) 旁是否有一個藍色勾號。如果沒有,請檢查這個步驟。
- Name (名稱):
- 按一下 [Review and finalize] (檢查並完成)。請仔細檢查您的設定。
- 按一下 [建立]。
gcloud
建立新的 HTTP 健康狀態檢查,以測試通訊埠 80 上連至 VM 的 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
為後端服務建立轉送規則。建立轉送規則時,請為子網路中的內部 IP 指定
10.1.2.99
。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" }
測試
以下測試示範如何驗證您的負載平衡器設定,並瞭解其預期行為。
用戶端測試程序
這個程序會從用戶端 VM 與負載平衡器聯絡。您將使用這個程序來完成其他測試。
連線至用戶端 VM 執行個體。
gcloud compute ssh vm-client --zone=us-west1-a
使用
curl
聯絡負載平衡器的 IP 位址,向負載平衡器發出網路要求。curl http://10.1.2.99
請注意
curl
指令傳回的文字。產生回應的後端 VM 的名稱會顯示在該文字中;例如:Page served from: vm-a1
測試初始狀態
設定範例負載平衡器後,四個後端 VM 的健康狀態都應良好:
- 兩個主要 VM:
vm-a1
和vm-a2
- 兩個備用 VM:
vm-c1
和vm-c2
依照用戶端測試程序進行操作。重複第二個步驟幾次。預期的行為是由兩個主要 VM (vm-a1
和 vm-a2
) 提供流量,因為這兩個 VM 的健康狀態都良好。由於尚未對這個負載平衡器設定工作階段相依性,因此每個主要 VM 提供回應的時間應大約只有一半。
測試容錯移轉
這項測試會模擬 vm-a1
的故障情形,以便您觀察容錯移轉行為。
連線至
vm-a1
VM。gcloud compute ssh vm-a1 --zone=us-west1-a
停止 Apache 網路伺服器。10 秒後, Google Cloud會將這個 VM 判定為健康狀態不良 (您在設定程序中建立的
hc-http-80
健康狀態檢查會使用預設 5 秒的檢查時間間隔,以及兩次探測作業連續失敗的健康狀態不良門檻)。sudo apachectl stop
依照用戶端測試程序進行操作。重複第二個步驟幾次。預期的行為是由兩個備用 VM (
vm-c1
和vm-c2
) 提供流量。由於只有一個主要 VM (vm-a2
) 的健康狀態良好,所以健康狀態良好的主要 VM 與主要 VM 總數的比例為0.5
。這個數字小於容錯移轉門檻0.75
,因此Google Cloud 會重新設定負載平衡器的使用中集區,以便使用備用 VM。只要尚未對這個負載平衡器設定工作階段相依性,每個備用 VM 提供回應的時間應大約只有一半。
測試容錯回復
這項測試會透過在 vm-a1
上重新啟動 Apache 伺服器來模擬容錯回復作業。
連線至
vm-a1
VM。gcloud compute ssh vm-a1 --zone=us-west1-a
啟動 Apache 網路伺服器,然後等待 10 秒鐘。
sudo apachectl start
依照用戶端測試程序進行操作。重複第二個步驟幾次。預期的行為是由兩個主要 VM (
vm-a1
和vm-a2
) 提供流量。由於兩個主要 VM 的健康狀態都良好,健康狀態良好的主要 VM 與主要 VM 總數的比例為1.0
,大於容錯移轉門檻0.75
,因此 Google Cloud 會再次將使用中集區設定為使用主要 VM。
新增更多後端 VM
本節會將更多主要 VM 和備用 VM 新增至負載平衡器,藉此擴大範例設定。做法是另外建立兩個後端執行個體群組來示範您可以在同一個地區的多個區域之間分配主要 VM 和備用 VM:
- 第三個執行個體群組 (
us-west1-c
中的ig-d
) 會做為包含兩個 VM 的主要後端:vm-d1
vm-d2
- 第四個執行個體群組 (
us-west1-a
中的ig-b
) 會做為包含兩個 VM 的容錯移轉後端:vm-b1
vm-b2
這個範例修改後的架構如下所示:
建立其他 VM 和執行個體群組
如要建立其他主要 VM 和備用 VM 以及其對應的非代管執行個體群組,請按照以下步驟操作。
主控台
建立後端 VM
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
使用下列的名稱和區域組合,重複以下步驟來建立四個 VM。
- 名稱:
vm-b1
,區域:us-west1-a
- 名稱:
vm-b2
,區域:us-west1-a
- 名稱:
vm-d1
,區域:us-west1-c
- 名稱:
vm-d2
,區域:us-west1-c
- 名稱:
點選「建立執行個體」。
按照步驟 2 指定的名稱設定「Name」(名稱)。
在「Region」(區域) 中選擇
us-west1
,然後選擇步驟 2 列出的「Zone」(可用區)。在「Boot disk」(開機磁碟) 專區中,確認所選映像檔為 Debian GNU/Linux 12 (bookworm)。如有需要,請按一下「選擇」,以變更圖片。
按一下「進階選項」,然後進行下列變更:
- 按一下「Networking」(網路),然後新增下列「Network tags」(網路標記):
allow-ssh
和allow-health-check
- 按一下「Network interfaces」下方的編輯按鈕,進行下列變更,然後按一下「Done」:
- Network (網路):
lb-network
- Subnet (子網路):
lb-subnet
- 「Primary internal IP」(主要內部 IP):臨時 (自動)
- External IP (外部 IP):臨時
- Network (網路):
按一下 [Management] (管理)。在「Startup script」(開機指令碼) 欄位中,複製並貼上下列指令碼內容。四個 VM 的指令碼內容完全相同:
#! /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
- 按一下「Networking」(網路),然後新增下列「Network tags」(網路標記):
按一下 [Create] (建立)。
建立執行個體群組
前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。
使用下列組合,重複以下的步驟來建立兩個非代管執行個體群組,每個非代管執行個體群組各包含兩個 VM。
- 執行個體群組:
ig-b
,區域:us-west1-a
,VM:vm-b1
和vm-b2
- 執行個體群組:
ig-d
,區域:us-west1-c
,VM:vm-d1
和vm-d2
- 執行個體群組:
點選「建立執行個體群組」。
按一下「New unmanaged instance group」(新增非代管的執行個體群組)。
按照步驟 2 指定的名稱設定「Name」(名稱)。
在「Location」(位置) 區段,為「Region」(區域) 選擇
us-west1
,然後選擇步驟 2 列出的「Zone」(可用區)。在「Network」中輸入
lb-network
。在「Subnetwork」(子網路) 中輸入
lb-subnet
。在「VM instances」(VM 執行個體) 區段中,按照步驟 2 指定的 VM 新增 VM。
按一下 [建立]。
gcloud
使用下列四個
VM_NAME
和ZONE
組合,透過執行以下指令四次來建立四個 VM。四個 VM 的指令碼內容完全相同。vm-b1
的VM_NAME
和us-west1-a
的ZONE
vm-b2
的VM_NAME
和us-west1-a
的ZONE
vm-d1
的VM_NAME
和us-west1-c
的ZONE
vm-d2
的VM_NAME
和us-west1-c
的ZONE
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
將 VM 新增至適當的執行個體群組:
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。
針對四個 VM,請使用以下 VM 名稱和區域:
vm-b1
的VM_NAME
和us-west1-a
的ZONE
vm-b2
的VM_NAME
和us-west1-a
的ZONE
vm-d1
的VM_NAME
和us-west1-c
的ZONE
vm-d2
的VM_NAME
和us-west1-c
的ZONE
更改下列內容:
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 控制台的「Load balancing」(負載平衡)頁面。
在「Load balancers」(負載平衡器) 分頁中,按一下現有內部 TCP 或內部 UDP 負載平衡器的名稱 (在這個範例中為
be-ilb
)。按一下「編輯」圖示
。在「Backend configuration」(後端設定) 中,按一下「Add backend」(新增後端),然後選取一個非代管執行個體群組 (在這個範例中為
ig-d
)。確認「未」勾選「Use this instance group as a failover group for backup」(將這個執行個體群組當做備份用容錯移轉群組)。
依序按一下 [Done] (完成) 及 [Update] (更新)。
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 控制台的「Load balancing」(負載平衡)頁面。
在「Load balancers」(負載平衡器) 分頁中,按一下現有負載平衡器的名稱,該負載平衡器的類型為 TCP/UDP (內部) (在這個範例中為
be-ilb
)。按一下「編輯」圖示
。在「Backend configuration」(後端設定) 中,按一下「Add backend」(新增後端),然後選取一個非代管執行個體群組 (在這個範例中為
ig-b
)。勾選 [Use this instance group as a failover group for backup] (將這個執行個體群組當做備份用容錯移轉群組)。
依序按一下 [Done] (完成) 及 [Update] (更新)。
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 控制台的「Load balancing」(負載平衡)頁面。
在「Load balancers」(負載平衡器) 分頁中,按一下現有 TCP/UDP (內部) 類型負載平衡器的名稱。
按一下「編輯」圖示
。在「Backend configuration」(後端設定) 中,按一下其中一個後端執行個體群組的名稱,接著:
- 如要將該執行個體群組設為容錯移轉後端,請勾選 [Use this instance group as a failover group for backup] (將這個執行個體群組當做備份用容錯移轉群組)。
- 如要將該執行個體群組設為主要後端,請取消勾選 [Use this instance group as a failover group for backup] (將這個執行個體群組當做備份用容錯移轉群組)。
依序按一下 [Done] (完成) 及 [Update] (更新)。
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
:負載平衡器的地區
設定容錯移轉政策
本節說明如何管理內部直通式網路負載平衡器的後端服務容錯移轉政策。容錯移轉政策包括:
- 容錯移轉率
- 在所有後端 VM 的健康狀態都不良時捨棄流量
- 在容錯移轉時排除連線
如要進一步瞭解容錯移轉政策的參數,請參閱以下說明:
定義容錯移轉政策
以下操作說明描述如何為現有的內部直通式網路負載平衡器定義容錯移轉政策。
主控台
如要使用控制台定義容錯移轉政策,您必須至少有一個容錯移轉後端。 Google Cloud
前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。
在「Load balancers」(負載平衡器) 分頁中,按一下現有負載平衡器的名稱,該負載平衡器的類型為 TCP/UDP (內部)。
按一下「編輯」圖示
。確認您至少有一個容錯移轉後端。負載平衡器至少有一個後端必須選取 [Use this instance group as a failover group for backup] (將這個執行個體群組當做備份用容錯移轉群組)。
按一下 [Advanced configurations] (進階設定)。
- 在「Failover Policy」(容錯移轉政策) 中,將「Failover ratio」(容錯移轉率) 設為介於
0.0
至1.0
(含) 之間的值。 - 如果您想要在所有使用中的 VM 和所有備用 VM 都健康狀態不良時捨棄流量,請勾選 [Enable drop traffic] (啟用捨棄流量) 旁的方塊。
- 如要在容錯移轉期間快速終止現有的連線,請勾選 [Enable connection draining on failover] (啟用「容錯移轉時排除連線」功能) 旁的方塊。
- 在「Failover Policy」(容錯移轉政策) 中,將「Failover ratio」(容錯移轉率) 設為介於
依序按一下 [Review and finalize] (檢查並完成) 及 [Update] (更新)。
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
會指示負載平衡器在所有主要 VM 和所有備用 VM 都健康狀態不良時捨棄流量。當所有後端 VM 都健康狀態不良時,如要在所有主要 VM 之間分配流量,請將其變更為--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
會指示負載平衡器在所有主要 VM 和所有備用 VM 都健康狀態不良時捨棄流量。當所有後端 VM 都健康狀態不良時,如要在所有主要 VM 之間分配流量,請將其設為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 ... }
後續步驟
- 如要瞭解重要的基礎知識,請參閱「內部直通式網路負載平衡器總覽」。
- 如需容錯移轉的重要資訊,請參閱內部直通式網路負載平衡器的容錯移轉概念一文。
- 如需內部直通式網路負載平衡器的設定範例,請參閱「設定內部直通式網路負載平衡器」。
- 如要瞭解如何設定內部直通式網路負載平衡器的記錄和監控功能,請參閱「內部直通式網路負載平衡器記錄和監控」一文。
- 關於如何透過連線至虛擬私人雲端網路的對等互連網路存取內部直通式網路負載平衡器,請參閱「內部直通式網路負載平衡器和已連線網路」一文。
- 如要瞭解如何排解內部直通式網路負載平衡器的問題,請參閱「排解內部直通式網路負載平衡器問題」。
- 清除負載平衡器設定。