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

1. 簡介

本指南會說明如何將現有的網路負載平衡器從目標集區後端遷移至區域性後端服務。

課程內容

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

軟硬體需求

  • 負載平衡器相關經驗

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

有了網路負載平衡器,Google Cloud 客戶就能使用這項強大的工具,在 Google Cloud 區域中的虛擬機器之間分配外部流量。為了讓客戶能更輕鬆地管理連入流量,並控制負載平衡器的行為,我們最近在 Network Load Balancing 新增了後端服務的支援功能。這可讓客戶在部署時提升規模、速度、效能和彈性,而且還能輕鬆管理。

我們現在支援使用網路負載平衡器的後端服務,這項功能相較於先前的目標集區方法,有顯著的進步。後端服務會定義負載平衡器如何將連入流量分配到連接的後端,並精細控管負載平衡器的行為。

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 區域有 2 個執行個體。

這類轉換作業所需的高階步驟如下:

  1. 將目標集區執行個體分組。後端服務僅適用於代管或非代管的執行個體群組。請注意,雖然單一目標集區可放置的執行個體數量沒有限制,但執行個體群組有最大群組大小限制。如果目標集區的執行個體數量超過這個上限,您就必須將其後端分割到多個執行個體群組。如果現有的部署作業包含備份目標資源池,請為這些執行個體建立個別的執行個體群組。這個執行個體群組會設為容錯移轉群組。
  2. 建立區域性後端服務。如果部署作業包含備用目標集區,您需要在建立後端服務時指定容錯移轉率。這應與先前為目標集區部署作業所設定的容錯移轉率相符。
  3. 將先前建立的執行個體群組新增至後端服務。如果部署作業包含備用目標集區,請在將對應的容錯移轉執行個體群組新增至後端服務時,加上 –failover 標記。
  4. 設定指向新後端服務的轉送規則。您有 2 種選擇:
  • (建議做法) 更新現有的轉送規則,使其指向後端服務。或
  • 建立指向後端服務的新轉送。您必須為負載平衡器的前端建立新的 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,這是一種在 Cloud 中執行的指令列環境。

在 GCP 控制台的右上方,按一下「Cloud Shell」圖示:

bce75f34b2c53987.png

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

f6ef2b5f13479f3a.png

這個虛擬機器會載入您需要的所有開發工具。提供永久的 5 GB 主目錄,而且在 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

建立非代管執行個體

為每個區域建立 2 個執行個體,即 us-central1-a 和 us-central1-c

從 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

驗證目標集區功能

依序選取負載平衡器 →「前端」(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 位址:

依序選取「負載平衡器」→「前端」

另外,請注意四個目標集區

選取負載平衡器 → 選取「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」(請參閱下方螢幕截圖)

選取負載平衡器 → www-pool

9a393b3ca4e0942c.png

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

依序選取「負載平衡器」→「前端」

請注意,系統會保留規則名稱「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. 恭喜!

恭喜您完成程式碼研究室!

涵蓋內容

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