標籤:
1. AlwaysOn介紹
AlwaysOn是SQL Server 2012提供的全新綜合、靈活、高效經濟的高可用性和災難恢複解決方案。它整合了鏡像和群集的功能,基於OS 容錯移轉叢集(Windows Server FailOver Cluster),通過在同一個WSFC的不同Node上,安裝獨立的SQL Server執行個體,定義AlwaysOn Group,一個資料庫最多可以部署4個鏡像。當熱備機出現故障時,可以手工或自動實現容錯移轉,交換主、輔資料庫的角色。
AlwaysOn的亮點在於鏡像可讀。對於OLTP應用,可以將讀操作集中的報表等操作轉移到Read-Only的輔助庫上,極大地減少Primary DB的IO、CPU等資源佔用。由於輔助庫是獨立的SQL執行個體,因此建立暫存資料表等TempDB操作不受影響。
1.1. 可用性模式 同步提交
同步提交模式下,主要資料庫事務提交前,通知輔資料庫,直到輔資料庫提交成功後,主要資料庫成功提交。
優點:資料受到完整保護,不會存在資料不一致。
缺點:事務執行時間延長,效率降低。
非同步提交
非同步提交模式下,主要資料庫獨立提交事務,不必等待輔資料庫同步,同時將資料寫入日誌,輔資料庫通過交易記錄同步資料。
優點:事務執行時間不受輔資料庫影響,效率高。
缺點:資料同步存在延時。
*註:我們曾經測試過SQL 2008鏡像非同步提交和同步提交的效率,非同步模式下,延時的時間基本可以忽略,在大事務情況下,延時也僅在秒級。而同步模式下,一旦輔資料庫出現異常,如網路連接等錯誤,那麼主要資料庫將掛起,對於系統的影響巨大。
考慮到報表對於資料即時性的要求在秒級以內完全可以接受,我們建議使用非同步提交模式。
1.2. 容錯移轉模式 手動轉移(不存在資料丟失)
主、輔庫都是同步提交模式,且容錯移轉為手動,由SSMS發起FailOver命令。
自動轉移(不存在資料丟失)
主、輔庫都是同步提交模式,且容錯移轉為自動,不受人為控制,由WSFC自動仲裁。
強制轉移(存在資料丟失)
主庫是非同步提交模式,且容錯移轉為手動,由SSMS發起FailOver命令。由於某種原因,主、輔庫資料不同步,必須使用強制模式實現容錯移轉,此時可能存在資料丟失的情況,通常應用於突發的災難恢複。當主、輔庫SQL執行個體均從災難中恢複正常後,可以通過資料移動功能確保資料同步。
可用性模式和容錯移轉模式相容表:
1.3. 主、輔資料庫連接方式
DotNetFramework 4. 0以後版本,為了相容新的災難恢複AlwaysOn Cluster資料庫,串連串中增加了一個屬性ApplicationIntent,用於標識應用程式串連到資料庫的方式,ApplicationIntent有三種選項:
1) Null。不設定ApplicationIntent,預設為ReadWrite,相容.NET 4.0以前的串連串。
2) ReadWrite。
3) ReadOnly
應用程式通過AlwaysOn群集的DNS訪問資料庫群集時,首先路由到主要資料庫,然後根據應用程式串連的模式(Null、ReadWrite、ReadOnly)選擇是否路由到Read-Only輔助庫。
? 主要資料庫串連方式
a) 允許所有串連。當我們設定主要資料庫允許所有串連時,應用程式任何時候都可以串連到資料庫群集。
b) 允許讀/寫串連。當我們設定主要資料庫只允許讀/寫串連時,ApplicationIntent= ReadOnly的應用程式串連將被阻止,並拋出異常“資料庫不允許唯讀串連”。
? 輔資料庫是否允許唯讀
a) NO。輔資料庫不允許讀操作。
b) Read-Intent Only。輔資料庫唯讀,且只允許ReadOnly串連。此選項意味著只能通過SqlCmd –K ReadOnly、PowerShell、或者ApplicationIntent=ReadOnly的應用程式串連資料庫。我們通常使用SSMS串連到該資料庫是被禁止的。
c) Yes。輔資料庫唯讀,且相容以前的串連方式。此選項意味著可以通過任何串連方式串連到輔資料庫,且輔資料庫唯讀。
典型應用情境:
2. 安裝準備工作
安裝作業系統群集和MSDTC,見《SQL2008群集配置指南(windows 2008)》。
3. 配置AlwaysOn 3.1. 啟動服務
SQL服務->啟用AlwaysOn可用性群組,重啟SQL服務。各叢集節點相同。
3.2. 設定資料庫完整復原模式
在主要資料庫上,將資料庫設定為完整復原模式
3.3. 完整備份資料庫
完整備份資料庫,可放在任意目錄下。
3.4. 設定共用目錄
在主要資料庫上,設定網際網路共用目錄,設定everyOne可寫入權限。主要資料庫會將Transaction Log自動備份到共用目錄,輔助庫通過Transaction Log同步資料。
3.5. 建立AlwaysOn Group
任意指定可用性群組名,如U9AvailableGroup。
選中已經備份的資料庫,這裡會校正是否滿足要求,只有滿足要求的DB才能選擇。
DB1為主要資料庫,一旦發生容錯移轉作為輔資料庫時,我們同樣希望它可讀,設定Readable Secondary為Yes。
端點頁簽,預設值,勿修改。
備份策略,輔資料庫優先。
建立接聽程式,偵聽1433連接埠,設定AlwaysOn群集IP。
回到副本頁簽,點擊“添加副本”。
串連到輔資料庫。
設定輔資料庫可讀,Readable Secondary=yes。下一步。
指定3.4節中設定的共用目錄。由於我們要做叢集的庫只在DB1上存在,我們希望自動在DB2上還原一個相同的庫,選擇Full。可以根據不同情況選擇其它兩項。
驗證可用性群組,如果出現異常,必須按提示修複異常資訊,直到成功。
點擊完成即可。
全部成功即完成。
3.6. 設定串連方式
在主要資料庫上,AlwaysOn High Availability->可用性群組->上一部建立的可用性群組->滑鼠右鍵->屬性。
設定如下,Connections In Primary Role全部為允許所有串連,Readable Secondary全部為Yes。
3.7. 檢查Read-Only Routing List
步驟1:在主要資料庫->Master資料庫上,執行如下SQL:
Select * from sys.availability_read_only_routing_lists,查看返回結果,如下:
因為我們的AlwaysOn 群集有兩個Node,因此Routing List中應有兩條記錄。OK,檢查通過。否則執行步驟2:
步驟2:在主要資料庫上執行以下SQL:
ALTER AVAILABILITY GROUP U9AvailableGroup
MODIFY REPLICA ON
N‘DB1‘ WITH
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N‘TCP://DB1.u9erp.com:1433‘));
ALTER AVAILABILITY GROUP U9AvailableGroup
MODIFY REPLICA ON
N‘DB2‘ WITH
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N‘TCP://DB2.u9erp.com:1433‘));
ALTER AVAILABILITY GROUP U9AvailableGroup
MODIFY REPLICA ON
N‘DB1‘ WITH
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=(‘DB2‘,‘DB1‘)));
*註:U9AvailableGroup為建立的可用性群組名;DB1、DB2分別為主要資料庫、輔資料庫名稱。
再次檢查Routing List,應已添加了兩條記錄。
3.8. 檢查資料庫同步情況
步驟1:檢查主要資料庫,使用SSMS串連到主要資料庫。
主要資料庫狀態應為已同步,可用性資料庫應正常運行。見圖中紅色部分。
步驟2:檢查輔助庫,使用SSMS串連到輔助庫。
由於我們選擇的是非同步提交模式,因此輔助庫顯示正在同步,正常。可用性資料庫運行正常。
3.9. 測試Read-Only Routing
我們希望當已ReadOnly方式串連資料庫群集時,預設情況下,將請求轉寄到Read-Only輔助庫,可以通過Sqlcmd命令測試路由情況,在命令列中執行下列命令:
步驟1:Sqlcmd –S [群集DNS] –E –d [群集庫名] –K ReadOnly
*註:注意-K大寫。
步驟2:Select @@ServerName
步驟3:Go
DB2為ReadOnly輔助庫,測試結果返回DB2,正常。
如果返回DB1,則說明輔助庫路由沒有起作用,請檢查3.6節和3.7節設定是否正確。
4. SQL Server 2012 ReportService KB
SQL Server 2012 ReportService運行在.NET 2.0下,安裝完SQL Server 2012後,再安裝微軟補丁KB2654347。
Windows 2008 R2 ,需要安裝windows 6.1補丁;Windows 2008 SP2,需要安裝windows 6.0補丁,見附件。
5. U9配置
和SQL Server 2008配置相同,在U9組態管理工具中添加SQL Server叢集地址,串連資料庫伺服器。U9報表等查詢負載自動轉移到從節點。
SQLServer 2012 Always on是針對高可用性和災難恢複的新解決方案。可以配置一個或多個輔助副本以支援對次要資料庫進行唯讀訪問,並且可以將任何輔助副本配置為允許對次要資料庫進行備份。 這樣就提供了硬體的使用效率。
“可用性群組”針對一組離散的使用者資料庫(稱為“可用性資料庫”,它們共同實現容錯移轉)支援容錯移轉環境。一個可用性群組支援一組主要資料庫以及一至四組對應的次要資料庫。可用性群組在可用性複本層級進行容錯移轉。容錯移轉不是由諸如因資料檔案丟失或交易記錄損壞而使資料庫成為可疑資料庫等資料庫問題導致的。
每組可用性資料庫都由一個“可用性複本”承載。有兩種類型的可用性複本:一個“主副本”和一到四個“輔助副本”。前者用於承載主要資料庫,後者則承載一組次要資料庫並作為可用性群組的潛在容錯移轉目標。主副本使主要資料庫可用於用戶端的讀寫串連。此外,它在稱為“資料同步”的過程中使用,在資料庫層級進行同步。主副本將每個主要資料庫的交易記錄記錄發送到每個次要資料庫。每個輔助副本緩衝交易記錄記錄(“硬化”日誌),然後將它們應用到相應的次要資料庫。主要資料庫與每個串連的次要資料庫獨立進行資料同步。因此,一個次要資料庫可以掛起或失敗而不會影響其他次要資料庫,一個主要資料庫可以掛起或失敗而不會影響其他主要資料庫。
或者,您可以配置一個或多個輔助副本以支援對次要資料庫進行唯讀訪問,並且可以將任何輔助副本配置為允許對次要資料庫進行備份。部署 AlwaysOn可用性群組需要一個Windows Server容錯移轉叢集 (WSFC)群集。
圖顯示一個可用性群組,該組包含最大數目的可用性複本,即一個主副本和四個輔助副本。
來自:http://msdn.microsoft.com/zh-cn/library/ff877884.aspx
雖然2012 Always on是基於WSFC的,但是並不需要共用儲存,所以配置就非常簡單。
下面是我的安裝步驟:
至少需要三台機器(我建立了三台虛擬機器,一台是作為DC,DNS伺服器,兩台Nod3)
機器名 |
角色 |
OS |
IP Address |
DC |
Domain Controller |
Windows 2008R2 |
192.168.1.10 |
Node1 |
Cluster Node 1 |
Windows 2008R2 |
192.168.1.11 Public 192.168.2.1 心跳線 |
Node2 |
Cluster Node 2 |
Windows 2008R2 |
192.168.1.12 Public 192.168.2.2 心跳線表單底端
|
首先配置Windows叢集:
1. 安裝.NETFramework 3.5.1 Features和Failover Clustering
2. 安裝Windows KB 2494036
3.建立叢集
4.選擇加入叢集的伺服器:
5.檢測配置:
6.不需要選擇檢測共用磁碟(AlwaysOn不需要)
7.開始檢測:
8.檢測內容(檢測完成後可以匯出Report):
9.之後輸入Cluster名字和IP點擊下一步建立成功,成功後開啟Server Manager查看叢集配置(可以看到並沒有共用磁碟,跟傳統的叢集還是有區別的)
由於我們只使用了兩台機器,所以當一台機器Down掉之後就沒有仲裁了,無法成功轉移。當使用多節點做仲裁,可以使用三台Node,這樣一台Down掉之後另外兩台可以做仲裁。如果兩個Node,不使用共用磁碟可以使用Share檔案的方式,具體的配置可以參考:http://www.sqlskills.com/blogs/jonathan/failover-clustering-without-a-san-sql-server-2012-and-smb-for-shared-storage/(之前沒有配置這一步,雖然AlwaysOn層級可以Failover,但是真正一台Node Down掉之後就不行了,感謝@struggle1指出這個問題。)
現在我們叢集已經配置後了,下一步是安裝SQLServer並且配置Always On.
Part1中我們已經配置了Cluster,Part2 我們安裝SQL Server 2012 評估版(要使用64位的SQLServer, X86不支援Always On)並且配置Alaways On Group. 1. 以管理員身份安裝
2.選擇單機安裝(不是叢集安裝)
3.SQL Server 2012的新功能,可以在安裝的時候搜尋最新的補丁,將補丁也以前安裝(這個是可選項)
4.規則檢測
5.選擇安裝組件
6.執行個體名:
7.計算需要的磁碟空間:
8.Service賬戶(域賬戶):
9.定序(可以根據自己需要選擇):
10.設定許可權,資料庫檔案備份地址以及Filestream選項:
11.安裝後需要重新啟動(可以查看安裝日誌):
12.在ConfigurationManager中對SQL Server開啟Always OnHigh Availability(可以自動檢測到前面我們建立的Cluster名字)
設定更改後需要重啟Service.現在一切都具備了,我們可以配置Always On group了。
1.建立新的可用性群組(可用性群組嚮導,也可以用下面的選型):
2.輸入可用性群組的名字:
3.選擇組中的資料庫:
4.Replica 選擇Node2(選擇自動Failover/可讀資料庫):
5.點擊下一步,Node1將會備份資料庫到Share Folder然後還原到Node2做同步 (Node1為主,Node2為輔助)
下一步就是測試Node2資料可讀已經Failover. 可用性群組我們已經建立成功了,現在測試一下Node2 上讀取資料以及Failover. 1. 資料測據:Node1上建立表test插入記錄
在Node2上訪問test資料庫,資料可以查到(在Mirror中是不可以查詢的,而且資料同步不會導致Node2的串連斷掉):
2. Failover測試:
串連到Node2:
Failover後(Primary已經變成Node2):
可以看到Always On group 既保證了高可用性,有可以實現同步資料庫的唯讀訪問,提供了硬體的利用率,非常給力的一個功能。 更多資訊可以參考:MicrosoftSQL Server AlwaysOn Solutions Guide for High Availability and Disaster Recovery:http://msdn.microsoft.com/en-us/library/hh781257.aspx SQL Server 2012 AlwaysOn High Availability and Disaster Recovery DesignPatterns:http://sqlcat.com/sqlcat/b/msdnmirror/archive/2011/12/22/sql-server-2012-alwayson-high-availability-and-disaster-recovery-design-patterns.aspx
SQL Server 2012 AlwaysOn叢集配置指南