第三篇——第二部分——第一文 SQL Server镜像简介
原文出處:http://blog.csdn.net/dba_huangzj/article/details/26951563
鏡像是什么?說白了就是個鏡子(沒用過鏡子?沒鏡子你總要小便吧?開個玩笑。。 ),這里鏡子的含義主要有兩個:1、一模一樣,下面會詳細介紹,包括庫名、數據文件和日志文件的存放路徑都要一樣。2、看得到,卻“用不了”,鏡像庫在沒有做任何處理時是不可訪問的。下面進入專業一點的解釋:
數據庫鏡像(SQL Server Mirroring)從SQL Server 2005? SP2開始引入,雖然從2008開始被列為“將會被棄用”的功能,但是由于其有很多優勢,一直被廣泛使用至今。本文將介紹鏡像的基礎,也會介紹和其他SQL Server提供的高可用方案的對比。《SQL Server掃盲》系列將會單獨介紹各種高可用方案,所以這里不會過多介紹,主要是進行對比。
?
術語:
本系列將會用到很多鏡像甚至高可用的術語,所以這里先介紹相關概念:
- 主體服務器,Principal:在鏡像環境中,包含活動庫的源服務器,可以理解為主服務器。
- 鏡像服務器,Mirror:在鏡像環境中,包含目標數據庫的服務器,即鏡像環境中的目標服務器。
- 見證服務器,Witness:可選的一個服務器,用于監控主體服務器和鏡像服務器,最主要的作用是進行自動故障轉移(automatic Failover)。
- 伙伴服務器,Partner:相對于鏡像環境而言,鏡像服務器就是主體服務器的伙伴服務器,而主體服務器也是鏡像服務器的伙伴服務器。
- 端點,Endpoint:綁定到網絡協議中的對象,允許SQL Server通過端點在網絡間交互。
- 會話,Session:活動于鏡像環境中,用于維護服務器之間的狀態信息和關系。簡單來說就是鏡像環境中各個伙伴服務器之間信息的傳遞者。
- 運行模式,Operating Mode:表示鏡像環境的安全級別,鏡像的運行模式有三種:帶有自動故障轉移的高安全性模式(帶有見證服務器的同步模式),不帶有自動故障轉移的高安全性模式(沒有見證服務器的同步模式),高性能模式(沒有見證服務器的異步同步)。
- 角色,Role:在鏡像環境中的功能,同一時刻,一個特定的服務器只能是三種角色中的其中一種:主體、鏡像或見證。
?
運行模式:
從大層面來說,SQL Server鏡像只有兩種模式:高安全模式和高性能模式。兩種模式的主要區別在于在事務提交后的操作。可以從圖1-1中查看運行模式。
在高性能模式下,主體服務器不需要等待鏡像服務器響應即可提交事務。
在高安全性模式,需要把事務同步到鏡像并得到響應后才最終提交主體服務器的事務。
?
注意:不管使用何種模式,主體庫都必須配置為完整恢復模式。
?
圖1-1 SQL Server鏡像運行模式
高安全模式,High-Safety Mode:
?
這種模式是同步模式,可以細分為帶有自動故障轉移(即有見證服務器)的高安全模式和不帶自動故障轉移(即沒有見證服務器)的高安全性模式。如果沒有配置見證服務器,那么【帶自動故障轉移功能的高安全性(同步)】選項將會為灰色,即不可選。
兩者最大的區別在于是否引入見證服務器,前面提到過,見證服務器能作為仲裁,偵測主體服務器的狀態,一旦見證服務器不能連接主體服務器,將把會話自動切換到鏡像服務器,如果沒有見證服務器,那么需要手動切換。
在高安全模式下,事務必須在鏡像庫上提交,才能在主體庫提交,這也意味著整套程序都必須等待鏡像提交事務后才能最終提交,如果在網絡情況不理想,將影響整個運行過程。高安全模式支持標準版和企業版,并且主體和鏡像服務器必須是相同版本,比如不能一個是標準版,一個是企業版。
如果需要最高級別的鏡像安全性,可以使用見證服務器作為仲裁,見證服務器不是必須的,但是卻是自動Failover(故障轉移)功能必須的。見證服務器可以使用Workgroup(工作組版)或者Express版。
見證服務器用于檢查鏡像環境中,主體庫和鏡像庫的聯接是否正常。見證服務器并不實際執行Failover,僅僅是告知鏡像服務器:“主體服務器宕機了”。即使見證服務器也宕機了,僅僅是不能自動Failover而已,不影響鏡像環境。可以把見證服務器理解為,僅用于回答:主體服務器是否已經宕機了?圖1-2 是帶有見證服務器的高安全性模式的示意圖
?
?
圖1-2 帶有見證服務器的高安全性模式
當出現性能問題的時候,可以根據圖1-2的步驟來一步一步偵測。
高性能模式,High-Performance Mode:
?
這種模式是異步模式,只能手動Failover,所以沒有必要設置見證服務器(實際上是可以設置,但是沒有任何意義。)。這種模式會有數據丟失的可能。和高安全性模式相比,這種模式不需要等待鏡像服務器的確認,所以在網絡條件不理想的環境下,是不錯的選擇。圖1-3是高性能運行模式的示意圖。
圖1-3? 高性能運行模式
?
同步、異步處理:
?
從圖1-1 中可以看到,三種運行模式又可以分為兩類處理,同步和異步。當鏡像運行在同步模式下時,數據庫的SAFETY選項為FULL。當鏡像為異步時,數據庫SAFETY的選項為OFF。兩種高安全模式均為同步模式,高性能模式使用異步處理。表1-1 列出了兩種模式的主要特點:
表1-1 同步和異步模式的特點:
模式 | 版本要求 | 數據丟失 | SAFETY選項 | 性能影響 | 恢復速度 | 故障轉移 |
同步 | 標準/企業 | 0丟失 | FULL | 網絡可能影響性能 | 快 | 可自動 |
異步 | 企業版 | 有可能丟失數據 | OFF | 影響較小 | 根據需要提交的事務量而定 | 不可自動 |
?圖1-4 SQL Server鏡像運行模式選擇
??????????????? SQL Server鏡像的運行模式及其重要,直接影響到配置、預算及故障偵測和性能優化。需要在前期做好評估,并且選擇滿足當前SLA要求的模式。
會話:
?
在配置完數據庫鏡像之后,就可以開始鏡像會話。在鏡像環境的所有服務器交互過程中,都通過會話來維護對方的狀態信息。開始會話本質上就是開始主體數據庫和鏡像數據庫的同步進程。
暫停和恢復會話:
?
當服務器出現性能問題時,暫停數據庫會話可以臨時停止因為鏡像帶來的壓力,但是要注意,暫停會話會導致日志依舊活動,并且無法截斷,如果時間持續太久,會引起日志文件的迅速增長,帶來一系列的性能問題。日志相關問題可以查看《SQL Server掃盲》中關于日志備份的文章。地址:http://blog.csdn.net/dba_huangzj/article/details/26844859
SSMS暫停會話:
可以通過圖1-5中的方式暫時鏡像會話
?
圖1-5 暫停會話
T-SQL暫停、恢復會話:
可在主體庫或者鏡像庫上執行下面的腳本暫停和恢復會話:
ALTER DATABASE AdventureWorks2008R2 SET PARTNER SUSPEND;--暫停會話ALTER DATABASE AdventureWorks2008R2 SET PARTNER RESUME;--恢復會話當數據庫鏡像會話啟動后,主體服務器會發送事務給鏡像服務器,所有未發送到鏡像服務器的事務都被收集到發送隊列(send queue)。在高安全性模式下,僅在鏡像庫處于暫停狀態時才會建立send queue。如果是高性能模式,不僅鏡像處于暫停,即使服務器處于高使用率、網絡慢、鏡像服務器上有一個大型redo 隊列或者其他原因都會引起send queue。
在鏡像庫中,已經傳送過來但是未被寫入鏡像庫的事務日志的事務會存放到redo queue中。如果redo操作失敗,鏡像服務器會暫停會話直到問題解決。
關于隊列的介紹,將會在本系列的第六篇《監控和優化SQL Server鏡像》中介紹。http://blog.csdn.net/dba_huangzj/article/details/26846203
注意:一個數據庫只能有一個鏡像庫,如果需要保持多個副本,可以借助日志傳送加鏡像。
鏡像狀態:?
SQL Server鏡像狀態可能包含下面幾種:
- SYNCHRONIZING:正在同步,通常在第一次啟用數據庫鏡像時出現,表示鏡像服務器正在追上主體服務器的進度。
- SYNCHRONIZED:已經同步完畢,大部分時間都是這種狀態,一旦有爆發性的事務傳輸到鏡像數據庫,狀態會從SYNCHRONIZED轉變成SYNCHRONIZING。在高安全性模式下,這種狀態通常不會導致數據丟失,僅表示鏡像服務器正在同步,但是在高性能模式下,可能有數據丟失的風險。
- SUSPENDED:掛起,當主體服務器不發送事務到鏡像服務器時出現,在Failover發生后會出現這種狀態(如果鏡像環境依舊運行,僅使用Failover則不出現,但是如果鏡像庫斷開連接,則會出現)。手動暫停鏡像會話或者redo 日志發生錯誤時都會出現。
- PENDING_FAILOVER:僅當主體服務器變成鏡像服務器并且斷開用戶連接時,會在原主體服務器出現這種狀態。在這種狀態下,主體服務器和鏡像服務器都會表現這種狀態。但是見證服務器會出現:CONNECTED/DISCONNECTED/UNKNOWN的其中一種狀態。
- CONNECTED:代表見證服務器能連到其中一個伙伴,另外兩種代表不能連到伙伴服務器,這種情況下,數據庫會變成不可用,如果鏡像環境使用了見證,而鏡像服務器為DISCONNECTED,并且鏡像服務器奔潰,那么數據庫(即使在主體服務器上)都會變得無法訪問。所以當見證為disconnected,可以關閉見證,從而禁用仲裁,使用ALTER DATABASE <DB> SET WITNESS OFF實現。
- DISCONNECTED:當鏡像環境中的伙伴均無法連接對方時出現。
可以使用sys.database_mirroring目錄視圖查看鏡像信息。
切換角色:
?
相比其他高可用,鏡像可以輕易切換角色,SQL Server鏡像可以使用下面三種方式切換角色:
手動Failover:
使用T-SQL語句:
Use master go ALTER DATABASE <DB> SET PARTNER FAILOVER--在主體服務器上執行使用SSMS:
?
圖1-6使用SSMS實現手動Failover
注意:高性能模式下不支持手動切換
自動Failover:
帶有見證服務器的高安全模式,當主體連接失敗或者停止工作時,會自動切換到鏡像服務器。當原主體服務器重新連機時,這臺原主體服務器會變成鏡像環境中的鏡像服務器。
可能丟失數據的強制切換:
這種切換方式支持沒有見證服務器的高性能和高安全模式,可以使用下面的T-SQL語句實現:
ALTER DATABASE <DB> SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS --在鏡像庫執行透明客戶端重定向?:
由SQL Native Client(SNAC)提供,允許鏡像環境下,應用程序自動重定向到鏡像數據庫中。通過在連接字符串加上Failover_Partner關鍵字來實現。應用程序需要添加重新嘗試聯接的功能。?
SQL Server2008鏡像的改進:
日志流壓縮:
基于最小化網絡帶寬帶來的影響,2008引入了日志流壓縮功能,但是需要注意壓縮和解壓功能天生就會增加CPU的開銷。
自動頁還原:
在過去,頁損壞是很頭痛的事情,并且很難恢復。2008的鏡像功能通過把鏡像庫的對應頁恢復到主體庫的頁上,從而恢復數據。但是有些頁鏡像是不能回復的,比如文件頭(page 0),數據庫啟動頁(boot page,page 9),SGAM、PFS。但是對于下面的情況,鏡像可以恢復:
- Error 823:OScyclic redundancy check(CRC)failure
- Error 824:logical errors including a bad page checksum or torn write
- Error 829:page has been marked as restore pending
SQL Server鏡像各功能所需版本:
一圖抵千言,圖1-7展示了SQL Server鏡像中各個功能所需的版本支持:
?
圖1-7 SQL Server鏡像中各個功能所需的版本支持
其他高可用對比
截至SQL Server 2012為止,內置的高可用功能有集群(Cluster)、鏡像(Mirroring)、復制(Replication)、日志傳送(Log Shipping)和AlwaysOn(2012出現)。其中AlwaysOn基本上已經實現了集群、鏡像的組合功能,所以本文不把鏡像和AlwaysOn比較。僅對其他部分比較。詳細信息可以看官方文檔:
http://msdn.microsoft.com/zh-cn/library/ms190202(v=sql.105).aspx
下面簡要介紹一下鏡像和其他部分的對比:
集群(Cluster)
優點:
- 這部分特指2012之前的Cluster,它基于Windows 的故障轉移集群,可以自動檢測SQL Server的健康狀態,進行自動故障轉移切換(自動Failover)。并且它的切換時間幾乎等于SQL Server服務啟動時間,除非有大量事務需要redo,否則一般不會延時很久,和帶有見證服務器的高安全運行模式一起被稱為2012之前的0延時高可用技術。另外兩種都不能實現自動切換及0延時。
- 通過虛擬網絡名稱,客戶端可以透明訪問活動實例,而不用修改程序的連接字符串,這一點比鏡像有進一步的改進,鏡像由于只有一個鏡像庫,所以在第一次Failover成功之后,如果不做處理,鏡像環境中原主體庫即使重新聯機。
- 從2008開始可以指定對非活躍節點進行升級維護。
缺點:
- 使用共享磁盤,如果共享磁盤出問題,整個Cluster都會癱瘓。
- 非活躍節點一直處于停止狀態,不能分攤負載,也造成資源浪費。
- 實施成本高,需要最少3臺機且必須在域中。
- 故障轉移是整個實例的,和鏡像不同,如果只有某個或者少數幾個庫出現問題需要Failover,鏡像可以進行單獨轉移,但是Cluster不可以,這樣會導致少數不相關的庫受牽連。
Cluster有譯成群集,不過這個無所謂,大家知道這個意思即可。我個人偏向使用英文。
復制(Replication)
復制天生就不是一種高可用技術,實際上是用來進行數據同步而已。如果單純進行高可用方案,復制不是一個首選方案。
優點:
- 實現對象級別的同步,可以細化到列和行。
- 訂閱庫(也就是復制環境下的目標庫)是可讀的,可以進行讀寫分離方案。
- 支持多個庫訂閱一個庫。延時可以達到秒級。
- 可以使用不同的SQL Server版本。
缺點:
- 不提供自動故障轉移。
- 不保證對象0丟失。
- 故障偵測較為困難,錯誤信息往往不能很明顯地表現出問題。
- 對表的定義有一定限制,比如事務復制要求表必須有主鍵。
日志傳送(Log Shipping)
優點:
- 目標庫可作為報表使用。并且過程中對主體服務器的壓力很小。
- 支持冗余多個副本,可進行遠程暖備。
- 機制簡單,故障偵測較為容易。
缺點:
- 不支持不同版本的SQL Server。
- 延時是一定有的,不能實現完全同步。
- 不支持自動偵測和轉移。
- 還原日志時,目標庫不能對外訪問。
- 同步以庫為單位。
?
下面借用《SQL Server 2012 實施與管理實戰指南》上的一個表格來總結一下:
功能 | Cluster | 日志傳送 | 鏡像 | 復制 |
保護級別 | 實例 | 庫 | 庫 | 數據庫對象 |
數據丟失 | / | 可能 | 同步模式下無 | 可能有 |
自動故障轉移 | 是 | 否 | 高安全模式下是 | 否 |
對客戶端是否透明 | 是 | 否 | 是,但需要設置字符串 | 否 |
停機時間 | 基于服務重啟 | 長 | 等于恢復時間 | 長 |
多備用庫 | 否 | 是 | 否 | 是 |
備用副本可讀 | / | 是 | 否 | 是 |
抵御誤操作 | 否 | 是 | 否 | 否 |
抵御磁盤故障 | 否 | 是 | 是 | 是 |
是否需要特定硬件 | Windows集群 | 無 | 要求較好的磁盤和網絡 | 無 |
對性能影響 | 低 | 中 | 中 | 高 |
版本支持 | 2000開始 | 2000開始 | 2005開始 | 2000開始 |
總結
以上是生活随笔為你收集整理的第三篇——第二部分——第一文 SQL Server镜像简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【CSON原创】 图片放大器效果发布
- 下一篇: vim多窗口使用技巧