如何遷移Alwayson AG

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

 

從數據庫的角度上說,咱們須要作下面的事情服務器

  1. 接下來中止應用並刪除cluster1中的Listener,確保沒有外界來接使用SQL SERVER.
  2. Backup database
  3. Backup tail log
  4. 將備份文件copy到新的服務器
  5. Restore 到各個服務器
  6. 而後從新創建AG
  7. 建立Listener
  8. 重啓應用

咱們須要將數據庫備份並還原到新的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:

  1. 對cluster1上的AG數據庫進行備份,包含full database backup和log backup
  2. 將第一步獲得的文件在cluster2的節點上進行還原,指定爲with norecovery.
  3. 接下來在cluster2的三個數據庫上執行下面的語句

    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 serverCLUSTER CONTEXT切換回來

      ALTER SERVER CONFIGURATION SET HADR CLUSTER CONTEXT=local

8.在cluster2中從新建立AG

9.在cluster2中建立新的listener

10.重啓應用

這樣所涉及的downtime就是5+6+7+8+9+10

 

和以前的解決方案相比,省去了backup,文件copyrestore的時間。其他的操做都是句操做,很大程度地減小了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 :)

相關文章
相關標籤/搜索