使用 Microsoft IIS 後端調整跨地區負載平衡

本教學課程說明如何使用 Google Compute Engine 的 HTTP(S) 負載平衡器服務,將流量分配給跨不同 Compute Engine 地區Microsoft Internet Information Services (IIS) 網路伺服器

情境

您必須平均分配 www.example.com 網站的流量。您希望確保傳入的要求可轉送到最近的地區;不過,您還希望確保在發生故障或地區中的執行個體達到容量上限時,這些要求可以容錯移轉至次近地區中健康狀態良好的執行個體。

完成此狀況的設定後,您將擁有可通過單一全域 IP 位址接收要求的 HTTP(S) 負載平衡器。這個 IP 位址將根據連線類型 (HTTP 或 HTTPS) 轉送每個傳入要求。針對 HTTPS 要求,負載平衡器會在發送要求的用戶端和負載平衡器之間實施 SSL/TLS 加密。

下方圖表說明負載平衡器的架構:

跨地區負載平衡圖表

請注意,為達到最佳配置,負載平衡器包含多個元件。如需每個元件的功能說明,請參閱 HTTP(S) 負載平衡總覽

事前準備

本教學課程假設:

設定後端執行個體

在本節中,您將在不同的地區建立兩個後端服務。每個後端服務將包含兩個後端執行個體,每個執行個體都在 Windows Server 2012 上執行 Microsoft IIS 網路伺服器。為避免對每個伺服器費力地進行手動設定,您將透過一個伺服器執行個體建立磁碟映像檔,然後使用此映像檔建立其他伺服器執行個體。

建立來源映像檔執行個體

如何建立可當做來源映像檔的執行個體:

  1. 在本機 Windows 電腦上,開啟 PowerShell。
  2. us-central1 地區,建立新的 Windows Server 2012 執行個體,並且將 rdp-tagwww-tag 標記新增至執行個體。接下來,您將透過建立指定這些標記的防火牆規則來啟用對執行個體的外部存取權:

    PS C:\> gcloud compute instances create src-img ^
         --zone us-central1-f --image windows-2012-r2 ^
         --tags rdp-tag,www-tag

在您建立來源映像檔執行個體後,設定防火牆規則以允許執行個體的外部存取權:

  1. 建立防火牆規則以允許所有標示 rdp-tag 執行個體上的通訊埠 3389 外部存取權。此規則將允許使用 RDP 存取來源映像檔執行個體,以及任何使用 rdp-tag 標記的後續執行個體:

    PS C:\> gcloud compute firewall-rules create rdp-rule ^
         --allow tcp:3389 --source-ranges 0.0.0.0/0 ^
         --target-tags rdp-tag
  2. 建立另一個防火牆規則以允許所有標示 www-tag 執行個體上的通訊埠 80 外部存取權。此規則將允許來源映像檔執行個體,以及任何使用 www-tag 標記的後續執行個體傳送和接收 HTTP 流量:

     PS C:> gcloud compute firewall-rules create www-rule ^
         --allow tcp:80 --source-ranges 0.0.0.0/0 ^
         --target-tags www-tag

設定來源映像檔執行個體

接著,在來源映像檔執行個體上建立新的 Windows 使用者,並建立 RDP 連線:

  1. 透過網路瀏覽器造訪 GCP Console 中的「VM instances」(VM 執行個體) 頁面,然後按一下來源映像檔執行個體的名稱 (src-img)。
  2. 按一下 [Set Windows password] (設定 Windows 密碼) 按鈕。
  3. 在 [Set new Windows password] (設定新的 Windows 密碼) 對話方塊中,新增您的使用者名稱,然後按一下 [Set] (設定),在執行個體上建立使用者帳戶。
  4. 複製提供的密碼並關閉對話方塊。
  5. 在執行個體的主控台頁面,按一下 [RDP]

    • 如果您已安裝 Google Cloud Platform 適用的 Chrome RDP 擴充功能,擴充功能視窗隨即開啟。確認您要連線至執行個體,輸入您的使用者名稱和密碼,然後按一下 [OK] (確定),連線至執行個體。
    • 如果您選擇不安裝 Chrome RDP 擴充功能,則可以選擇下載執行個體的 RDP 檔案。使用此檔案即可利用 Windows 遠端桌面連線,或偏好的第三方用戶端來連線至執行個體。

在您使用來源映像檔執行個體建立 RDP 連線後,請安裝 IIS 並新增預設首頁:

  1. 在您的來源映像檔執行個體上,以管理員身分開啟 PowerShell。
  2. 在 PowerShell,張貼以下內容來安裝 IIS 服務和依附元件:

    PS C:\> Dism /Online /Enable-Feature /FeatureName:IIS-WebServerRole /FeatureName:IIS-WebServer /FeatureName:IIS-StaticContent /FeatureName:IIS-DefaultDocument /FeatureName:IIS-DirectoryBrowsing /FeatureName:IIS-HttpErrors /FeatureName:IIS-HealthAndDiagnostics /FeatureName:IIS-HttpLogging /FeatureName:IIS-LoggingLibraries /FeatureName:IIS-RequestMonitor /FeatureName:IIS-Security /FeatureName:IIS-RequestFiltering /FeatureName:IIS-HttpCompressionStatic /FeatureName:IIS-WebServerManagementTools /FeatureName:IIS-ManagementConsole /FeatureName:WAS-WindowsActivationService /FeatureName:WAS-ProcessModel /FeatureName:WAS-NetFxEnvironment /FeatureName:WAS-ConfigurationAPI /All
  3. 安裝服務後,在 C:\inetpub\wwwroot (IIS 的預設分類目錄) 建立一個新主頁:

    PS C:\> Echo '<!doctype html><html><body><h1>Hello World!</h1></body></html>' > C:\inetpub\wwwroot\index.html

確認您的來源映像檔執行個體可提供內容

在網路瀏覽器中,前往「VM instances」(VM 執行個體) 頁面。按一下執行個體的外部 IP,以確認它是否為您先前建立的主頁提供服務。

透過來源映像檔執行個體建立可使用的 Windows Server 2012 映像檔

確認您的來源映像檔執行個體已正確設定且能提供內容,透過執行個體的根永久磁碟建立可重複使用的磁碟映像檔:

  1. 在您的來源映像檔執行個體上,以管理員身分開啟 PowerShell。
  2. 執行下列指令,讓您的系統進行複製的準備作業:

     PS C:> GCESysprep

    GCESysprep 操作完成後,系統會自動中斷您的 RDP 工作階段連線。

  3. 在本機上,執行以下指令以刪除來源執行個體,而保留其根永久磁碟:

     PS C:> gcloud compute instances delete src-img --keep-disks boot

  4. 刪除執行個體之後,透過您保留的根永久磁碟來建立新的映像檔:

     PS C:> gcloud compute images create win-be-img --source-disk src-img --source-disk-zone us-central1-f

使用您的來源映像檔建立執行個體範本

現在您已透過設定的 Windows 伺服器建立磁碟映像檔,您可以將該映像檔做為執行個體範本的來源映像檔。稍後,您將設定兩個代管執行個體群組,這些群組會使用這個範本建立執行新的個體。

在本機上,執行以下指令以建立執行個體範本,使用 win-be-img 做為來源映像檔以及 rdp-tagwww-tag 做為執行個體標記:

PS C:\> gcloud compute instance-templates create win-be-tmpl ^
    --tags rdp-tag,www-tag ^
    --image win-be-img

為每個地區建立代管執行個體群組

接下來,在每個地區建立代管執行個體群組。在您建立每個執行個體群組後,該群組將根據您先前定義的執行個體範本以兩個相同的執行個體納入群組本身。稍後,您將設定負載平衡器,以將這些執行個體群組視為後端目標。

如何建立代管執行個體群組:

  1. 在本機上,執行以下指令以在 us-central1-f 區域建立代管執行個體群組,並且用兩個相同的執行個體納入群組本身:

     PS C:> gcloud compute instance-groups managed create us-be-group ^
          --base-instance-name us ^
          --size 2 ^
          --zone us-central1-f ^
          --template win-be-tmpl

  2. europe-west1-d 區域完成同樣設定:

    PS C:\> gcloud compute instance-groups managed create eu-be-group ^
          --base-instance-name eu ^
          --size 2 ^
          --zone europe-west1-d ^
          --template win-be-tmpl

確認您的後端執行個體正在執行

在網路瀏覽器中,前往「VM instances」(VM 執行個體) 頁面。按一下每個後端的外部 IP,以確認該後端是否為您先前建立的主頁提供服務。

建立及設定負載平衡服務

Compute Engine 負載平衡服務包含數個元件。在本節中,您將建立這些元件,並且把元件串連在一起。

  1. 在本機上,執行以下指令以建立新的健康狀態檢查。您的負載平衡器將使用此健康狀態檢查,檢查後端執行個體的健康狀態:

    PS C:\> gcloud compute http-health-checks create basic-check
  2. 建立後端服務

    PS C:\> gcloud compute backend-services create be-srv ^
          --protocol HTTP --http-health-check basic-check
  3. 將執行個體群組新增為後端服務的後端目標:

    PS C:\> gcloud beta compute backend-services add-backend be-srv ^
          --instance-group us-be-group --zone us-central1-f
    PS C:\> gcloud beta compute backend-services add-backend be-srv ^
          --instance-group eu-be-group --zone europe-west1-d
  4. 建立預設網址對應,將所有連入要求導向您的所有執行個體:

    PS C:\> gcloud compute url-maps create lb-map --default-service be-srv
  5. 建立 SSL 憑證來源。您的負載平衡器將使用此資源來對流量進行加密及解密。

    如果您已擁有來自憑證授權單位的私密金鑰和 SSL 憑證,您可以執行以下指令使用上述內容來建立新的 SSLCertificate。如果沒有的話,您可以建立和使用自行簽署的憑證來進行測試。詳情請參閱 SSL 憑證一文。

    執行下列指令即可建立 SSL 憑證來源。用您的憑證本機檔案路徑來取代 <crt_file_path>,並且用私密金鑰的檔案路徑來取代 <key_file_path>

    PS C:\> gcloud beta compute ssl-certificates create www-cert ^
    --certificate  --private-key 
  6. 建立目標 HTTP 和 HTTPS Proxy,要求轉送至您的網址對應。Proxy 是負載平衡器的一部分,用於保存 HTTPS 負載平衡的 SSL 憑證,因此您還可以在此步驟中載入憑證:

     PS C:> gcloud compute target-http-proxies create http-lb-proxy ^
          --url-map lb-map
     PS C:> gcloud beta compute target-https-proxies create https-lb-proxy ^
          --url-map lb-map --ssl-certificate www-cert

  7. 為了讓負載平衡器穩定地接收流量,您必須為負載平衡器的通用轉送規則分配全域靜態 IP 位址。如要建立全域靜態 IP 位址,請執行下列指令:

     PS C:> gcloud compute addresses create lb-ip --global

    請記下 IP 位址。

  8. 建立兩個通用轉送規則來處理連入的 HTTP 和 HTTPS 要求。每個轉送規則都會根據指定的 IP 位址、IP 通訊協定以及通訊埠,將流量傳送到您建立的其中一個目標 Proxy。

    用您在上一步建立的靜態 IP 位址,取代以下指令中的 <lb_ip_addr>

    PS C:\> gcloud compute forwarding-rules create http-fwd-rule ^
          --address  --global ^
          --target-http-proxy http-lb-proxy --port-range 80
    PS C:\> gcloud beta compute forwarding-rules create https-fwd-rule ^
          --address  --global ^
          --target-https-proxy https-lb-proxy --port-range 443

在建立通用轉送規則後,您的設定可能需要幾分鐘才會傳播。如要查看傳播進度,您可以在 Google Cloud Platform 主控台或本機上執行以下指令:

PS C:\> gcloud compute backend-services get-health be-srv

將流量傳送到後端

您已設定負載平衡服務,可以開始向轉送規則傳送流量,並觀察流量是否分散到不同的執行個體。

如何將流量傳送到後端:

  1. GCP Console 中開啟「HTTP(S) load balancer」(HTTP(S) 負載平衡器) 頁面
  2. 按一下 [Incoming traffic] (連入流量) 欄的 IP 位址。畫面會顯示預設首頁。

限制後端的存取權

確認一切正常運作後,修改防火牆規則,讓 HTTP(S) 流量只能來自您的負載平衡服務:

  1. 在本機電腦上,執行下列指令以更新 www-rule 防火牆規則。將允許的來源 IP 限制在 130.211.0.0/22 範圍內,也就是 HTTP(S) 負載平衡健康狀態檢查 IP 範圍:

    PS C:\> gcloud compute firewall-rules update www-rule ^
           --source-ranges 130.211.0.0/22 ^
           --target-tags www-tag
  2. 在網路瀏覽器中,前往「VM instances」(VM 執行個體) 頁面

  3. 按一下每個執行個體,確認該執行個體已無法存取。

模擬服務中斷

您可以模擬地區中一或多個執行個體的服務中斷,以便觀察如何在剩餘的健康狀態良好執行個體之間平衡負載。

如何阻止執行個體接收其他要求:

  1. 建立 RDP 連線到執行個體。
  2. 在執行個體上,以系統管理員身分開啟 PowerShell。
  3. 執行下列指令,在執行個體上建立新的防火牆規則。此指令會封鎖來自健康狀態檢查工具的健康狀態檢查流量,並阻止從負載平衡器到執行個體的所有新 HTTP 連線:

    PS C:\> netsh advfirewall firewall add rule name="Outage Test" protocol=tcp dir=in localport=80 action=block remoteip=130.211.0.0/22
  4. 在本機電腦上,執行以下指令以確認執行個體現在會回報 UNHEALTHY 狀態:

    PS C:\> gcloud compute backend-services get-health be-srv
  5. 在執行個體開始回報 UNHEALTHY 狀態後,傳送要求至負載平衡器。健康狀態良好的執行個體必須回應。

  6. 完成模擬中斷後,您可以透過刪除防火牆規則來恢復執行個體的連線。在健康狀態不佳的執行個體上,以管理員身分開啟 PowerShell 之後,請執行以下指令來刪除規則:

    PS C:\> netsh advfirewall firewall delete rule name="Outage Test"

清除所用資源

完成 Microsoft IIS 教學課程後,您就可以清除在 GCP 上建立的資源,這樣資源就不會占用配額,您日後也無須為其付費。下列各節將說明如何刪除或停用這些資源。

刪除您的 Cloud Platform 專案

如要避免付費,最簡單的方法就是刪除您為了本教學課程所建立的專案。

如要刪除專案,請執行以下操作:

  1. 前往 GCP Console 中的「Manage resources」(管理資源) 頁面。

    前往「Manage resources」(管理資源) 頁面

  2. 在專案清單中選取您要刪除的專案,然後按一下「Delete」(刪除) 圖示
  3. 在對話方塊中輸入專案 ID,然後按一下 [Shut down] (關閉) 以刪除專案。

刪除執行個體

如何刪除 Compute Engine 執行個體:

  1. 前往 GCP Console 的「VM Instances」(VM 執行個體) 頁面。

    前往「VM Instances」(VM 執行個體) 頁面

  2. 勾選您要刪除的執行個體相應核取方塊。
  3. 按一下 [Delete] (刪除) ,藉此刪除執行個體。

刪除永久磁碟

如何刪除 Compute Engine 磁碟:

  1. 前往 GCP Console 的「Disks」(磁碟) 頁面。

    前往「Disks」(磁碟) 頁面

  2. 按一下 您要刪除的磁盤的核取方塊。
  3. 按一下「Delete」(刪除) 圖示 以刪除磁碟。

後續步驟

進一步瞭解如何在 Compute Engine 上使用 Windows

請參閱 Compute Engine 上的 Windows 執行個體文件。

試試其他教學課程

歡迎親自試用其他的 Google Cloud Platform 功能,並參考我們的教學課程

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Compute Engine 說明文件