Date: 24 4 月, 2019
循序漸進:如何在Azure中的Windows Server 2008 R2上配置SQL Server 2008 R2故障轉移群集實例
介紹
2019年7月9日,對SQL Server 2008和2008 R2的支持將結束。這意味著定期安全更新的結束。但是,如果將這些SQL Server實例移動到Azure,Microsoft將為您提供三年的擴展安全更新,無需額外費用。如果您當前正在運行SQL Server 2008/2008 R2並且在7月9日截止日期之前無法更新到SQL Server的更高版本,那麼您將希望利用此優惠而不是冒著面臨未來安全漏洞的風險。未修補的SQL Server實例可能導致數據丟失,停機或破壞性數據洩露。
在Azure中運行SQL Server 2008/2008 R2時將面臨的挑戰之一是確保高可用性。在本地,您可能正在運行SQL Server故障轉移群集(FCI)實例以實現高可用性,或者您可能正在虛擬機中運行SQL Server,並且依賴VMware HA或Hyper-V群集來獲取可用性。遷移到Azure時,這些選項都不可用。 Azure中的停機是非常可能的,您必須採取措施來緩解。
為了減少停機的可能性並獲得Azure 99.95%或99.99%SLA的資格,您必須利用SIOS DataKeeper。DataKeeper克服了Azure缺乏共享存儲的問題,並允許您在Azure中構建SQL Server FCI,利用每個實例上的本地連接存儲。SIOS DataKeeper不僅支持本指南中記錄的SQL Server 2008 R2和Windows Server 2008 R2,它支持從2008 R2到Windows Server 2019的任何版本的Windows Server以及從SQL Server 2008到SQL Server 2019的任何版本的SQL Server 。
本指南將介紹在Azure中創建在Windows Server 2008 R2上運行的雙節點SQL Server 2008 R2故障轉移群集實例(FCI)的過程。儘管SIOS DataKeeper還支持跨可用區或區域的群集,但本指南假設每個節點都位於同一個Azure區域,但位於不同的故障域中。將使用SIOS DataKeeper代替創建SQL Server 2008 R2 FCI通常所需的共享存儲。
在Azure中創建第一個SQL Server實例
本指南將利用Azure Marketplace中發布的Windows Server 2008R2映像上的SQL Server 2008R2SP3。
配置第一個實例時,您必須創建新的可用性集。在此過程中,請確保將Fault Domains的數量增加到3。這允許兩個群集節點和文件共享見證每個節點駐留在它們自己的故障域中。
為每個實例添加其他磁盤。建議使用Premium或Ultra SSD。禁用用於SQL日誌文件的磁盤上的緩存。在用於SQL數據文件的磁盤上啟用只讀緩存。有關存儲最佳實踐的其他信息,請參閱Azure虛擬機中的SQL Server性能指南。
如果尚未配置虛擬網絡,請允許創建嚮導為您創建新虛擬網絡。
創建實例後,請進入IP配置並使專用IP地址靜態。這是SIOS DataKeeper所必需的,也是群集實例的最佳實踐。
確保將虛擬網絡配置為將DNS服務器設置為本地Windows AD控制器。這是為了確保您能夠在以後的步驟中加入域。
在Azure中創建結束SQL Server實例
按照上面的相同步驟。除了確保將此實例放在您使用第一個實例創建的同一虛擬網絡和可用性集中。
創建文件共享見證(FSW)實例
為了使Windows Server故障轉移群集(WSFC)以最佳方式工作,您需要創建另一個Windows Server實例並將其放在與SQL Server實例相同的可用性集中。通過將其置於同一可用性集中,可確保每個群集節點和FSW位於不同的故障域中。因此,如果整個故障域脫機,確保您的群集保持在線。此實例不需要SQL Server。它可以是一個簡單的Windows Server,因為它需要做的就是託管一個簡單的文件共享。
此實例將託管WSFC所需的文件共享見證。此實例不需要具有相同的大小,也不需要附加任何其他磁盤。它的唯一目的是託管一個簡單的文件共享。它實際上可以用於其他目的。在我的實驗室環境中,我的FSW也是我的域控制器。
卸載SQL Server 2008 R2
配置的兩個SQL Server實例中的每一個都已經安裝了SQL Server 2008 R2。但是,它們作為獨立的SQL Server實例安裝,而不是群集實例。在我們安裝集群實例之前,必須從每個實例中卸載SQL Server。最簡單的方法是運行SQL安裝程序,如下所示。
運行setup.exe / Action-RunDiscovery時,您將看到所有預安裝的內容
setup.exe / Action-RunDiscovery
運行setup.exe / Action =卸載/ FEATURES = SQL,AS,RS,IS,工具/ INSTANCENAME = MSSQLSERVER啟動卸載過程
setup.exe / Action = Uninstall / FEATURES = SQL,AS,RS,IS,Tools / INSTANCENAME = MSSQLSERVER
運行setup.exe / Action-RunDiscovery確認卸載已完成
setup.exe / Action-RunDiscovery
在第二個實例上再次運行此卸載過程。
將實例添加到域
所有這三個實例都需要添加到Windows域中。
添加Windows故障轉移群集功能
需要將故障轉移群集功能添加到兩個SQL Server實例中
Add-WindowsFeature故障轉移 - 群集
關閉Windows防火牆
為簡單起見,請在安裝和配置SQL Server FCI期間關閉Windows防火牆。有關保護Azure資源的建議,請參閱Azure網絡安全最佳實踐。可以在此處找到所需Windows端口的詳細信息,此處的SQL Server端口和此處的SIOS DataKeeper端口,我們稍後將配置的內部負載均衡器還需要端口59999訪問。因此,請務必在安全配置中考慮到這一點。
NetSh Advfirewall設置allprofiles狀態
安裝Windows Server 2008 R2 SP1的Convenience Rollup更新
為了在Azure中配置Windows Server 2008 R2實例,需要進行關鍵更新(kb2854082)。該更新以及更多內容包含在Windows Server 2008 R2 SP1的便捷匯總更新中。在每個SQL Server實例上安裝此更新。
格式化存儲
配置兩個SQL Server實例時附加的其他磁盤需要格式化。對每個實例上的每個卷執行以下操作。
微軟最佳實踐說如下……
“NTFS分配單元大小:格式化數據磁盤時,建議您對數據和日誌文件以及TempDB使用64 KB的分配單元大小。”
運行群集驗證
運行集群驗證以確保一切準備好進行集群。
您的報告將包含有關存儲和網絡的警告。您可以忽略這些警告,因為我們知道沒有共享磁盤,並且服務器之間只存在單個網絡連接。您可能還會收到有關網絡綁定順序的警告,該警告也可以忽略。如果您遇到任何錯誤,您必須在繼續之前解決這些錯誤。
創建群集
在Azure中創建集群的最佳實踐是使用Powershell,如下所示。Powershell允許我們指定靜態IP地址,而GUI方法則不允許。不幸的是,Azure的DHCP實現與Windows Server Failover Clustering不兼容。如果您使用GUI方法,您將使用重複的IP地址作為群集IP地址。這不是世界末日,但你需要在我展示時解決這個問題。
正如我所說,Powershell方法通常效果最好。但是,出於某種原因,它似乎在Windows Server 2008 R2上失敗,如下所示。
New-Cluster -Name cluster1 -Node sql1,sql2 -StaticAddress 10.1.0.100 -NoStorage
您可以嘗試這種方法,如果它適合您 – 太棒了!我需要回過頭來再研究一下,看看它是不是僥倖。如果Powershell不工作,我需要探索的另一個選項是Cluster.exe。運行cluster / create /?使用不推薦使用的cluster.exe命令提供用於創建集群的正確語法。
但是,如果Powershell或Cluster.exe使您失敗,則以下步驟說明瞭如何通過Windows Server Failover Clustering UI創建群集,包括修復將分配給群集的重複IP地址。
請記住,您在此處指定的名稱只是群集名稱對象(CNO)。這不是SQL客戶端用於連接群集的名稱;我們將在稍後的步驟中定義SQL Server群集設置期間。
此時,已創建群集,但由於重複的IP地址問題,您可能無法使用Windows Server Failover Clustering UI連接到群集。
修復重複的IP地址
如前所述,如果使用GUI創建集群,則無法為集群選擇IP地址。由於您的實例配置為使用DHCP(Azure中需要),因此GUI希望使用DHCP自動為您分配IP地址。遺憾的是,Azure的DHCP實現無法按預期工作,並且群集將分配其中一個節點已使用的相同地址。雖然群集將正確創建,但在解決此問題之前,您將很難連接到群集。
要解決此問題,請從其中一個節點運行以下命令,以確保在該節點上啟動群集服務。
淨啟動clussvc / fq
在同一節點上,您現在應該能夠連接到Windows Server Failover Clustering UI,在那裡您將看到IP地址無法聯機。
打開群集IP地址的屬性並將其從DHCP更改為靜態,並為其分配未使用的IP地址。
將Name資源聯機
添加文件共享見證
接下來我們需要添加文件共享見證。在我們配置為FSW的第三台服務器上,創建一個文件夾並共享它,如下所示。您需要在共享和安全級別授予群集名稱對象(CNO)讀/寫權限,如下所示。
創建共享後,在其中一個群集節點上運行“配置群集仲裁”嚮導,然後按照以下步驟操作。
為DataKeeper創建服務帳戶
我們幾乎準備好安裝DataKeeper。但是,在我們這樣做之前,您需要創建一個Domain帳戶並將其添加到每個SQL Server群集實例上的Local Administrators組。我們將在安裝DataKeeper時指定此帳戶。
安裝DataKeeper
在兩個SQL Server群集節點中的每個節點上安裝DataKeeper,如下所示。
這是我們將指定我們添加到每個本地域管理員組的域帳戶的位置。
配置DataKeeper
在兩個群集節點中的每個節點上安裝DataKeeper後,即可配置DataKeeper。
注 – 以下步驟中遇到的最常見錯誤與安全性相關,通常由預先存在的Azure安全組阻止所需端口。請參閱SIOS文檔以確保服務器可以通過所需的端口進行通信。
首先,您必須連接到兩個節點中的每一個。
如果一切配置正確,您應該在“服務器概述”報告中看到以下內容。
接下來,創建一個新工作並按照下面說明的步驟
在此處選擇“是”以在“可用存儲”中註冊DataKeeper卷資源
為每個卷完成上述步驟。完成後,您應該在Windows Server故障轉移群集UI中看到以下內容。
您現在已準備好將SQL Server安裝到群集中。
注 – 此時,只能在當前託管可用存儲的節點上訪問複製卷。這是預期的,所以不要擔心!
在第一個節點上安裝SQL Server
在第一個節點上,運行SQL Server安裝程序。
選擇“新建SQL Server故障轉移群集安裝”,然後按照說明執行操作。
只選擇您需要的選項。
請注意,本文檔假定您使用的是SQL Server的默認實例。如果使用命名實例,則需要確保鎖定其偵聽的端口,並在配置負載平衡器時使用該端口。您還需要為SQL Server Browser服務(UDP 1434)創建負載平衡器規則,以便連接到命名實例。本指南不涉及這兩個要求。但是,如果您需要命名實例,那麼如果您執行這兩個額外步驟,它將起作用。
在這裡,您需要指定一個未使用的IP地址
轉到“數據目錄”選項卡並重定位數據和日誌文件。在本指南的最後,我們將討論將tempdb重定位到非鏡像DataKeeper卷以獲得最佳性能。現在,只需將其保留在其中一個群集磁盤上即可。
在第二個節點上安裝SQL
在第二個節點上再次運行SQL Server安裝程序。然後,選擇“將節點添加到SQL Server故障轉移群集”。
恭喜你,差不多完成了!但是,由於Azure缺乏對免費ARP的支持,我們需要配置內部負載均衡器(ILB)以協助客戶端重定向,如以下步驟所示。
更新SQL群集IP地址
為了使ILB正常運行,必須從其中一個集群節點運行以下命令。SQL Cluster IP使SQL Cluster IP地址能夠響應ILB運行狀況探測,同時還將子網掩碼設置為255.255.255.255,以避免IP地址與運行狀況探測衝突。
cluster res <IPResourceName> / priv enabledhcp = 0 address = <ILBIP> probeport = 59999 subnetmask = 255.255.255.255
注意 – 我不知道它是不是僥倖。有時候我運行了這個命令,它看起來很有效,但它沒有完成工作,我必須重新開始。我可以判斷它是否有效的方法是查看SQL Server IP資源的子網掩碼。如果它不是255.255.255.255那麼你知道它沒有成功運行。 它可能只是一個GUI刷新問題。請嘗試重新啟動群集GUI以驗證子網掩碼是否已更新。
成功運行後,使資源脫機並將其重新聯機以使更改生效。
創建負載均衡器
最後一步是創建負載均衡器。在這種情況下,我們假設您正在運行SQL Server的默認實例,偵聽端口1433。
創建負載均衡器時定義的專用IP地址將與SQL Server FCI使用的地址完全相同。
僅將兩個SQL Server實例添加到後端池。不要將FSW添加到後端池。
在此負載平衡規則中,您必須啟用浮動IP。
測試群集
最簡單的測試是在被動節點上打開SQL Server Management Studio並連接到群集。恭喜!你連接時你做的一切都正確!如果你無法連接,不要害怕。我寫了一篇博客文章來幫助解決問題。管理群集與管理傳統共享存儲群集完全相同。一切都通過故障轉移群集管理器控制。
可選 – 重定位TempDB
為獲得最佳性能,建議將tempdb移至本地非複制SSD。但是,SQL Server 2008 R2要求tempdb位於群集磁盤上。SIOS有一個稱為非鏡像卷資源的解決方案,可以解決這個問題。建議創建本地SSD驅動器的非鏡像卷資源並在那裡移動tempdb。請注意,本地SSD驅動器是非持久性的。您必須注意確保每次服務器重新啟動時都會重新創建包含tempdb的文件夾和該文件夾的權限。
在創建本地SSD的非鏡像卷資源後,請按照本文中的步驟重新定位tempdb。必須將該文章中描述的啟動腳本添加到每個群集節點。
經Clusteringformeremortals.com許可轉載