[SQL]架設多重子網路(Multi-subnet) 的 AlwaysON 環境

透過 Azure Virtual Network 來建設 Multi-subnet AlwaysON 的環境,演練異地備援的處理

從 SQL Server 2012 開始,就有新的 AlwaysON 可以來作使用,讓 SQL Server 可以不用共用 Storage 的方式來達到容錯移轉,之前也有架設幾次,但這次剛好有個狀況,需要透過非同步模式將資料傳送到 DR Site,基本上安裝和設定沒有太大的差異,只是有些細節怕自己忘記,趁著還有印象的時候整理一下思緒,把步驟給整理出來。

1. 設定 Lab 環境網段

在我的規劃中,預計會有 PROD Site 和 DR Site 分在不同地區,在 PROD Site 中,利用 AlwaysON 的同步模式來做到高可用性。但如果有異常的時候,可以切換到 DR Site 來做異地備援。因為如果在地端要架 VM 來做 Lab 的話,那麼還要中間架設一台來做網路封包繞送,因此我就偷懶直接使用 Azure 上的 VM,並且利用 Azure Virtual Network 和 Subnet 來架設模擬。

因此我建立兩個子網路來使用,這樣因為在同一個虛擬網路下,不用作任何設定,就可以讓兩個子網路之間是可以連接的。


2. 安裝 AD 

在 Azure 環境搞定之後,接下來我就規劃以下幾台 VM 來做 Lab,因為我還是採用 Windows 的環境,因此在原本的架構上,要在兩個 Subnet 上面,都各有一台 DC

基本上安裝 AD 並沒有甚麼特別的難度,這裡我就不累述了。這裡比較要被記錄下來的,就是安裝好之後,雖然在 AD 上面可以看到有兩台 DC

但最好還是要透過 repadmin 的指令,來檢查一下 DC 之間的同步是否有問題,如果有異常的話,可能就會讓 DR Site 的加入叢集的時候會有異常。


3. 建立叢集

當 DC 弄好之後 , 接下來就要把三台 SQL Server 的電腦加入網域,並且安裝叢集服務,這裡有點要注意一下,如果您是採用 Azure 的 VM,要注意這個 VM 最好能使用 DS2 以上的等級,否則安裝叢集的時候可能會有一些異常的狀況發生,之前測試時採用 DS1 等級時發生幾次時好時壞的狀況,改成 DS2_V2 等級的就正常了。 

在建立叢集的時候,可以先把 PROD Site 建立好叢集,再把 DR Site 的電腦給加入,或者是建立的時候一起建立也都可以。我是習慣建立的時候就一併加入到叢集內,再來進行設定

完成之後預設叢集可能會沒有正常啟動起來,因此可能要調整一下 IP 的設定

將原本兩個網段的叢集 IP ,由預設採用 DHCP 改成靜態 IP。

而且要記得將兩組 IP 的相依性設定為 或 ( or ),這樣叢集服務就可以正常啟動了。

因為我們的 Lab 在 PROD Site 只有兩台 Server,這裡我們利用共享檔案來做仲裁,所以就借用 AD 的一個共享目錄來做處理,要記得把分享給叢集電腦名稱,允許完全控制。

也要注意安全性的設定

並且透過叢集管理員設定好仲裁後,叢集應該就沒有問題了。


4. 建立 gMSA ( global Management Service Account )

在 DC 上面先建立 RootKey , 此部分需要在 DC 上面利用 Powershell 來建立

# 正式環境使用,但要等 10 小時
Add-KdsRootKey –EffectiveImmediately

# 測試環境改用以下立即生效
# Add-KdsRootKey –EffectiveTime ((get-date).addhours(-10))

接下來建立一個安全性群組 , 將要納入的 Server 包含在內,這裡我先使用一個 AlwaysON-gMSAGroup 的群組

建立好之後,再使用 PowerShell 的指令來建立管理服務帳號

New-ADServiceAccount -Name AlwaysON-gMSA -DNSHostName AlwaysON-gMSA.5L2F.com -PrincipalsAllowedToRetrieveManagedPassword "AlwaysON-gMSAGroup"

此時在 DC 內就可以查看到帳號被建立起來了。

此時要到 SQL1 , SQL2 , SQL3 這三台電腦上,先重新開機一次,再分別利用 Powershell 去將電腦加入 gMSA 帳號

# 安裝套件
Import-Module ActiveDirectory

# 設定帳號
Install-AdServiceAccount AlwaysON-gMSA

# 測試帳號是否可使用
Test-AdServiceAccount AlwaysON-gMSA

5. 建立 AlwaysON

在 SQL  電腦上,透過「電腦管理」,使用 SQL Server 伺服器管理員,將 SQL 指定啟用 AlwaysON 可用性群組

並且調整登入帳號為前面步驟所建立的管理服務帳號

這樣就可以進到 SQL Server 內,透過可用性群組精靈來做相關設定。基本上透過 Wizard 的方式,設定起來是蠻容易的,這裡要先注意防火牆的設定,因為預設 Windows 的防火牆是啟用的,因此這裡用 DOS Command 的方式,將我們需要使用的給先開啟,方便後續的設定

netsh advfirewall firewall add rule name="SQL Server"    dir=in action=allow protocol=TCP localport=1433
netsh advfirewall firewall add rule name="SQL Browser"   dir=in action=allow protocol=UDP localport=1434
netsh advfirewall firewall add rule name="SQL AlwaysON"  dir=in action=allow protocol=TCP localport=5022

當我們使用新增可用性群組精靈,就按照提示一步一步設定

這裡我們將 PROD Site 下的 SQL Server 設定為「自動容錯移轉」,並且採用「同步認可」的模式。但對於 DR Site,我們就使用「手動移轉」,並且搭配「非同步認可」的模式

而監聽程式的部分也特別要注意一下,要同時設定有 PROD Site 和 DR Site 的 IP,而且這個不能跟前面的 Cluster IP 設定為相同的。

很快就可以完成相關設定了,我們也可以透過儀表板,順利地做相關移轉切換了。