數據庫鏡像
相對於日志傳送,數據庫鏡像顯然更高一級。在最簡單的形式下,它其實與日志傳送的
工作原理相似,但是生產服務器發送事務到鏡像服務器的頻率要高得多,這意味着更新速度
也要快很多。
對於數據庫鏡像來說,故障轉移功能也是需要手動完成。但是你可以添加第三個SQL
Server,稱為witness。Witness 可以作為一個普通的SQL Server,但是一直留意着其它兩個
鏡像服務器。當主鏡像發生故障,witness 可以讓第二個鏡像接管操作,類似一種自動的故
障轉移。
在故障轉移時,任何進行中的客戶端事務都將重新啟動,而由於在這一過程中仍然存在
着延遲,鏡像服務器也不能保證百分之百不丟失數據。
一.
數據庫准備
一、目標
利用Sql Server 2008 enterprise X64,建立異步(高性能)鏡像數據庫,同時建立見證服務器
實現自動故障轉移。
二、前提條件、限制和建議
1、伙伴雙方(主體服務器和鏡像服務器)及見證服務器必須使用相同版本的Sql Server
2、如使用見證服務器,擇須確保其系統上安裝 Sql Server 2005 或更高版本
3、在鏡像服務器上創建鏡像數據庫時,確保制定相同的數據庫名稱WITH NOREBOVORY 來
還原主題數據庫備份。另外,還必須通過 WITH NORECOVERY 應用在該備份執行后創建的所
有日志備份。如果數據庫鏡像已經停止,則必須將對主體數據庫執行的所有后續日志備份應
用到鏡像數據庫中,然后才可以重新啟動鏡像。
4、跨數據庫事務和分布式事務均不支持數據庫鏡像
5、鏡像的數據庫路徑盡量與主體服務相同,如果主體服務器CPU 利用率在50%以上,擇不
建議配置自動故障轉移
6、建議配置高效穩定的網絡環境
三、設置概述
1、確保所有數據庫用戶在鏡像服務器上都有登錄名
2、在向另一個服務器實例提供數據庫之前,您必須在該服務器實例上建立數據庫用於新服
務器實例時所需的環境
3、使用 NORECOVERY 還原最近的主體數據庫完整備份,以創建鏡像數據庫。確保執行備
份時主體數據庫已使用完整恢復模式。鏡像數據庫和主體數據庫名稱必須相同,並且它們在
數據庫鏡像會話中不能被重命名。
4、設置安全性並啟動數據庫鏡像會話。可以使用 Transact-SQL 或數據庫鏡像向導來設置鏡
像。
5、(可選)將見證服務器添加到會話。
四、在Windows Server 2008 R2上安裝Sql Server 2008 enterprise X64
1、SQL Server 2008 需要.NET 3.5支持,所以安裝之前需要安裝.NET3.5,在服務器管理的功能單元中,添加.NET Framework 3.5.1功能
2、安裝時選擇全新SQL Server獨立安裝
3、選定功能組件,注意安裝目錄與其他節點保持一致
4、使用默認實例名稱,或者與其他節點相同
5、設定服務啟動賬戶,這里配置所有服務均使用域管理啟動
6、設置混合身份登錄、制定SQL Server管理員
7、點擊下一步,等待安裝完成。在其他節點按照同樣方式安裝SQL Server
五、配置數據庫鏡像前的數據庫准備
1、 確認數據庫使用了完整恢復模式:打開SQL Server Management,在VirtualManagerDB數據庫(將要鏡像的數據庫)上點擊右鍵選擇屬性,定位到選項頁,將恢復模式改為“完整”
2、 備份主體數據庫:在VirtualManagerDB數據庫上點擊右鍵——任務——備份,備份類型選擇完整
3、將備份文件拷貝到鏡像節點,執行還原。右鍵點擊數據庫,選擇還原數據庫,選定備份文件,寫入還原數據庫名稱,注意此數據庫名稱必須與主體服務器數據庫名稱一致。即VirtualManagerDB。
點擊選項頁,勾選覆蓋現有數據庫。選擇NORECOVERY模式
4、進行完整日志備份
執行backup LOG VirtualManagerDB to Disk = 'c:\backup\vlogback.bak'
5、同樣,事務日志備份在鏡像數據庫上還原。鏡像數據庫上,點擊右鍵——任務——還原——事務日志
6、在還原選項中選中NORECOVERY,執行還原操作。
二.配置鏡像連接
一、設置安全性並啟動數據庫鏡像會話
1、展開數據庫,選擇VirtualManagerDB,點擊右鍵選擇任務——鏡像
2、點擊配置安全性,點選是,包括見證服務器
3、去掉見證服務器,以后進行配置
4、設置主體服務器,填入端點名稱為site1
5、添加鏡像服務器,取端點名為site2
6、指定服務賬戶為域管理員賬戶(可以在域內事先配置)
7、創建成功,點擊關閉
8、彈出對話框,選擇不開始開始鏡像
9、點選高性能模式的運行模式,點擊開始鏡像,查看狀態顯示已經同步
10、同步完成后,顯示如下
至此,鏡像配置完畢,接下來開始測試故障轉移
二、手動故障轉移測試
1、主體數據庫上點擊右鍵——任務——鏡像
更改運行模式為高安全性(在高可用模式下不能進行手動故障轉移)
點擊右側故障轉移,提示斷開所有與主體數據庫的鏈接
1、 點擊是,開始向鏡像數據庫還原,下圖為正在執行鏡像過程
4、 此時顯示鏡像已近完成,主體數據庫被轉移到了原來的鏡像數據庫HYTEST02。整個過程1秒鍾內完成
部署見證服務器,實現自動故障轉移。
一、關於見證服務器
1、若要支持自動故障轉移,必須在高安全性模式下配置數據庫鏡像會話,並且還要具有第三個服務器實例(也稱為“見證服務器”)。見證服務器是 SQL Server 的可選實例,它能使高安全性模式會話中的鏡像服務器識別出是否要啟動自動故障轉移。與這兩個伙伴不同的是,見證服務器並不能用於數據庫。見證服務器的唯一角色是支持自動故障轉移。
2、為了給數據庫設置見證服務器,數據庫所有者為見證服務器的角色分配數據庫引擎實例。見證服務器實例可以與主體服務器實例或鏡像服務器實例運行於同一台計算機上,但這樣會明顯降低自動故障轉移的可靠性。因此建議見證服務器應位於另外一台計算機上。
3、在高性能模式下,見證服務器對可用性會有不利影響。如果見證服務器是針對數據庫鏡
像會話而配置,則主體服務器必須至少連接到一個其他服務器實例,即鏡像服務器或見證服務器,或者是連接到這兩個服務器。否則,將無法使用數據庫,並且不能進行強制服務(可能丟失數據)。因此,對於高性能模式,我們極力建議您始終將見證服務器設置為 OFF。
二、關於自動故障轉移
1、只有在高安全性模式(“具有自動故障轉移功能的高安全性模式”)下運行並且具有見證服務器的數據庫鏡像會話支持自動故障轉移。在具有自動故障轉移功能的高安全性模式下,同步數據庫后,如果主體數據庫變得不可用,則會發生自動故障轉移。自動故障轉移將導致鏡像服務器接管主體服務器的角色,並使其數據庫的副本聯機以作為主體數據庫。因為每個在主體數據庫中提交的事務同時也在鏡像數據庫中提交,所以需要使數據庫保持同步以防止在故障轉移過程中丟失數據。
2、自動故障轉移所需條件
A、數據庫鏡像會話必須在高安全性模式下運行,並且必須處理見證服務器。
B、鏡像數據庫必須已經同步。這將保證發送到鏡像服務器的所有日志都已寫入磁盤。
C、主體服務器已中斷了與其余數據庫鏡像配置的通信,而鏡像服務器和見證服務器將保留仲裁。但是,如果所有服務器實例都已中斷通信,而見證服務器和鏡像服務器稍后重新建立通信,則不會發生自動故障轉移。
D、鏡像服務器已檢測到丟失了主體服務器
E、鏡像服務器檢測主體服務器故障的方式取決於故障是硬故障還是軟故障。
更多自動故障轉移內容參考:http://msdn.microsoft.com/zh-cn/library/ms189590.aspx
三、自動故障轉移原理
1、如果主體服務器仍在運行中,則將主體數據庫的狀態更改為 DISCONNECTED 並斷開所有客戶端與主體數據庫的連接。
2、見證服務器和鏡像服務器將主體服務器注冊為不可用。
3、如果重做隊列中有任何等待的日志,則鏡像服務器將完成前滾鏡像數據庫的操作
4、前一個鏡像數據庫作為新的聯機主體數據庫,恢復通過盡快回滾未提交的事務將這些事務全部清除。鎖將隔離這些事務。
5、當前一個主體服務器重新聯接到會話時,它將認定其故障轉移伙伴現在擁有主體角色。前一個主體服務器接管鏡像角色,並將其數據庫作為鏡像數據庫。新的鏡像服務器會盡快將新的鏡像數據庫與主體數據庫同步。新的鏡像服務器重新同步數據庫后,就可以再次執行故障轉移,但按反向執行。。
下圖說明了自動故障轉移的一個實例。
四、在見證服務器上看裝SQL Server 2008
詳見前一
五、配置見證服務器
1、主體數據庫服務器上,右鍵點擊數據庫,選擇任務——鏡像
2、在彈出的數據庫屬性頁面中,選定鏡像頁,點擊右側的配置安全
3、點擊下一步,選擇包括見證服務器
4、點擊下一步,進行見證服務器配置
5、點擊兩次下一步,填入見證服務器地址或機器名及站點名稱
6、填入服務賬戶
7、查看摘要信息,點擊完成
六、測試自動故障轉移
1、當前主體服務器為Hytest01,鏡像數據庫是Hytest02
2、將主體服務器Hytest1的網絡斷開,看數據庫是否自動轉移到鏡像服務器Hytest02上
鏡像設置顯示,主體服務器、鏡像服務器角色也互換了。
有人會說,兩個數據庫,IP地址都不一樣,怎么寫連接代碼呢?難道出現故障后要手動更改代碼嗎?其實使用ADO.NET或者SQL Native Client能夠自動連接到故障轉移后的伙伴,連接字符串如下所示:
ConnectionString="DataSource= A;Failover Partner=B;Initial Catalog=AdventureWorks;Integrated Security=true;" DataSource= A;
這樣設置之后,客戶端就可以自動切換數據庫了
至此SQL Server 2008 的鏡像高可用配置實例全部完成。