Date: 9 3 月, 2018
分步說明:如何配置SQL Server故障轉移群集實例(FCI)在Microsoft Azure IaaS中
7/19/2016更新 – 以下步驟描述了Azure“Classic”中的部署。 如果您要在Azure資源管理器(ARM)中部署SQL群集,那麼您應該在這裡看到我的文章。 https://clusteringformeremortals.com/2016/04/23/deploying-microsoft-sql-server-2014-failover-clusters-in-azure-resource-manager-arm/
在開始之前,我們將假設您至少對故障轉移群集和Microsoft Azure略為熟悉,並且已經註冊了Azure帳戶。在整個分步指南中,我們將參考其他資源以進行額外閱讀。本指南包含屏幕截圖和代碼示例。Azure是一種快速發展的產品,因此您的體驗可能與所描述的不同。但是你應該能夠根據需要進行調整和調整。隨著時間的推移,我會盡力讓本文保持最新狀態。在撰寫本文時,新的Azure門戶仍處於預覽階段。因此,我們將在所有示例中使用當前支持的門戶以及PowerShell。
在高層次上,為了在Azure IaaS上創建高度可用的SQL Server部署,需要採取以下步驟。如果您已經在Azure IaaS中擁有一個正在運行的域,則可以跳過項目1-3。
我們將仔細研究下面的每個步驟。
- 創建您的虛擬網絡
- 創建一個雲服務
- 創建存儲帳戶
- 創建您的Azure虛擬機和存儲
- 配置Active Directory
- 創建一個群集
- 創建複製群集卷資源
- 將SQL安裝到群集中
- 創建一個內部負載平衡器
- 更新客戶端偵聽器
概觀
這些說明假定您希望完全在一個Azure區域內創建高度可用的SQL Server部署。完全有可能在Azure中配置跨越不同地理區域的SQL Server群集,甚至可以配置從內部部署到Azure Cloud的混合雲配置,反之亦然。我不打算在本文檔中涵蓋這些類型的配置。相反,我將關注配置的配置如圖1所示。
本文將介紹如何創建跨越Azure區域中兩個不同的故障域和更新域的群集。跨越不同的故障域消除了與計劃外停機相關的停機時間。跨越不同的更新域可以消除與計劃停機時間相關的故障。
有關其他概述信息,您可能想要觀看我在SQLTIPS上做的網絡研討會,詳細討論了這個主題。可以在http://www.mssqltips.com/sql-server-video/360/highly-available-sql-server-cluster-deployments-in-azure-iaas/上查看它。
創建您的虛擬網絡
為了實現這個目標,您需要在虛擬網絡中擁有所有虛擬機。創建虛擬網絡非常簡單。下面的屏幕截圖應該有助於指導您完成整個過程。
此時我想添加8.8.8.8的Google DNS服務器地址。嘗試使用默認DNS服務器從Microsoft下載更新時,我遇到了奇怪的連接問題。在我們下載完所有這些服務器所需的更新後,我們將返回並用AD控制器的IP地址替換DNS服務器的IP地址。但現在,添加8.8.8.8,並且在此虛擬網絡中供應的所有虛擬機都將通過DHCP服務將其作為DNS服務器接收。此論壇帖子描述了我沒有添加此DNS服務器條目時遇到的問題。在將所有服務器添加到域之前,我發現您需要刪除此8.8.8.8地址並將其替換為您創建的第一個域控制器的IP地址。
你會看到我在這個虛擬網絡中創建了一個子網,並將其標記為Public。稍後當我們創建我們的虛擬機時,我們將使用公共網絡。儘管Azure最近添加了對每個虛擬機多個NIC的支持,但我發現將多個子網和NIC添加到Azure虛擬機可能會產生問題。主要問題是每個NIC都會自動分配一個網關地址,由於在同一台服務器上定義了多個網關,可能會導致路由問題。
創建虛擬網絡需要幾分鐘的時間。
創建一個雲服務
您的虛擬機將全部駐留在相同的“Cloud Service”中。祝您找到Azure“雲服務”的定義,因為Azure整體上是“雲服務”。但是,這是您在開始部署VM之前需要創建的特定於Azure IaaS的特定思路。下面的屏幕截圖將引導您完成整個過程。
確保將Cloud Service放置在與虛擬網絡相同的地區。
創建存儲帳戶
在開始配置VM之前,您必須創建一個存儲帳戶。按照以下步驟創建存儲帳戶。
確保您在與虛擬網絡相同的位置創建存儲帳戶
創建您的Azure VMS和存儲
如果您尚未下載並安裝Azure PowerShell,請立即執行此操作。此外,請確保您設置您的默認訂閱和CurrentStorageAccountName。
我們將開始配置第一台將成為域控制器(DC)的VM。在我們的例子中,我們也將DC用作文件共享見證,因此我們將創建一個可用性集,其中包含域控制器和集群中的兩個節點。以下是一個示例腳本,它將創建VM並為其分配“靜態地址”。
$ AVSet =“SQLHA”
$ InstanceSize =“大”
$ VMNAME =“DC1”
$ AdminName =“myadminaccount”
$ ADMINPASSWORD =“輸入mypassword”
$ PrimarySubnet =“公共”
$ PRIMARYIP =“10.0.0.100”
$ CloudService =“SQLFailover”
$ VirtualNetwork =“Azure的東”
$ ImageName =“a699494373c04fc0bc8f2bb1389d6106__Windows-服務器-2012-R2-201412.01-en.us-127GB.vhd”
$ image = Get-AzureVMImage -ImageName $ ImageName
$ vm = New-AzureVMConfig -Name $ VMName -InstanceSize $ InstanceSize -Image $ image.ImageName -AvailabilitySetName $ AVSet
Add-AzureProvisioningConfig -VM $ vm -Windows -AdminUserName $ AdminName -Password $ AdminPassword
Set-AzureSubnet -SubnetNames $ PrimarySubnet -VM $ vm
Set-AzureStaticVNetIP -IPAddress $ PrimaryIP -VM $ vm
New-AzureVM -ServiceName $ CloudService -VNetName $ VirtualNetwork -VM $ vm
技術說明 – 我說“靜態IP地址”,但它只是創建一個DHCP“請求”。我把它稱為DHCP“Request”而不是“Reservation”,因為它只是一個盡力而為的請求。如果此服務器處於脫機狀態並且某人啟動了新服務器,則DHCP服務器可以將此地址分發給其他人,使其在此服務器處於開啟狀態時不可用。
一旦創建了第一個VM,就可以創建群集中使用的兩個SQL VM。您會看到我試圖通過允許您指定不同的變量來使腳本易於使用。我強調了需要為每個虛擬機更改的變量。
$ AVSet =“SQLHA”
$ InstanceSize =“大”
$ VMNAME =“SQL1”
$ AdminName =“myadminaccount”
$ ADMINPASSWORD =“P @ 55w0rd”
$ PrimarySubnet =“公共”
$ PRIMARYIP =“10.0.0.101”
$ CloudService =“SQLFailover”
$ VirtualNetwork =“Azure的東”
$ ImageName =“a699494373c04fc0bc8f2bb1389d6106__Windows-服務器-2012-R2-201412.01-en.us-127GB.vhd”
$ image = Get-AzureVMImage -ImageName $ ImageName
$ vm = New-AzureVMConfig -Name $ VMName -InstanceSize $ InstanceSize -Image $ image.ImageName -AvailabilitySetName $ AVSet
Add-AzureProvisioningConfig -VM $ vm -Windows -AdminUserName $ AdminName -Password $ AdminPassword
Set-AzureSubnet -SubnetNames $ PrimarySubnet -VM $ vm
Set-AzureStaticVNetIP -IPAddress $ PrimaryIP -VM $ vm
New-AzureVM -ServiceName $ CloudService -VNetName $ VirtualNetwork -VM $ vm
再次運行腳本以配置第二個群集節點
$ AVSet =“SQLHA”
$ InstanceSize =“大”
$ VMNAME =“SQL2”
$ AdminName =“myadminaccount”
$ ADMINPASSWORD =“輸入mypassword”
$ PrimarySubnet =“公共”
$ PRIMARYIP =“10.0.0.102”
$ CloudService =“SQLFailover”
$ VirtualNetwork =“Azure的東”
$ ImageName =“a699494373c04fc0bc8f2bb1389d6106__Windows-服務器-2012-R2-201412.01-en.us-127GB.vhd”
$ image = Get-AzureVMImage -ImageName $ ImageName
$ vm = New-AzureVMConfig -Name $ VMName -InstanceSize $ InstanceSize -Image $ image.ImageName -AvailabilitySetName $ AVSet
Add-AzureProvisioningConfig -VM $ vm -Windows -AdminUserName $ AdminName -Password $ AdminPassword
Set-AzureSubnet -SubnetNames $ PrimarySubnet -VM $ vm
Set-AzureStaticVNetIP -IPAddress $ PrimaryIP -VM $ vm
New-AzureVM -ServiceName $ CloudService -VNetName $ VirtualNetwork -VM $ vm
您會發現每個這些虛擬機都放置在同一個可用性集中,我稱之為“SQLHA”。通過將虛擬機放置在相同的可用性集中,可以利用此處所述的故障域和更新域。 http://blogs.technet.com/b/yungchou/archive/2011/05/16/window-azure-fault-domain-and-update-domain-explained-for-it-pros.aspx
一旦你創建了你的虛擬機,你的Azure Portal應該看起來像這樣。
關於故障域的智慧的話
配置Active Directory
首先我們將通過RDP連接到DC1並啟用活動目錄。使用“連接”按鈕將RDP連接下載到DC1。使用您在創建Azure VM時指定的用戶名和密碼。將DC1升級到域控制器。
內幕提示 – 我還發現,如果您移除DNS服務器上的所有DNS轉發器並且只使用根提示,則DNS解析工作效果最佳。如果您使用他們的DNS服務器,AZURE有時可能會解決微軟網絡性能問題。
創建一個群集
將DC1配置為域控制器後,您將連接到SQL1和SQL2並將它們添加到域中。但是,在執行此操作之前,需要將虛擬網絡的DNS服務器更改為DC1服務器(10.0.0.100)的DNS服務器,然後重新啟動SQL1和SQL2。一旦SQL1和SQL2擁有100.0.0.100作為他們的DNS服務器,您將能夠加入域。
一旦您加入到域中,您將必須完成以下說明的步驟才能創建SQL Server故障轉移群集實例(FCI)。
首先,在每個節點上啟用.Net 3.5 Framework。
如果您發現無法安裝.Net Framework,請參閱我的有關DNS的提示。
啟用故障轉移群集
現在.NET 3.5已啟用,您需要在SQL1和SQL2上啟用故障轉移群集功能。
驗證
一旦啟用了群集功能,您將需要創建群集。第一步是運行集群驗證。我假設你熟悉集群,所以我只會發布一些屏幕截圖並記下你需要考慮的事情。
驗證將完成,但會有一些警告。大多數警告將圍繞存儲。您可以忽略這些,因為我們將使用複制存儲而不是共享磁盤。另外,您可能會收到關於網絡的警告。您也可以忽略該警告,因為我們知道Azure在物理層內置了網絡冗餘。
創建集群接入點
11/24/2015更新 – 我發現通過Powershell創建集群避免了以下GUI步驟中描述的所有這些問題,因為您可以將集群的IP地址指定為創建過程的一部分。下面的兩個PowerShell命令替換本節後面的GUI屏幕截圖中顯示的所有步驟。確保StaticIaddress參數
測試群集節點服務器1,服務器2
New-Cluster -Name MyCluster -Node Server1,Server2 -StaticAddress 10.0.0.200
如果你運行了上面的Powershell腳本,那麼你可以跳過本節的其餘部分,直接跳到下一節創建文件共享見證。
我建議創建單擊完成以啟動群集創建過程。首先為群集選擇一個名稱。
如果您點擊查看報告,您會看到有一些警告。您可以忽略該警告,因為我們將創建一個文件共享見證。
群集創建後,您可能會收到以下消息。“操作”驗證配置…“沒有完成。
修復集群接入點IP地址
這裡的根本問題是由於IP地址衝突,群集沒有正確解析群集名稱。你會發現Azure DHCP實際上給你剛創建的集群計算機對象提供了一個重複的IP地址。這只是您需要處理的奇怪Azure特性之一,如下所示。
您可能需要在SQL2上打開故障轉移群集GUI才能進行連接。一旦能夠連接到群集,您將看到群集獲取了與其中一個群集節點相同的IP地址。這當然會導致IP地址衝突。
我們需要做的是將10.0.0.102 IP地址更改為此子網中未使用的另一個IP地址。
你會看到我選擇10.0.0.200作為我的地址。該地址不在DHCP範圍內保留,因為目前沒有辦法控制DHCP範圍或添加預留。我只是在DHCP範圍的上端選擇一個地址,並確保我沒有在該子網內配置足夠的虛擬機來達到該IP地址。
現在,群集IP地址已修復,您將能夠使用任一節點上的故障轉移群集管理器連接到群集。
創建文件共享見證
接下來,我們將為群集仲裁創建一個文件共享見證。有關群集仲裁的完整說明,請閱讀我在MSDN上的博客文章,http://blogs.msdn.com/b/microsoft_press/archive/2014/04/28/from-the-mvps-understanding-the-windows-server -failover-集群定額功能於Windows的服務器-2012-r2.aspx
文件共享見證將在域控制器上創建。基本上,您需要在DC1上創建文件共享,並為群集計算機帳戶“sioscluster”提供讀/寫權限。確保如下所示對共享和安全權限進行這些更改。
以下步驟在DC1上完成。
新建一個文件夾。
確保搜索計算機對象並選擇群集計算機對象名稱,在我們的示例中為SIOSCLUSTER
確保你給它更改權限。
您還需要更改安全性以允許群集計算機對象修改文件夾的權限。
創建共享文件夾後,您將在任一節點上使用Windows Server故障轉移群集界面添加文件共享見證,如下所示。
安裝DataKeeper
需要來自SIOS Technology的DataKeeper Cluster Edition才能提供複製和集群集成,這將允許您構建無共享存儲的故障轉移群集實例。首先,您將在群集的兩個節點上安裝DataKeeper Cluster Edition。執行如下所示的設置。
出於演示目的,我使用了域管理員帳戶。唯一的要求是所用的用戶帳戶位於每台服務器的本地管理員組中。
創建一個DataKeeper卷資源
在每個群集節點(SQL1和SQL2)上安裝軟件後,即可準備創建第一個複製卷資源。在任一節點上啟動DataKeeper GUI,並按照以下步驟創建DataKeeper卷資源。
連接到兩台服務器後,單擊服務器概覽報告。它應該如下所示。
您會注意到您已連接到兩台服務器,但沒有列出任何卷。接下來,我們需要為每個群集節點添加額外的存儲。通過Azure門戶執行此操作,如下所示。
在為每個虛擬機添加額外卷並創建了格式化分區後,DataKeeper GUI應該如圖所示。
現在可以啟動“創建作業嚮導”並創建DataKeeper卷資源,如下所示。
創建作業,並給它一個名稱和可選的描述。
將SQL安裝到群集中
現在您已經配置了集群並且在可用存儲中安裝了DataKeeper卷,您可以開始安裝SQL Server集群了。該過程與使用共享存儲安裝SQL Server故障轉移群集實例的過程完全相同。由於DataKeeper Replicated Volume資源是一個存儲類資源,因此故障轉移群集將其視為物理磁盤資源。按照下面的步驟將SQL Server安裝到群集中。
您可以使用SQL Server 2014 Standard Edition構建2節點故障轉移群集。在這種情況下,DataKeeper也可以將數據複製到第三個節點,但該節點不能成為集群的一部分。如果要創建3+節點群集,則需要使用SQL Server 2014 Enterprise Edition。SQL的早期版本也可以很好地工作。我已經通過SQL 2014測試了SQL 2008。
在單擊下一步之前,單擊數據目錄選項卡。
一旦SQL安裝在第一個節點上,您將需要在第二個節點上運行安裝。
創建一個內部負載平衡器
一旦配置了集群,您將需要創建將用於所有客戶端訪問的內部負載均衡器(ILB)。連接到SQL Server的客戶端需要連接到ILB,而不是直接連接到群集IP地址。如果此時嘗試直接連接群集,則會看到無法從任何遠程系統連接到群集。即使SQL Server Management Studio也不能直接連接到群集。
從本地桌面運行此Powershell命令以創建您的內部負載均衡器(ILB)。
#定義變量
$ IP =“10.0.0.201”#希望內部負載平衡器使用的IP地址,它應該與您的SQL Server群集IP地址
$ svc =“SQLFailover”#您的雲服務的名稱
$ vmname1 =“sql1”#是您的第一個群集節點的VM的名稱
$ epname1 =“sql1”#這是您要分配給與第一個群集節點關聯的端點的名稱,使用任何您喜歡的
$ vmname2 =“sql2”#是第二個群集節點的VM的名稱
$ epname2 =“sql2”#這是您想要分配給與第二個群集節點關聯的端點的名稱,使用任何您喜歡的
$ lbsetname =“ilbsetsqlha”#使用任何你喜歡的名字,這個名字是不重要的
$ PROT =“TCP”
$ locport = 1433
$ pubport = 1433
$ probeport = 59999
$ ilbname =“sqlcluster”#this是您的客戶端連接的名稱,它應該與您一致SQL集群名稱資源
$ subnetname =“Public”#您希望內部負載均衡器存活的Azure子網名稱
#將內部負載均衡器添加到服務
Add-AzureInternalLoadBalancer -InternalLoadBalancerName $ ilbname -SubnetName $ subnetname -ServiceName $ svc -StaticVNetIPAddress $ IP
#將負載均衡端點添加到主群集節點
Get-AzureVM -ServiceName $ svc -Name $ vmname1 | Add-AzureEndpoint -Name $ epname1 -LBSetName $ lbsetname -Protocol $ prot -LocalPort $ locport -PublicPort $ pubport -ProbePort $ probeport -ProbeProtocol tcp -ProbeIntervalInSeconds 10 -DirectServerReturn $ true -InternalLoadBalancerName $ ilbname |更新AzureVM
#將負載均衡端點添加到輔助群集節點
Get-AzureVM -ServiceName $ svc -Name $ vmname2 | Add-AzureEndpoint -Name $ epname2 -LBSetName $ lbsetname -Protocol $ prot -LocalPort $ locport -PublicPort $ pubport -ProbePort $ probeport -ProbeProtocol tcp -ProbeIntervalInSeconds 10 -DirectServerReturn $ true -InternalLoadBalancerName $ ilbname |更新AzureVM
假設腳本按計劃運行,您應該看到以下輸出。
更新客戶端偵聽器
一旦創建了內部負載均衡器,我們將需要在SQL1上運行Powershell腳本來更新SQL Server群集IP地址。該腳本引用群集網絡名稱和IP資源名稱。下面的圖片顯示您在故障轉移群集管理器中找到這兩個名稱。
下面的腳本應該在其中一個集群節點上運行。確保使用以管理員身份運行啟動Powershell ISE。
#在創建內部負載均衡器後,應在主群集節點上運行此腳本
#定義變量
$ ClusterNetworkName =“集群網絡1”#集群網絡名稱
$ IPResourceName =“SQL IP地址1(sqlcluster)”#IP地址資源名稱
$ CloudServiceIP =“10.0.0.201”#您的內部負載均衡器的IP地址
導入模塊故障轉移群集
#如果您使用的是Windows 2012或更高版本,請使用Get-Cluster Resource命令。如果您使用的是Windows 2008 R2,請使用註釋掉的cluster res命令。
Get-ClusterResource $ IPResourceName | Set-ClusterParameter -Multiple @ {“Address”=“$ CloudServiceIP”;“ProbePort”=“59999”;
子網掩碼=“255.255.255.255”;“網絡”=“$ ClusterNetworkName”;
“OverrideAddressMatch”= 1;“EnableDHCP時”= 0}
#cluster res $ IPResourceName / priv enabledhcp = 0 overrideaddressmatch = 1 address = $ CloudServiceIP probeport = 59999 subnetmask = 255.255.255.255
假設您的腳本按預期運行,輸出應如下所示。您會看到,為了應用更改,您需要將群集資源脫機一次,然後將其聯機。
火牆
每個服務器的防火牆上打開TCP端口59999,1433和1434。
概要
既然已創建群集,則可以使用名稱sqlcluster或直接連接到10.0.0.201,通過內部負載均衡器連接到SQL故障轉移群集實例。
查找有關SQL Server故障轉移群集實例的文章有用,請閱讀我們的其他博客文章。
經Clusteringformeremortal許可轉載