SQL Server 2008 R2資料庫映象部署(轉載)
概述
“資料庫映象”是一種針對資料庫高可用性的基於軟體的解決方案。其維護著一個數據庫的兩個相同的副本,這兩個副本分別放置在不同的SQL Server資料庫例項中。建議使用不同位置的兩臺伺服器來承載。在同一時刻,其中一臺上的資料庫用於客戶端訪問,充當“主體伺服器”角色;而另一臺則根據映象會話的配置和狀態,充當熱備份伺服器,即“映象伺服器角色”,這兩種角色不是絕對的。
優點
l 增強了資料保護功能
l 提高了資料庫的可用性
l 提高了生產資料庫在升級期間的可用性
工作方式
在“資料庫映象會話”中,主體伺服器和映象伺服器是相互通訊和協作,並雙方互補。主體伺服器角色上的資料庫副本為生產資料庫。資料庫映象會盡快將主體資料庫中執行的每一項操作(如:插入、更新和刪除等)在映象資料庫中進行重新執行。這一過程是通過將活動事務日誌記錄的流傳送到映象伺服器來完成,這可以儘快將日誌記錄按順序應用到映象資料庫中。而且資料庫映象是在物理日誌記錄級別執行這一“重做”操作的。SQL Server 2008 R2(以下簡稱:SQL08R2)中,為了減少網路的負載,主體伺服器會將事務日誌記錄壓縮後進行傳送。
執行模式
l 高效能模式(非同步執行):事務不需要等待映象伺服器將日誌寫入磁碟便可提交,這樣可最大程度地提高效能。這意味著事務不需要等待映象伺服器將日誌寫入磁碟便可提交,而此操作允許主體伺服器在事務滯後時間最小的條件下執行,但可能會丟失某些資料。
l 高安全模式(同步執行):當會話開始時,映象伺服器使映象資料庫儘快與主體資料庫同步。一旦同步了資料庫,事務將在雙方提交,這會延長事務滯後時間。
圖1
l 具有故障轉移功能的高安全性模式(見證伺服器):這種模式最大的優點就是主體伺服器斷線時,映象伺服器上的資料庫副本會自動啟用,作為生產資料庫為客戶端提供服務。在這一結構中見證伺服器並不能用於資料庫,其主要作用是通過驗證主體伺服器是否已啟用並執行來支援自動故障轉移。
注意:只有在與主體伺服器斷開連線之後,映象伺服器仍和見證伺服器保持相互連線時,映象伺服器才啟動自動故障轉移。
見證伺服器的作用是驗證指定的夥伴伺服器是否已啟動並正常執行。如果映象伺服器與主體伺服器斷開,但見證伺服器仍與主體伺服器保持連線,則映象伺服器無法啟動故障轉移。所以要實現故障轉移的條件是主體伺服器與映象伺服器斷線,同時也與見證伺服器斷線;映象伺服器與見證伺服器連線的情況。
圖2
角色切換
自動切換:在使用見證伺服器的情況下,資料庫必須已經同步,並且見證伺服器必須和映象伺服器連線正常。
手動切換:在高安全性模式下,主體伺服器和映象伺服器必須保持互聯,並且資料庫必須已經同步。
強制服務:在高效能模式和不帶自動故障轉移功能的高安全性模式下,如果主體伺服器出現故障而映象伺服器可用,則可以強制服務執行。這種方式可能導致某些資料庫丟失。
實現
一、條件
SQL08R2的“資料庫映象”必須基於每個使用完整恢復模式的資料庫來實現。對於SQL08R2不支援簡單恢復模式和大容量日誌恢復模式的資料庫映象。另外,不能映象“master”、“msdb”、“model”和“tempdb”等系統資料庫。
二、環境
測試環境為一個LAN內,IP地址是192.168.0.0/24段,域名是punwar.cn。
DC:192.168.0.110/24——域控制器和DNS伺服器;
SQL-1:192.168.0.111/24——SQL08R2主體伺服器;
SQL-1:192.168.0.112/24——SQL08R2映象伺服器;
SQL-1:192.168.0.113/24——SQL08R2見證伺服器。
拓撲(如圖3)所示:
圖3
三、基本環境的準備
由於系統平臺使用WIN08R2,而且啟用了防火牆設定,因此為了SQL08R2能夠正常工作,需要在防火牆上開啟相應的埠。本文中介紹資料庫映象需要開啟的埠是TCP-1433和TCP-5022埠。開啟方式非常多,但是此處可以結合基於域的組策略為三臺SQL08R2伺服器同時進行整體配置。
將三臺伺服器放置在同一個OU中(如圖4)
圖4
通過DC的組策略管理器,為其OU單獨建立一個GPO,並定位其“計算機配置”——“管理模板”——“網路/網路連線/Windows防火牆/域配置檔案”,啟用“定義入站埠例外”(如圖5),分別定義兩條:
1433:TCP:192.168.0.0/24:enabled:SQL Server
5022:TCP:192.168.0.0/24:enabled:SQL Server DBM
圖5
此外,對於SQL08R2來講,預設情況下,SQL服務的TCP/IP訪問是禁用的,所以需要通過SQL Server Configuration Manager將其啟用(如圖6)。
圖6
四、準備資料庫
在登入將作為主體伺服器的SQL-1伺服器(如圖7),定位需要映象的資料庫(本文中是mydb資料庫),右擊選擇其“屬性”(如圖8)。
圖7
圖8
在其屬性視窗中,選擇“選項”頁,確認其恢復模式為“完整”(如圖9)。
圖9
關閉該視窗,然後對該資料進行完整備份和事務日誌備份。選擇mydb資料庫節點,右擊選擇任務——備份(如圖10)。
在備份視窗中選擇備份型別為“完整”,並指定目標備份包的路徑(如圖11),點選“確定”進行備份。
相同步驟,開啟備份視窗,選擇備份型別為“完整”,並指定目標備份包的路徑(如圖12),點選“確定”進行備份。這裡為了方便可以選擇與完整備份相同的備份包。
圖12
將備份包複製到映象伺服器SQL-2上(如圖13),並且從SQL管理控制檯登入到SQL-2(如圖14)。
圖13
圖14
建立與主體伺服器上需要映象的資料庫相同名稱的資料庫——mydb(如圖15)。同時,資料庫檔案放置的位置應該相同,各屬性也應該配置相同。
圖15
在SQL-2上對新建的資料庫進行還原操作,即將從SQL-1上對資料庫的備份針對SQL-2上新建的mydb進行還原操作。右擊mydb資料庫選擇任務——還原——資料庫(如圖16)開啟還原資料庫視窗。
圖16
選擇“原裝置”,通過瀏覽新增從SQL-1複製的備份包(如圖17)。
圖17
再選擇頁中選擇“選項”,勾選“覆蓋現有資料庫”,同時選擇“不對資料庫執行任何操作,不回滾未提交的事務。可以還原其他事務日誌。(RESTORE WITH NORECOVERY)”(如圖18)。
圖18
點選“確定”,完成資料庫還原操作(如圖19)
圖19
五、配置主體/映象伺服器
在SQL-1上,右擊mydb,選擇任務——映象(如圖20),開啟映象資料庫配置視窗,點選“配置安全性”按鈕(如圖21)。
圖20
圖21
在“包括見證伺服器”頁中選擇“是”(如圖22),這樣可以在之後實現自動故障轉移。單擊下一步。
圖22
在“選擇要配置的伺服器”頁面中,可以不勾選“見證伺服器例項”(如圖23),因為見證伺服器可以在之後來進行配置。
圖23
點選下一步,指定主體伺服器監聽埠和端點名稱(如圖24),預設的埠為TCP-5022埠,端點名稱自定義。
圖24
單擊下一步,指定映象伺服器,在下拉選單中選擇“瀏覽更多”(如圖25),在“連線到伺服器”對話方塊中指定登入到SQL-2(如圖26)。
圖25
圖26
仍然需要指定映象伺服器的偵聽器埠和端點名稱,這裡的埠仍然使用預設的TCP-5022(如圖27)。
圖27
單擊下一步,指定伺服器例項的服務賬戶,在此測試環境中統一使用管理員賬戶,但是在生產環境中建議專門為其建立一個賬戶(如圖28)。
圖28
單擊下一步,顯示摘要,確認無誤,點選“完成”(如圖29)進行端點配置。
圖29
成功完成配置後,系統提示是否立刻進行“開始映象”(如圖30),單擊開始映象。
圖30
完成資料庫同步後,映象狀態會顯示為“已同步:資料庫已完全同步”(如圖31)。由此,主體伺服器和映象伺服器的部署已經完成。
圖31
注:在最後一個步驟中,進行映象同步時,需要在每一臺SQL08R2伺服器上啟用“Remote DAC”,否則可能會收到錯誤提示(如圖32)
圖32
在SQL08R2中啟用遠端管理員連線的方法如下:
右擊伺服器節點,選擇“方面”(如圖33)
圖33
開啟“檢視方面”視窗,在“方面”下拉選單中選擇“外圍應用配置器”(如圖34),指定“方面屬性”的“RemoteDacEnabled”值為“True”(如圖35)。
圖34
圖35
六、實現手動故障轉移
首先,確定目前主體伺服器和映象伺服器工作均正常,並且連線正常。目前在SQL-1上,mydb的狀態是“主體,已同步”(如圖36)
圖36
在SQL-1上開啟mydb的“映象”配置視窗,確認執行模式為“高安全”模式,然後點選“故障轉移”按鈕(如圖37)。系統提示是否進行轉移(如圖38),單擊“是”進行轉移。
圖37
圖38
成功完成操作後,在SQL-1上資料庫mydb的狀態變為了“映象,已同步/正在還原……”(如圖39);
圖39
而在SQL-2上,mydb的狀態變為“主體,已同步”了(如圖40)。由此可見進行故障轉移的結果是使其主體/映象角色互換了。
圖40
七、實現自動故障轉移
自動故障轉移需要配置見證伺服器,由於此前在實現主體/映象伺服器的過程中,略過了見證伺服器的配置,所以,現在需要手動重新配置見證伺服器。
在主體伺服器SQL-1上,右擊資料庫mydb,選擇任務——映象(如圖41),開啟“映象”配置視窗,選擇“配置安全性”按鈕(如圖42)
圖41
圖42
將安全性配置為包括見證伺服器例項(如圖43)
圖43
單擊下一步,勾選“見證伺服器例項”(如圖44)。
圖44
單擊下一步,確認主體伺服器配置(如圖45),
單擊下一步,配置見證伺服器,在下拉選單中選擇“瀏覽更多”(如圖46)。連線並登入到SQL-3(如圖47)
圖46
圖47
指定“偵聽器埠”為預設的TCP-502和端點名稱(如圖48)
圖48
單擊下一步,指定域管理員作為主體/映象/見證的服務賬戶(如圖49)
圖49
單擊下一步,確認摘要資訊無誤,點選“完成”(如圖50)。
圖50
成功完成配置後,在“映象”配置視窗中會顯示“見證伺服器”資訊,並自動選中“帶自動故障轉移功能的高安全(同步)”(如圖51)。
圖51
注:此時“不帶自動故障轉移功能的高安全(同步)”將不可使用
斷開SQL-1的網路連線,模擬主體伺服器,即生產資料庫伺服器出現故障。如:拔去SQL-1的網線。SQL-1上的mydb狀態將自動變為“主體,已斷開連線/正在恢復”(如圖52)
圖52
而此時,在SQL-2上檢視mydb狀態將自動變為“主體,已斷開連線”(如圖53)。
圖53
八、驗證映象資料庫的資料同步。
在各角色都正常工作的情況下,定位到主體伺服器SQL-1上mydb資料庫,建立表t1。並在其中插入資料(如圖54)。
圖54
完成建表和插入資料後,拔掉SQL-1的網線,模擬故障。然後,登入映象伺服器SQL-2,定位到mydb資料庫,展開可以看到映象同步過來的t1表,開啟表可以看到表中的資料也是同步過來的(如圖55)。
圖55
由此可以看出,“資料庫映象”技術可以成功對資料進行熱備,使SQL08R2的可用性得以大大提高。此外,需要注意的是,出現故障後的伺服器訪問定位需要在SQL語句級別進行設計,在此將不再進行敘述。
參考文章:
《微軟技術資源庫SQL Server 2008 R2資料庫映象》http://technet.microsoft.com/zh-cn/library/bb934127.aspx