概述
“數據庫鏡像”是一種針對數據庫高可用性的基於軟件的解決方案。其維護著一個數據庫的兩個相同的副本,這兩個副本分別放置在不同的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
本文出自 “胖哥技術堂” 博客