技術專欄

集結國內外精選文章,掌握最新雲端技術新知與應用 

iKala Cloud / 部落格 / 基礎架構 / [手把手教學] 如何在 Google Cloud 上跑 Windows Server 容錯移轉叢集 (一)

[手把手教學] 如何在 Google Cloud 上跑 Windows Server 容錯移轉叢集 (一)

Running Windows Server Failover Clustering on GCP (1)

手把手介紹如何在 Google Platform 上面建立 Windows Server 容錯移轉叢集並達到IIS Web Application HA 的效果。此篇為上集從 GCP 新增資源到 AD 服務建置並加入 AD 內做管理。

本篇架構參考 Google 官方文件的 Running Windows Server Failover Clustering。主要針對整體操作完整的手把手教學並針對細節描述。而針對讀者在閱讀上更能融入整體教學,稍微調整了原文的順序。

開始前,我們先稍微看一下整體架構的目標與嘗試解決的問題。

Windows Server Architecture High Level Overview

–  主要服務主機 (primary instance),放置於 Google Compute Engine 中,運行 Windows Server 2016 與相關服務
–  備援主機 (second instance),配置同於主要主機
–  一組 AD domain name 主機 (DNS). 用於:

- 提供 Windows domain.
- 解決 hostnames 與 IP 配對.
- 在叢集內用來決定誰是當前的主要服務主機與備援主機. 相關內容請參考[required quorum for the cluster](https://technet.microsoft.com/en-us/library/jj612870.aspx)

Windows server 整體架構網路路由

當整個叢集進行容錯移轉時,當前的網路請求 (requests) 會被派送至最新的啟用端點(active node)。一般來說叢集技術會透過 address resolution protocol (ARP) 處理路由,處理 IP 與 MAC addresses 配對。在 GCP 服務中,Virtual Private Cloud (VPC) 支援軟體來定義網路 (software-defined networking) 的相關功能,所以在此我們不用提供實際的 MAC addresses 就可以達到叢集進行容錯移轉的功能。這也意味者,我們需要透過一個軟體服務來幫我們建立內部的負載平衡器來讓當前的路由運作。

通常來說,一般內網的負載平衡器負責分擔並分散來自於同一 VPC 內的大量後端主機的網絡流量,而對於叢集容錯移轉來說,我們會將全部流入該內部負載平衡器進入端口 (incoming) 的流量轉至當前啟用的容錯節點 (active cluster node),而如何判斷當下節點可以作為啟用的容錯節點則依據下方規則:

•  每個 VM 當作一個運行中的 Compute Engine VM 為 Windows 提供叢集容錯移轉支援。會有代理持續追蹤相關的 IP 位址。
•  負載平衡器的前端 (frontend) 提供 IP 作為程序應用的進入端點。
•  負載平衡器的後端 (backend) 負責所有主機的健康狀態檢查。通過特定端口定期在每個群集節點上由 ping 進行回應確認。默認開放的端口 (port) 是 59998。
•  運行狀況檢查包括應用程序的 IP 是否能作為請求中的有效內容。
•  代理將請求中的 IP 與主機 VM 內 IP 列表進行比較。如果代理找到匹配的項目,則它的值為 1 否則,就以 0 作為回應。
•  負載平衡器將任何通過運行狀況檢查的虛擬機標記為健康狀態。這邊需要注意的是,只能一台虛擬機通過運行狀況檢查,因為一次只能有一台虛擬機具有工作負載的 IP 地址。

如何進行 Windows server 容錯轉移 (failover)

當叢集需要進行容錯轉移時,會有下面的處理步驟:

1. Windows failover clustering 更改當前運行中的節點識別狀態從 active 至 failed
2. Failover clustering 服務將當前 failing node 上的角色與功能轉換給最適合承接的節點繼續工作,這個判斷是由法定人數判斷 (defined by the quorum). 而此轉移也包含了 負載平衡上後端 IP 與當前運行的主機 VM 的指派轉換.
3. 當轉移完成,原先運行的節點健康狀態會從 1 改為 0。而最新接手啟用的節點健康裝況會從 0 改為 1,由此表示接手完成。
4. 而內部的負載平衡器也會將流量轉至當前運作的節點中繼續運作。

將上述概念整合

當了解上面的概念後,可以回顧一下此架構的一些特點:

•  The Compute Engine agent for the VM named wsfc-2 is responding to the health check with the value 1, indicating it is the active cluster node. For wsfc-1, the response is 0.
•  The load balancer is routing requests to wsfc-2, as indicated by the arrow.
•  The load balancer and wsfc-2both have the IP address 10.0.0.9. For the load balancer, this is the specified frontend IP address. For the VM, it’s the IP address of the application. The failover cluster sets this IP address on the currently active node.
•  The failover cluster and wsfc-2 both have the IP address 10.0.0.8. The VM has this IP address because it currently hosts the cluster resources.

Objectives

整個流程會達成下面幾個目標:

上半部

•  建立網路 (network)
•  建立兩台 Windows Server 2016 Compute Engine 虛擬機 (VM).
•  建立並設定第三台 Windows Server 2016 Compute Engine 虛擬機 (VM) 具備 Active Directory 功能。

下半部

•  設定容錯移轉叢集 (failover cluster),並建文件共享見證 (file share witness for the quorum) 和工作負載的角色 (role).
•  設定內部負載平衡器.
•  測試容錯轉移的操作並驗證叢及運作正常.

Prerequisite

1. 建立新專案或是從既有專案中選擇做為目標專案. 點此至GCP資源入口

2. 確定當前專案有啟用帳單功能. 更多關於啟用帳單的功能google.com/billing/docs/how-to/modify-project)

 data-lazy-src=

 data-lazy-src=

透過 Cloud Launcher 建立 VM

本次演示的範例全部都用 Cloud Shell 透過 cmd 建立,這邊只是同步介紹一下在先前相關的文章 Google Cloud Platform Introduction 中,有稍微提及了如何透過 Cloud Launcher 來幫我們建立一個 VM,這邊快速複習一下:

首先在你的 Computed Engine 按下右鍵後,下方可以看到 Cloud Launcher 的選項:

 width=

輸入想要查詢的 VM 名稱即可顯示出當前的過濾結果:

 data-lazy-src=

首先建置叢集需要一個客製的 GCP 網路,而我們可以透過 Cloud Shell 指令來幫我們建立 VPC 所需的網路設定。

這邊先建置一個名為 wsfcnet 的網路:

gcloud compute networks create wsfcnet --subnet-mode custom

 data-lazy-src=

 data-lazy-src=

 data-lazy-src=

 data-lazy-src=

 data-lazy-src=

接著我們增加一個 metadata 用來啟動 Computed Engine Agent 上的叢集容錯機制:

gcloud compute project-info add-metadata --metadata enable-wsfc=true

 data-lazy-src=

Creating the Windows server on Google Computed Engine

可透過 GCP Cloud Shell 查詢 GCP 上的 Zone 與 Region 識別號

gcloud compute zones list

 data-lazy-src=

•  建立新的 instance 名稱為 wsfc-1.
•  透過 flag 設定 –zone 指定你想配置的資源在何處. 置換指令中的 [YOUR_ZONE],如 us-central1-a.
•  透過 flag 設定 –machine-type 為 n1-standard-2.
•  透過 flag 設定 –image-project 為 windows-cloud.
•  透過 flag 設定 –image-family 為 windows-2016.
•  透過 flag 設定 –scopes 為 https://www.googleapis.com/auth/compute.
•  透過 flag 設定 –can-ip-forward flag 啟用 IP forwarding.
•  透過 flag 設定 –private-network-ip 為 10.0.0.4.
•  設定網路為 wsfcnet 並一併設定 subnetwork 至 wsfcnetsub1.

指令如下:

gcloud compute instances create wsfc-1 --zone [YOUR_ZONE] --machine-type n1-standard-2 --image-project windows-cloud --image-family windows-2016 --scopes https://www.googleapis.com/auth/compute --can-ip-forward --private-network-ip 10.0.0.4 --network wsfcnet --subnet wsfcnetsub1

建立第二台 cluster-node server

跟建立第一台 cluster-node 概念相同,只是我們置換了以下兩項設定:

•  建立新的 instance 名稱為 wsfc-2.
•  透過 flag 設定 –private-network-ip 為 10.0.0.5.

gcloud compute instances create wsfc-2 –zone [YOUR_ZONE] –machine-type n1-standard-2 –image-project windows-cloud –image-family windows-2016 –scopes https://www.googleapis.com/auth/compute –can-ip-forward –private-network-ip 10.0.0.5 –network wsfcnet –subnet wsfcnetsub1

建立第三台 Active Directory Windows server

步驟與第一台相同,一樣置換了以下兩項設定:

•  建立新的 instance 名稱為 wsfc-dc.
•  透過 flag 設定 –private-network-ip 為 10.0.0.ˊ.
gcloud compute instances create wsfc-dc –zone [YOUR_ZONE] –machine-type n1-standard-2 –image-project windows-cloud –image-family windows-2016 –scopes https://www.googleapis.com/auth/compute –can-ip-forward –private-network-ip 10.0.0.6 –network wsfcnet –subnet wsfcnetsub1

當我們三台做完後可以看到結果如下:

 data-lazy-src=

我們可以透過以下兩個指令幫我們建立一個新的 Computed Engine Instance Group ,並將我們已建立的資源加入這個新的群組當中 :

gcloud compute instance-groups unmanaged create wsfc-group --zone=[YOUR_ZONE]
gcloud compute instance-groups unmanaged add-instances wsfc-group --instances wsfc-1,wsfc-2 --zone [YOUR_ZONE]

 data-lazy-src=

接著我們就可以直接登入當前三台新建立的 VM 環境:

 data-lazy-src=

Configuring Windows server networking

在我們遠端登入新建立的主機後,我們就要開始進行內部配置的IP變更,首先我們需要先將三台網路建立一個內網的 subnet:

gcloud compute networks subnets describe wsfcnetsub1 --region [YOUR_REGION]

Configuring Windows server networking

上面我們要注意的是 gatewayAddress的這個值。

然後我們需要一台台進入VM設定每一台的 IPV4 區網如下:

1. 配置 IP:
     •  wsfc-1 配置 10.0.0.4.
     •  wsfc-2 配置 10.0.0.5.
     •  wsfc-dc 配置 10.0.0.6.
2. 設定 Subnet mask 為 255.255.0.0
3. 設定 Default gateway 的值為 wsfcnetsub1 提供的 IP(這邊就是 10.0.0.1),如果是 wsfc-dc 則保留為空值。
4. 設定 Preferred DNS server 為 10.0.0.6
5. 這邊會建議重啟三台 VM ,確保設定會即時生效
每一台的設定步驟如下:

 data-lazy-src=

接著針對 AD 的 wsfc-dc instance ,我們要進行以下配置:

•  設定 local Administator account 的密碼(這步驟不做無法完成後續安裝…)
•  啟用 local Administator account
•  建立 AD 服務,這邊只要一步步透過步驟即可完成,只要注意設定如下:
     •  將此電腦升為 domain controller
     •  
新增一個 forest ,並將名稱設定為 WSFC.TEST
     •  
設定 NetBIOS 網域名稱為 WSFC (系統會自動抓取,只要稍微注意一下即可).

詳細的步驟內容可以參考微軟官方的教學 MICROSOFT INSTRUCTIONS

 data-lazy-src=

 data-lazy-src=

在等待重開機完成後,可以透過 Active Directory Users and Computers 來新增網域使用者:

•  在 WSFC.TEST 網域內建立新帳號,名稱為 clusteruser
•  將 clusteruser 加入 administrator 內

 data-lazy-src=

將 cluster-node server 加入網域內

接著我們登入兩台 cluster-node server 完成以下配置:

•  前往 Server Manager > Local Server 在 Properties 修改 WORKGROUP
•  將 Domain 切換至 WSFC.TEST”,這邊透過 WSFC.TEST\clusteruser 來提供權限完成設定
•  重啟該電腦
•  重啟完成後將 clusteruser 設為 wsfc-1 與 wsfc-2 的 administrator
•  前往 Computer Management > Local Users and Groups > Groups > Administrators 點選新增
•  輸入 clusteruser 並確認名稱後完成設定

 data-lazy-src=

關於 Compute Engine 你該知道的那些事:為你的 VM 挑選正確的授權模式

 

(本文來自合作部落客 Blackie:Blackie’s Failed Notes,GCP 專門家授權轉載。)

 

分享本文:
FacebookLineTwitter
回到頂端