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

1. 簡介

本指南提供將現有網路負載平衡器從目標集區後端轉換為區域性後端服務的操作說明。

課程內容

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

軟硬體需求

  • 擁有負載平衡器的經驗

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

Google Cloud 客戶可利用網路負載平衡功能強大的工具,將外部流量分配給 Google Cloud 區域中的虛擬機器。為了讓客戶能更輕鬆地管理連入流量與控制負載平衡器的行為,我們最近在網路負載平衡中新增了後端服務的支援功能。讓客戶在部署時,也能輕鬆管理規模、速度、效能和彈性。

現在我們可透過網路負載平衡支援後端服務,這是與前述的目標集區相比,這是一項重大強化措施。後端服務會定義負載平衡器如何將連入流量分配到連接的後端,並精細控管負載平衡器的行為。

3. 區域後端服務的優點

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

267db35a58145be.png

在資料中心之外,區域性後端服務提供以下功能:

  • 透過整合式健康狀態檢查提供精準的健康狀態檢查:透過區域後端服務,您現在可以充分利用負載平衡健康狀態檢查功能,擺脫舊版 HTTP 健康狀態檢查的限制。為遵循法規,如果 TCP 健康狀態檢查支援自訂要求和回應字串,或 HTTPS 是網路負載平衡客戶經常提出的要求,
  • 容錯移轉群組彈性更高 - 透過容錯移轉群組,您可以將執行個體群組指定為主要執行個體群組,另一個則指定為次要群組,之後當有效群組中的執行個體健康狀態低於特定門檻時,即可容錯移轉流量。如要進一步控管容錯移轉機制,您可以使用代理程式 (例如 keepalivedpacemaker),根據後端執行個體狀態的變更顯示健康狀態良好或失敗的健康狀態檢查。
  • 透過代管執行個體群組提供擴充性和高可用性:區域性後端服務支援以代管執行個體群組做為後端。您現在可以為後端虛擬機器執行個體指定範本,並依據 CPU 使用率或其他監控指標使用自動調度資源功能。

除了上述方法外,您將能充分運用連線導向通訊協定 (TCP) 的連線排除功能,以及縮短大型部署作業的程式設計時間。

程式碼研究室的網路拓撲

本指南提供將現有網路負載平衡器從目標集區後端轉換為區域性後端服務的操作說明。

將資料移至區域後端服務,您就能充分運用多項功能,例如非舊版健康狀態檢查 (適用於 TCP、SSL、HTTP、HTTPS 和 HTTP/2)、代管執行個體群組、連線排除,以及容錯移轉政策

本指南將逐步引導您轉換下列以目標集區為基礎的網路負載平衡器範例,改為使用區域性後端服務

b2ac8a09e53e27f8.png

變更前:具有目標集區的網路負載平衡

輸出內容的後端服務型網路負載平衡器部署作業應會如下所示。

f628fdad64c83af3.png

變更後:使用區域性後端服務的網路負載平衡

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

轉換所需的高階步驟如下:

  1. 將目標集區執行個體分組。後端服務只能與代管或非代管執行個體群組搭配使用。請注意,可放入單一目標集區的執行個體數量沒有限制,但執行個體群組具有大小上限。如果目標集區的執行個體數量超過上限,您必須將後端的後端分割至多個執行個體群組。如果現有的部署項目包含備用目標集區,請為這些執行個體建立單獨的執行個體群組。系統會將這個執行個體群組設為容錯移轉群組。
  2. 建立區域性後端服務。如果部署作業包含備用目標集區,則在建立後端服務時,您必須指定容錯移轉比率。這個值應與先前為目標集區部署作業設定的容錯移轉率相符。
  3. 將執行個體群組 (先前建立) 新增至後端服務。如果您的部署作業含有備用目標集區,請在將對應的容錯移轉執行個體群組新增至後端服務時,將標示為「失敗」標記標記出來。
  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 並設定 projectid

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) 建立 2 個執行個體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 位址,請執行下列指令:

選取負載平衡器 → 前端

還指出了 4 個目標集區

選取負載平衡器 → 選取「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. 恭喜!

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

涵蓋內容

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