將網路負載平衡器從目標集區轉換至區域性後端服務

1. 簡介

本指南提供操作說明,協助您將現有的網路負載平衡器從目標集區後端遷移至區域性後端服務。

課程內容

  • 瞭解區域後端服務的優點
  • 建立具有目標集區的網路負載平衡器
  • 執行目標集區驗證
  • 使用非代管執行個體群組建立區域後端服務
  • 執行目標集區至後端服務的遷移作業
  • 執行後端服務驗證

軟硬體需求

  • 負載平衡器使用經驗

2. 網路負載平衡的區域後端服務總覽

Google Cloud 客戶可透過網路負載平衡這項強大工具,將外部流量分配給 Google Cloud 區域中的虛擬機器。為方便客戶管理傳入流量及控管負載平衡器的行為,我們最近在網路負載平衡中新增了後端服務支援。這可讓客戶在部署時,以易於管理的方式,提升規模、速度、效能和復原能力。

我們現在支援使用網路負載平衡的後端服務,這項重大改良措施取代了先前的目標集區方法。後端服務可定義負載平衡器如何將傳入流量分配給附加的後端,並提供負載平衡器行為的精細控制。

3. 區域性後端服務的優點

選擇區域後端服務做為負載平衡器,可為環境帶來許多優勢。

267db35a58145be.png

區域後端服務一開始就提供下列功能:

  • 透過統一健康狀態檢查進行高保真健康狀態檢查 - 使用區域後端服務時,您現在可以充分運用負載平衡健康狀態檢查功能,擺脫舊版 HTTP 健康狀態檢查的限制。基於法規遵循考量,網路負載平衡客戶經常要求支援自訂要求和回應字串或 HTTPS 的 TCP 健康狀態檢查。
  • 透過容錯移轉群組提升復原能力 - 您可以將執行個體群組指定為主要群組,另一個指定為次要群組,當作用中群組中執行個體的健康狀態低於特定門檻時,即可容錯移轉流量。如要進一步控管容錯移轉機制,可以使用 keepalivedpacemaker 等代理程式,並根據後端執行個體的狀態變化,公開健康狀態檢查的健康或失敗狀態。
  • 使用代管執行個體群組實現可擴充性和高可用性 - 地區後端服務支援將代管執行個體群組做為後端。您現在可以為後端虛擬機器執行個體指定範本,並根據 CPU 使用率或其他監控指標,善用自動調度功能。

除了上述優點,您還能針對連線導向通訊協定 (TCP) 善用連線排空功能,並縮短大型部署作業的程式設計時間。

程式碼研究室網路拓撲

本指南提供操作說明,協助您將現有的網路負載平衡器從目標集區後端遷移至區域性後端服務。

改用區域後端服務後,您就能享有非舊版健康狀態檢查 (適用於 TCP、SSL、HTTP、HTTPS 和 HTTP/2)、代管執行個體群組、連線排除容錯移轉政策等功能。

本指南將逐步說明如何轉換下列以目標集區為基礎的網路負載平衡器,改用區域性後端服務

b2ac8a09e53e27f8.png

先前:使用目標集區的網路負載平衡

部署後端服務型網路負載平衡器後,會如下圖所示。

f628fdad64c83af3.png

之後:具有區域性後端服務的網路負載平衡

這個範例假設您有一個以傳統目標集區為基礎的網路負載平衡器,在 us-central-1a 區域中有兩個執行個體,在 us-central-1c 區域中也有兩個執行個體。

這類轉換作業需要執行下列高階步驟:

  1. 將目標集區執行個體分組至執行個體群組。後端服務僅適用於代管或非代管執行個體群組。請注意,雖然單一目標集區可放置的執行個體數量沒有上限,但執行個體群組有大小上限。如果目標集區的執行個體數量超過上限,您必須將後端分割到多個執行個體群組。如果現有部署作業包含備份目標集區,請為這些執行個體建立個別的執行個體群組。這個執行個體群組將設為容錯移轉群組。
  2. 建立區域後端服務。如果部署作業包含備用目標集區,您需要在建立後端服務時指定容錯移轉率。這應與先前為目標集區部署設定的容錯移轉率相符。
  3. 將先前建立的執行個體群組新增至後端服務。如果部署作業包含備份目標集區,請在將對應的容錯移轉執行個體群組新增至後端服務時,使用 –failover 標記。
  4. 設定指向新後端服務的轉送規則。方法有兩種:
  • (建議) 更新現有的轉送規則,指向後端服務。或
  • 建立指向後端服務的新轉送規則。因此您必須為負載平衡器的前端建立新的 IP 位址。然後修改 DNS 設定,從舊的目標集區型負載平衡器的 IP 位址,順暢轉換至新的 IP 位址。

自修實驗室環境設定

  1. 登入 Cloud 控制台,建立新專案或重複使用現有專案。如果沒有 Gmail 或 Google Workspace 帳戶,請先建立帳戶

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

請記住專案 ID,這是所有 Google Cloud 專案中不重複的名稱 (上述名稱已遭占用,因此不適用於您,抱歉!)。本程式碼研究室稍後會將其稱為 PROJECT_ID

  1. 接著,您必須在 Cloud 控制台中啟用帳單,才能使用 Google Cloud 資源。

完成本程式碼研究室的費用應該不高,甚至完全免費。請務必按照「清除」部分的指示操作,瞭解如何停用資源,避免在本教學課程結束後繼續產生帳單費用。Google Cloud 新使用者可參加價值$300 美元的免費試用計畫。

啟動 Cloud Shell

雖然可以透過筆電遠端操作 Google Cloud,但在本程式碼研究室中,您將使用 Google Cloud Shell,這是可在雲端執行的指令列環境。

在 GCP 主控台,按一下右上角工具列的 Cloud Shell 圖示:

bce75f34b2c53987.png

佈建並連線至環境的作業需要一些時間才能完成。完成後,您應該會看到如下的內容:

f6ef2b5f13479f3a.png

這部虛擬機器搭載各種您需要的開發工具,並提供永久的 5GB 主目錄,而且可在 Google Cloud 運作,大幅提升網路效能並強化驗證功能。本實驗室的所有工作都可在瀏覽器上完成。

登入 Cloud Shell 並設定專案 ID

gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]

Perform setting your projectID:
projectid=YOUR-PROJECT-ID

echo $projectid

4. 建立虛擬私有雲網路

虛擬私有雲網路

透過 Cloud Shell

gcloud compute networks create network-lb --subnet-mode custom

建立子網路

透過 Cloud Shell

gcloud compute networks subnets create network-lb-subnet \
        --network network-lb --range 10.0.0.0/24 --region us-central1

建立防火牆規則

透過 Cloud Shell

gcloud compute --project=$projectid firewall-rules create www-firewall-network-lb --direction=INGRESS --priority=1000 --network=network-lb --action=ALLOW --rules=tcp:80 --source-ranges=0.0.0.0/0 --target-tags=network-lb-tag

建立非代管執行個體

在每個區域 (us-central1-a 和 us-central1-c) 中建立 2 個執行個體

從 Cloud Shell 建立執行個體 1

gcloud compute instances create www1 \
--subnet network-lb-subnet \
--image-family debian-9 \
--image-project debian-cloud \
--zone us-central1-a \
--tags network-lb-tag \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install apache2 -y
sudo service apache2 restart
echo '<!doctype html><html><body><h1>www1</h1></body></html>' | tee /var/www/html/index.html"

從 Cloud Shell 建立執行個體 2

gcloud compute instances create www2 \
--subnet network-lb-subnet \
--image-family debian-9 \
--image-project debian-cloud \
--zone us-central1-a \
--tags network-lb-tag \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install apache2 -y
sudo service apache2 restart 
echo '<!doctype html><html><body><h1>www2</h1></body></html>' | tee /var/www/html/index.html"

從 Cloud Shell 建立執行個體 3

gcloud compute instances create www3 \
--subnet network-lb-subnet \
--image-family debian-9 \
--image-project debian-cloud \
--zone us-central1-c \
--tags network-lb-tag \
--metadata startup-script="#! /bin/bash
sudo apt-get update 
sudo apt-get install apache2 -y 
sudo service apache2 restart 
echo '<!doctype html><html><body><h1>www3</h1></body></html>' | tee /var/www/html/index.html"

從 Cloud Shell 建立執行個體 4

gcloud compute instances create www4 \
--subnet network-lb-subnet \
--image-family debian-9 \
--image-project debian-cloud \
--zone us-central1-c \
--tags network-lb-tag \
--metadata startup-script="#! /bin/bash
sudo apt-get update 
sudo apt-get install apache2 -y 
sudo service apache2 restart
echo '<!doctype html><html><body><h1>www4</h1></body></html>' | tee /var/www/html/index.html"

建立防火牆規則,允許外部流量傳送至這些 VM 執行個體

透過 Cloud Shell

gcloud compute --project=$projectid firewall-rules create www-firewall-network-lb --direction=INGRESS --priority=1000 --network=network-lb --action=ALLOW --rules=tcp:80 --source-ranges=0.0.0.0/0 --target-tags=network-lb-tag

為負載平衡器建立靜態外部 IP 位址

透過 Cloud Shell

gcloud compute addresses create network-lb-ip-1 \
    --region us-central1

新增舊版 HTTP 健康狀態檢查資源

透過 Cloud Shell

gcloud compute http-health-checks create basic-check

5. 建立轉送規則和目標集區

建立目標集區

gcloud compute target-pools create www-pool \
            --region us-central1 --http-health-check basic-check

將執行個體新增至目標集區 us-central1-a

gcloud compute target-pools add-instances www-pool \
--instances www1,www2 \
--instances-zone us-central1-a

將執行個體新增至目標集區 us-central1-c

gcloud compute target-pools add-instances www-pool \
--instances www3,www4 \
--instances-zone us-central1-c

新增轉送規則

gcloud compute forwarding-rules create www-rule \
--region us-central1 \
--ports 80 \
--address network-lb-ip-1 \
--target-pool www-pool

驗證目標集區功能

依序選取「Load Balancers」→「Frontends (www-rule)」,找出前端 IP 位址

從工作站終端機使用 curl 指令存取外部 IP 位址,並觀察四個目標執行個體之間的負載平衡。驗證完成後,請關閉終端機。

while true; do curl -m1 IP_ADDRESS; done

6. 將網路負載平衡器從目標集區轉換至後端服務

為後端服務建立統一健康狀態檢查

gcloud compute health-checks create tcp my-tcp-health-check --port 80 --region us-central1

從目標集區的現有執行個體建立執行個體群組

gcloud compute --project=$projectid instance-groups unmanaged create www-instance-group-central1a --zone=us-central1-a

gcloud compute --project=$projectid instance-groups unmanaged add-instances www-instance-group-central1a --zone=us-central1-a --instances=www1,www2

從目標集區的現有執行個體建立執行個體群組

gcloud compute --project=$projectid instance-groups unmanaged create www-instance-group-central1c --zone=us-central1-c

gcloud compute --project=$projectid instance-groups unmanaged add-instances www-instance-group-central1c --zone=us-central1-c --instances=www3,www4

建立後端服務,並與新建立的健康狀態檢查建立關聯

gcloud compute backend-services create my-backend-service --region us-central1 --health-checks my-tcp-health-check --health-checks-region us-central1 --load-balancing-scheme external

設定後端服務並新增執行個體群組

gcloud compute backend-services add-backend my-backend-service --instance-group www-instance-group-central1a --instance-group-zone us-central1-a --region us-central1

gcloud compute backend-services add-backend my-backend-service --instance-group www-instance-group-central1c --instance-group-zone us-central1-c --region us-central1

更新現有的轉送規則,以支援後端服務

執行下列操作,記下轉送規則名稱「www-rule」和相關聯的 IP 位址:

選取「Load Balancer」→「Frontends」

此外,也請注意四個目標集區

選取「Load Balancer」→ 選取「www-pool」

更新現有的轉送規則,將流量轉送至後端服務

gcloud compute forwarding-rules set-target www-rule --region=us-central1 --backend-service my-backend-service --region us-central1

確認負載平衡器「www-pool」不再設定前端「www-rule」(請參閱下方的螢幕截圖)

選取「Load Balancer」→「www-pool」

9a393b3ca4e0942c.png

確認前端轉送規則現在已與負載平衡器「my-backend-service」建立關聯

選取「Load Balancer」→「Frontends」

請注意,規則名稱「www-rule」的 IP 位址已保留,且負載平衡器「my-backend-service」現在正在使用中

在工作站終端機中使用 curl 指令存取外部 IP 位址,並觀察新關聯後端服務的負載平衡。驗證完成後,請關閉終端機。

while true; do curl -m1 IP_ADDRESS; done

7. 清除步驟

gcloud compute forwarding-rules delete www-rule --region=us-central1 --quiet
 
gcloud compute backend-services delete my-backend-service --region us-central1 --quiet
 
gcloud compute target-pools delete www-pool --region us-central1 --quiet
 
gcloud compute addresses delete network-lb-ip-1 --region us-central1 --quiet

gcloud compute firewall-rules delete www-firewall-network-lb --quiet
 
gcloud compute instances delete www4 --zone us-central1-c --quiet
 
gcloud compute instances delete www3 --zone us-central1-c --quiet
 
gcloud compute instances delete www2 --zone us-central1-a --quiet

gcloud compute instances delete www1 --zone us-central1-a --quiet
 
gcloud compute networks subnets delete network-lb-subnet --region us-central1 --quiet

gcloud compute networks delete network-lb --quiet

gcloud compute instance-groups unmanaged delete www-instance-group-central1a --zone us-central1-a --quiet

gcloud compute instance-groups unmanaged delete www-instance-group-central1c --zone us-central1-c --quiet

8. 恭喜!

恭喜您完成本程式碼研究室。

涵蓋內容

  • 瞭解區域後端服務的優點
  • 建立具有目標集區的網路負載平衡器
  • 執行目標集區驗證
  • 使用非代管執行個體群組建立區域後端服務
  • 執行目標集區至後端服務的遷移作業
  • 執行後端服務驗證