1. 程式人生 > >002.SQLServer資料庫映象高可用簡介

002.SQLServer資料庫映象高可用簡介

一 資料庫映象簡介

1.1 資料庫映象概述

資料庫映象維護一個數據庫的兩個副本,這兩個副本必須駐留在不同的 SQL Server 資料庫引擎伺服器例項上。 通常,這些伺服器例項駐留在不同位置的計算機上。 啟動資料庫上的資料庫映象操作時,在這些伺服器例項之間形成一種關係,稱為“資料庫映象會話”。 其中一個伺服器例項使資料庫服務於客戶端(“主體伺服器”), 另一個伺服器例項則根據映象會話的配置和狀態,充當熱備用或溫備用伺服器(“映象伺服器”)。 同步資料庫映象會話時,資料庫映象提供熱備用伺服器,可支援在已提交事務不丟失資料的情況下進行快速故障轉移。 未同步會話時,映象伺服器通常用作熱備用伺服器(可能造成資料丟失)。 在“資料庫映象會話”中,主體伺服器和映象伺服器作為“夥伴”進行通訊和協作。 兩個夥伴在會話中扮演互補的角色:“主體角色”和“映象角色”。 在任何給定的時間,都是一個夥伴扮演主體角色,另一個夥伴扮演映象角色。 每個夥伴擁有其當前角色。 擁有主體角色的夥伴稱為“主體伺服器”,其資料庫副本為當前的主體資料庫。 擁有映象角色的夥伴稱為“映象伺服器”,其資料庫副本為當前的映象資料庫。 如果資料庫映象部署在生產環境中,則主體資料庫即為“生產資料庫”。 資料庫映象涉及儘快將對主體資料庫執行的每項插入、更新和刪除操作“重做”到映象資料庫中。 重做通過將活動事務日誌記錄的流傳送到映象伺服器來完成,這會盡快將日誌記錄按順序應用到映象資料庫中。 與邏輯級別執行的複製不同,資料庫映象在物理日誌記錄級別執行。 從 SQL Server 2008 開始,在事務日誌記錄的流傳送到映象伺服器之前,主體伺服器會先將其壓縮。 在所有映象會話中都會進行這種日誌壓縮。 提示:給定的伺服器例項可以參與到多個具有相同或不同夥伴的併發資料庫映象會話中。 某個伺服器例項可能在某些會話中是夥伴,而在其他會話中則是見證伺服器。 映象伺服器例項必須正在執行 SQL Server 的相同版本。

1.2 資料庫映象的優點

資料庫映象是一種簡單的策略,具有下列優點:
  • 提高資料庫的可用性
發生災難時,在具有自動故障轉移功能的高安全性模式下,自動故障轉移可快速使資料庫的備用副本聯機(而不會丟失資料)。 在其他執行模式下,資料庫管理員可以選擇強制服務(可能丟失資料),以替代資料庫的備用副本。 有關詳細資訊,請參閱本主題後面的角色切換。
  • 增強資料保護功能
在 SQL Server 2008 Enterprise 或更高版本上執行的資料庫映象夥伴會自動嘗試解決某些阻止讀取資料頁的錯誤。 無法讀取頁的夥伴會向其他夥伴請求新副本。 如果此請求成功,則將以新副本替換不可讀的頁,這通常會解決該錯誤。
  • 提高生產資料庫在升級期間的可用性
為了儘量減少映象伺服器的停機時間,您可以按順序升級承載故障轉移夥伴的 SQL Server 例項。 這樣只會導致一個故障轉移的停機時間。 這種形式的升級稱為“滾動升級”。

1.3 資料庫映象術語和定義

  • 自動故障轉移 (automatic failover)
一種過程,當主體伺服器不可用時,該過程將導致映象伺服器接管主體伺服器的角色,並使其資料庫的副本聯機以作為主體資料庫。
  • 故障轉移夥伴 (failover partners)
充當映象資料庫的角色切換夥伴的兩個伺服器例項(主體伺服器或映象伺服器)。 是指在負責將服務傳輸到映象資料庫(但它處於未知狀態)的主體伺服器出現故障時資料庫所有者啟動的故障轉移。
  • 高效能模式 (High-performance mode)
資料庫映象會話非同步執行並僅使用主體伺服器和映象伺服器。 唯一的角色切換形式是強制服務(可能造成資料丟失)。
  • 高安全性模式 (High-safety mode)
資料庫映象會話同步執行並可以選擇使用見證伺服器、主體伺服器和映象伺服器。 上圖所示不帶自動故障轉移的高安全性模式; 上圖所示帶自動故障轉移的高安全性模式。
  • 手動故障轉移 (manual failover)
是指在負責將服務從主體資料庫傳輸到映象資料庫(處於同步狀態)的主體伺服器仍在執行時資料庫所有者啟動的故障轉移。
  • 映象資料庫 (mirror database)
通常與主體資料庫完全同步的資料庫副本。
  • 映象伺服器 (mirror server)
在資料庫映象配置中,映象資料庫所在的伺服器例項。
  • 映象伺服器 (mirror server)
在資料庫映象配置中,映象資料庫所在的伺服器例項。
  • 主體資料庫 (principal database)
資料庫映象中的一種讀寫資料庫,其事務日誌記錄將應用到資料庫的只讀副本(映象資料庫)。
  • 主體伺服器 (principal server)
在資料庫映象中,是指當前作為主體資料庫的資料庫所屬於的夥伴。
  • 重做佇列 (redo queue)
收到的等待映象伺服器磁碟的事務日誌記錄。
  • 角色 (role)
主體伺服器和映象伺服器擔任互補的主體角色和映象角色。 也可以由第三個伺服器例項來擔任見證伺服器角色。
  • 角色切換 (role switching)
映象接管主體角色。
  • 傳送佇列 (send queue)
在主體伺服器的日誌磁碟累積的未傳送的事務日誌記錄。
  • 會話 (session)
是指主體伺服器、映象伺服器和見證伺服器(如果存在)之間進行資料庫映象期間形成的關係。 映象會話啟動或繼續後,將累積在主體伺服器上的主體資料庫日誌記錄傳送給映象伺服器的過程,此過程將這些日誌記錄儘快寫入磁碟,以便與主體伺服器保持同步。
  • 事務安全 (Transaction safety)
一種映象特定的資料庫屬性,用於確定資料庫映象會話是同步執行還是非同步執行。 有兩種安全級別:FULL 和 OFF。
  • 見證伺服器 (Witness)
僅用於高安全性模式,SQL Server 的一個可選例項,它能使映象伺服器識別何時要啟動自動故障轉移。 與這兩個故障轉移夥伴不同的是,見證伺服器並不能用於資料庫。 見證伺服器的唯一角色是支援自動故障轉移。

1.4 執行模式

資料庫映象會話以同步操作或非同步操作執行。 在非同步操作下,事務不需要等待映象伺服器將日誌寫入磁碟便可提交,這樣可最大程度地提高效能。 在同步操作下,事務將在夥伴雙方處提交,但會延長事務滯後時間。 有兩種映象執行模式。 一種是“高安全性模式”,它支援同步操作。 在高安全性模式下,當會話開始時,映象伺服器將使映象資料庫儘快與主體資料庫同步。 一旦同步了資料庫,事務將在夥伴雙方處提交,這會延長事務滯後時間。 第二種執行模式,即“高效能模式”,非同步執行。 映象伺服器嘗試與主體伺服器傳送的日誌記錄保持同步。 映象資料庫可能稍微滯後於主體資料庫。 但是,資料庫之間的時間間隔通常很小。 但是,如果主體伺服器的工作負荷過高或映象伺服器系統的負荷過高,則時間間隔會增大。 所有資料庫映象會話都只支援一臺主體伺服器和一臺映象伺服器。 具有自動故障轉移功能的高安全性模式要求使用第三個伺服器例項,稱為“見證伺服器”。 與這兩個夥伴不同的是,見證伺服器並不能用於資料庫。 見證伺服器通過驗證主體伺服器是否已啟用並執行來支援自動故障轉移。 只有在映象伺服器和見證伺服器與主體伺服器斷開連線之後而保持相互連線時,映象伺服器才啟動自動故障轉移。   注意:建立新的映象會話或將見證伺服器新增到現有映象配置要求涉及的所有伺服器例項執行相同版本的 SQL Server。 但是,當升級到 SQL Server 2008 或更高版本時,所涉及的例項的版本可以不同。 1.5 事務安全與執行模式 執行模式是非同步還是同步取決於事務安全設定。 如果專門使用 SQL Server Management Studio 來配置資料庫映象,則在您選擇執行模式時,將自動配置事務安全設定。 如果使用 Transact-SQL 配置資料庫映象,則必須瞭解如何設定事務安全。 事務安全由 ALTER DATABASE 語句的 SAFETY 屬性控制。 在正在映象的資料庫中,SAFETY 為 FULL 或 OFF。 如果將 SAFETY 選項設定為 FULL,則在初始同步階段後,資料庫映象操作將同步執行。 如果在高安全性模式下設定見證伺服器,則會話支援自動故障轉移。 如果將 SAFETY 選項設定為 OFF,則資料庫映象操作將非同步執行。 會話在高效能模式下執行,並且 WITNESS 選項也應設定為 OFF。

二 角色切換

2.1 切換概述

在資料庫映象會話上下文中,通常可以使用一個稱為“角色切換”的過程來互換主體角色和映象角色。 角色切換涉及將主體角色轉換給映象伺服器的操作。 在角色切換中,映象伺服器充當主體伺服器的“故障轉移夥伴”。 進行角色切換時,映象伺服器將接管主體角色,並使其資料庫的副本聯機以作為新的主體資料庫。 以前的主體伺服器(如果有)將充當映象角色,並且其資料庫將變為新的映象資料庫。 這些角色可以反覆地來回切換。

2.2 角色切換形式

  • 自動故障轉移
這要求使用高安全性模式並具有映象伺服器和見證伺服器。 資料庫必須已同步,並且見證伺服器必須連線到映象伺服器。 見證伺服器的作用是驗證給定的夥伴伺服器是否已啟動並執行。 如果映象伺服器與主體伺服器斷開連線,但見證伺服器仍與主體伺服器保持連線,則映象伺服器無法啟動故障轉移。
  • 手動故障轉移
這要求使用高安全性模式。 夥伴雙方必須互相連線,並且資料庫必須已同步。
  • 強制服務(可能造成資料丟失)
在高效能模式和不帶自動故障轉移功能的高安全性模式下,如果主體伺服器出現故障而映象伺服器可用,則可以強制服務執行。 提示:高效能模式用於在沒有見證伺服器的情況下執行。 但如果存在見證伺服器,則強制服務將要求見證伺服器連線到映象伺服器。 在任何一種角色切換情況下,一旦新的主體資料庫聯機,客戶端應用程式便會通過重新連線到資料庫來快速恢復。 給定的伺服器例項可以參與到多個具有相同或不同伺服器例項的併發資料庫映象會話(每個映象資料庫發生一次)中。 通常,伺服器例項專門用作其所有資料庫映象會話中的夥伴或見證伺服器。 但是,由於每個會話都獨立於其他會話,因此伺服器例項可以在某些會話中充當夥伴,而在其他會話中充當見證伺服器。 例如,請看三個伺服器例項(SSInstance_1、SSInstance_2 和 SSInstance_3)中的下列四個會話。 每個伺服器例項都可在某些會話中作為夥伴,而在其他會話中作為見證伺服器:
伺服器例項 資料庫 A 的會話 資料庫 B 的會話 資料庫 C 的會話 資料庫 D 的會話
SSInstance_1 見證伺服器 夥伴 夥伴 夥伴
SSInstance_2 夥伴 見證伺服器 夥伴 夥伴
SSInstance_3 夥伴 夥伴 見證伺服器 見證伺服器
下圖說明了都作為夥伴參與兩個映象會話的兩個伺服器例項。 一個會話用於名為 Db_1 的資料庫,另一個會話用於名為 Db_2 的資料庫。 每個資料庫獨立於其他資料庫。 例如,伺服器例項最初可能是兩個資料庫的映象伺服器。 如果其中一個數據庫發生故障轉移,則伺服器例項將變為已發生故障轉移的資料庫的主體伺服器,同時為其他資料庫保留映象伺服器。 或者有一個伺服器例項,它是兩個或多個以具有自動故障轉移功能的高安全性模式執行的資料庫的主體伺服器,如果此伺服器例項失敗,則所有資料庫將自動故障轉移到其相應的映象資料庫。 提示:如果將一個伺服器例項設定成既作為夥伴又作為見證伺服器參與會話,請確保資料庫映象端點能夠支援兩種角色。 同時,還要確保系統具有足夠資源以減少資源爭用。 注意:由於映象資料庫相互獨立,因此這些資料庫不能作為一個組來進行故障轉移。

三 其他

3.1 暫停會話對主體事務日誌的影響

資料庫所有者可以隨時暫停會話。 執行暫停操作將保留在刪除映象時的會話狀態。 暫停會話時,主體伺服器不會向映象伺服器傳送任何新的日誌記錄。 所有這些記錄將保持活動狀態,並堆積在主體資料庫的事務日誌中。 只要資料庫映象會話保持暫停狀態,事務日誌就不會被截斷。 因此,如果資料庫映象會話暫停時間過長,則可能會使該日誌填滿。

3.2 設定資料庫映象會話

開始映象會話之前,資料庫所有者或系統管理員必須建立映象資料庫,設定端點和登入名。在某些情況下,還要建立並設定證書。

3.3 與其他資料庫引擎功能的互操作性和共存

資料庫映象可以與 SQL Server 的下列功能或元件一起使用。
  • 日誌傳送
  • 全文目錄
  • 資料庫快照
  • 複製
注意:後續版本的 Microsoft SQL Server 將刪除該功能。請避免在新的開發工作中使用該功能,並著手修改當前還在使用該功能的應用程式。可改用 AlwaysOn 可用性組。 參考官方文件:https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2012/ms189852(v%3dsql.11