Windows cluster要求同一個cluster中的全部windows版本都是相同的,這樣就出現一個問題,當咱們要將對windows進行升級時,(例如從windows 2008 R2升級到windows 2012)不得不搭建一套新的windows cluster。你能夠選擇使用新的硬件搭建,或者將現有windows cluster中的節點一臺一臺的evict掉,重裝/升級系統後加入到新的windows cluster中。具體的cluster升級方案我就不在這裏討論。立刻進入主題:sql
SQL Server AlwaysOn Availability Group (後文簡稱爲AG) 的一個要求是:全部的replica都要求隸屬於同一個windows cluster。數據庫
因此當咱們對windows cluster進行升級時,沒法在新的windows cluster和現有的windows cluster之間創建AG。那麼在遷移過程當中會有一段時間內AG沒法對外提供服務。windows
從數據庫的角度上說,咱們須要作下面的事情服務器
咱們須要將數據庫備份並還原到新的primary replica和secondary replica。 相應的downtime時間就是1+2+3+4+5+6+7+8想要的時間。 或許你想到了在新舊cluster之間建立一個mirroring,但遺憾的是,建立了AG的數據庫是再也不容許建立mirroring的.spa
那應當如何進行遷移呢?從SQL Server 2012 SP1 開始,容許在兩套不一樣的windows cluster之間建立AG。下面用一個例子說明一下3d
有一個三個節點的windows cluster, windows版本爲Windows 2008 R2rest
Domain:liweiyin3.labserver
Cluster name: cluster1blog
Server002ip
Server003
Server004
Listener name: Listener1
三個節點上裝有SQL Server 2012 SP1的standalone實例。均爲默認實例。
之間創建了AG.拓撲圖以下:
如今建立一套兩個節點的windows 2012的windows cluster
Domain:liweiyin3.lab
Cluster name: cluster2
Server005
Server006
Datacenter 1 |
|
Server005 |
Server006 |
Win 2012 |
Win2012 |
Cluster2 |
兩個cluster中間建立AG:
ALTER SERVER CONFIGURATION SET HADR CLUSTER CONTEXT='cluster1.liweiyin3.lab'
這條語句執行完畢後,這臺數據庫的cluster context就會切換爲cluster1了。這個結果能夠從下面的DMV中檢查到
select cluster_name from sys.dm_hadr_cluster
4.接下就能夠在cluster1和cluster2之間創建AG。咱們可使用UI或者T-SQL語句。須要注意的是,請將cluster2中的至少一個SQL Server的同步模式設置爲Synchronous commit,以保證遷移是沒有數據損失的。
這樣,咱們就創建了一套既包含win 2008R2,也包含win 2012的AG環境了。而且也能夠正常地向外界提供服務,整個過程不須要downtime.
但須要注意的是,這種狀況下是不容許在兩個cluster之間進行failover的。相應的提示信息以下
An attempt to fail over or create an availability group failed. This operation is not supported when AlwaysOn Availability Groups is running under a remote Windows Server Failover Clustering (WSFC) cluster context. Under a remote cluster context, failing over or creating availability groups are not supported.
5.接下來中止應用並刪除cluster1中的Listener,確保沒有外界來接使用SQL SERVE
6.在Cluster1將AG進行offline操做
ALTER AVAILABILITY GROUP agName offline
7.將cluster2中全部sql server的CLUSTER CONTEXT切換回來
ALTER SERVER CONFIGURATION SET HADR CLUSTER CONTEXT=local
8.在cluster2中從新建立AG
9.在cluster2中建立新的listener
10.重啓應用
這樣所涉及的downtime就是5+6+7+8+9+10
和以前的解決方案相比,省去了backup,文件copy和restore的時間。其他的操做都是句操做,很大程度地減小了downtime。
更多信息
===
遷移以前,Cluster2中的sql server不容許建立任何AG。
遷移以前須要授予cluster2中的sql server啓動帳號訪問cluster1註冊表的權限
在第六步「在Cluster1中將AG進行offline操做」以前在各個AG 數據庫中執行checkpoint,之前少cluster2中數據庫的recovery時間。
對於multiply subnet場景,則須要在各自的子網內建立新的cluster,而後搭建AG。
Change the HADR Cluster Context of Server Instance (SQL Server) http://msdn.microsoft.com/en-us/library/jj573601.aspx
-----------------------3/1/2017----------------
Distributed Availability Groups is a better choice :)