SQL Server Alwayson概念總結

来源:http://www.cnblogs.com/chenmh/archive/2017/10/24/6972007.html
-Advertisement-
Play Games

一、alwayson概念 “可用性組” 針對一組離散的用戶資料庫(稱為“可用性資料庫” ,它們共同實現故障轉移)支持故障轉移環境。 一個可用性組支持一組主資料庫以及一至八組對應的輔助資料庫(包括一個主副本和兩個同步提交輔助副本)。 輔助資料庫不是備份,應繼續定期備份您的資料庫及其事務日誌。 每組可用 ...


一、alwayson概念

“可用性組” 針對一組離散的用戶資料庫(稱為“可用性資料庫” ,它們共同實現故障轉移)支持故障轉移環境。 一個可用性組支持一組主資料庫以及一至八組對應的輔助資料庫(包括一個主副本和兩個同步提交輔助副本)。 輔助資料庫不是備份,應繼續定期備份您的資料庫及其事務日誌。

每組可用性資料庫都由一個“可用性副本” 承載。 有兩種類型的可用性副本:一個“主副本” 和一到四個“輔助副本”。 它承載主資料庫和一至八個“輔助副本” ,其中每個副本承載一組輔助資料庫,並用作可用性組的潛在故障轉移目標。 可用性組在可用性副本級別進行故障轉移。 可用性副本僅在資料庫級別提供冗餘 - 針對一個可用性組中的該組資料庫。 故障轉移不是由諸如因數據文件丟失或事務日誌損壞而使資料庫成為可疑資料庫等資料庫問題導致的。

主副本使主資料庫可用於客戶端的讀寫連接。 此外,它在稱為“數據同步” 的過程中使用,在資料庫級別進行同步。 主副本將每個主資料庫的事務日誌記錄發送到每個輔助資料庫。 每個次要副本緩存事務日誌記錄(“硬化”日誌),然後將它們應用到相應的輔助資料庫。 主資料庫與每個連接的輔助資料庫獨立進行數據同步。 因此,一個輔助資料庫可以掛起或失敗而不會影響其他輔助資料庫,一個主資料庫可以掛起或失敗而不會影響其他主資料庫。

或者,您可以配置一個或多個輔助副本以支持對輔助資料庫進行只讀訪問,並且可以將任何輔助副本配置為允許對輔助資料庫進行備份。

部署 Always On 可用性組 需要一個 Windows Server 故障轉移群集 (WSFC) 群集。 給定可用性組的每個可用性副本必須位於相同 WSFC 群集的不同節點上。 唯一的例外是在遷移到另一個 WSFC 群集時,此時一個可用性組可能會暫時跨兩個群集。

為您創建的每個可用性組創建一個 WSFC 資源組。 WSFC 群集將監視此資源組,以便評估主副本的運行狀況。 針對 Always On 可用性組 的仲裁基於 WSFC 群集中的所有節點,而與某一給定群集節點是否承載任何可用性副本無關。 與資料庫鏡像相反,在 Always On 可用性組中沒有見證伺服器角色。

二、可用性模式

可用性模式是每個可用性副本的一個屬性;可用性模式確定主副本是否需要等待輔助副本將事務日誌寫入到磁碟。

1.非同步提交模式

非同步提交模式是一種災難恢復解決方案,適合於可用性副本的分佈距離較遠的情況。 如果每個輔助副本都在非同步提交模式下運行,則主副本不會等待任何輔助副本強制寫入日誌, 而會在將日誌記錄寫入本地日誌文件後,立即將事務確認發送到客戶端。 主副本使用與針對非同步提交模式配置的輔助副本相關的最小事務滯後運行。

在“非同步提交模式”下,輔助副本永遠不會與主副本同步。 雖然給定的輔助資料庫可能會趕上對應的主資料庫,但任何輔助資料庫在任何時點都可能會落後。 對於主副本和輔助副本相隔很遠而且您不希望小錯誤影響主副本的災難恢復方案的情況,或性能比同步數據保護更重要的情況,非同步提交模式將會很有用。 而且,由於主副本不會等待來自輔助副本的確認,因而輔助副本上的問題從不會影響主副本。

非同步提交輔助副本會嘗試與接收自主副本的日誌記錄保持一致。 但非同步提交輔助資料庫往往會保持未同步狀態,並且可能稍微滯後於相應的主資料庫。通常,非同步提交輔助資料庫和相應的主資料庫之間的這個時間差會很小。但是,如果承載輔助副本的伺服器的工作負荷過高或網路速度很慢,則這個時間差會變得較大。

非同步提交模式所支持的唯一故障轉移形式為強制故障轉移(可能造成數據丟失)。 強制故障轉移是一種最後手段,僅可用於當前主要副本長時間保持不可用狀態並且主資料庫的即時可用性比可能丟失數據的風險更為重要的情況。故障轉移目標必須是其角色處於 SECONDARY 或 RESOLVING 狀態的副本。 故障轉移目標將轉換為主角色,並且其資料庫副本將成為主資料庫。 任何剩餘的輔助資料庫以及變得可用後的以前的主資料庫都將被掛起,直到您手動單獨恢復它們。 在非同步提交模式下,原始主副本尚未發送到以前的輔助副本的任何事務日誌都將丟失。 這意味著,某些或全部新的主資料庫可能會缺少最近提交的事務

2.同步提交模式

同步提交模式相對於性能而言更強調高可用性,為此付出的代價是事務滯後時間增加。 在同步提交模式下,事務將一直等到輔助副本已將日誌強制寫入到磁碟中才會向客戶端發送事務確認。

在同步提交可用性模式下,副本聯接到某個可用性組後,輔助資料庫就會與對應的主資料庫求得一致併進入 SYNCHRONIZED(已同步)狀態。 只要一直在進行數據同步,輔助資料庫就會保持 SYNCHRONIZED 狀態。 這可確保對主資料庫提交的每個事務也應用到對應的輔助資料庫。在同步輔助副本上的每個輔助資料庫之後,輔助副本的同步運行狀態總體上將為 HEALTHY。

註意:

1. 如果為當前主副本配置了非同步提交可用性模式,那麼對所有的輔助副本都採集非同步方式提交事務,不管這些副本各自的可用性模式,所以要保證同步提交模式那麼主副本和輔助副本都需要配置同步提交模式。

2.如果主副本與某一同步輔助會話超時,暫時將該輔助副本切換到非同步提交模式。在該輔助副本重新與主副本連接後,它們將恢復同步提交模式。

三、故障轉移模式

可用性副本的主角色和輔助角色在稱為“故障轉移” 的過程中通常是可互換的。 存在三種故障轉移形式:自動故障轉移(無數據丟失)、計劃的手動故障轉移(無數據丟失)和強制手動故障轉移(可能丟失數據)。最後一種形式通常稱為“強制故障轉移”

1.自動故障轉移所需條件

僅在以下條件下才發生自動故障轉移:

  • 存在自動故障轉移集。 此自動故障轉移集由主要副本和次要副本(自動故障轉移目標)構成,主要副本和次要副本都配置為同步提交模式並且設置為自動故障轉移。如果主要副本設置為手動故障轉移,即使次要副本設置為自動故障轉移,也無法發生自動故障轉移
  • 自動故障轉移目標具有正常運行的同步狀態(這指示故障轉移目標上的每個輔助資料庫都與其相應的主資料庫同步)。
  • Windows Server 故障轉移群集 (WSFC) 群集具有仲裁。
  • 主副本已變得不可用,並且由靈活的故障轉移策略定義的故障轉移條件級別已得到滿足。

註意:

1.在資料庫級別,諸如因數據文件丟失而使資料庫成為可疑資料庫、刪除資料庫或事務日誌損壞之類的資料庫問題不會導致可用性組進行故障轉移

2. AlwaysOn 可用性組監視自動故障轉移集中兩個副本的運行狀況。 如果任一副本失敗,則該可用性組的運行狀況狀態將設置為“嚴重”。 如果輔助副本失敗,則自動故障轉移將不可行,因為自動故障轉移目標不可用。 如果主副本失敗,則可用性組將故障轉移到輔助副本。 在之前的主副本進入聯機狀態之前,將不存在任何自動故障轉移目標。 在任一情況下,為了在連續出現失敗這種近乎不可能發生的情況下確保可用性,我們建議您將其他輔助副本配置為自動故障轉移目標。

3.要設置故障轉移模式為“自動”的前提是可用性模式是“同步提交”。

4.如果主要副本設置為手動故障轉移,即使次要副本設置為自動故障轉移,也無法發生自動故障轉移。

5.只能設置一個自動故障轉移輔助副本

四、可讀輔助副本

1.輔助角色支持的連接訪問類型

1.無連接
不允許任何用戶連接。 輔助資料庫不可用於讀訪問。 這是輔助角色中的預設行為。

2.僅讀意向連接
輔助資料庫僅適用於其 Application Intent 連接屬性設置為 ReadOnly 的連接(讀意向連接)。

3.允許任何只讀連接
輔助資料庫全部可用於讀訪問連接。 此選項允許較低版本的客戶端進行連接。

2.主角色支持的連接訪問類型

1.允許所有連接
主資料庫同時允許讀寫連接和只讀連接。 這是主角色的預設行為。

2.僅允許讀/寫連接
當 Application Intent 連接屬性設置為 ReadWrite 或未設置時,允許此連接。 不允許其 Application Intent 連接字元串關鍵字設置為 ReadOnly的連接。 僅允許讀寫連接可幫助防止您的客戶錯誤地將讀意向工作負荷連接到主副本。

註意:所有的限制只針對配置了可用性資料庫,非可用性資料庫不受這些連接的限制,配置讀寫分離至少得保證有兩個可讀副本,如果只有一個可讀副本當可讀副本變成了主副本之後會導致只讀意向無副本可連接。

五、alwayson同步原理

1.任何一個SQL Server里都有個叫Log Writer的線程,當任何一個SQL用戶提交一個數據修改事務時,它會負責把記錄本次修改的日誌信息先記入一段記憶體中的日誌緩衝區,然後再寫入物理日誌文件(日誌固化),所以對於任何一個資料庫,日誌文件里都會有所有數據變化的記錄。

2.對於配置為AlwaysOn主副本的資料庫,SQL Server會為它建立一個叫Log Scanner的工作線程,這個線程專門負責將日誌記錄從日誌緩衝區或者日誌文件里中讀出,打包成日誌塊,發送給各個輔助副本。由於它的不間斷工作,才使主副本上的數據變化,可以不斷地向輔助副本上傳播。

3.在輔助副本上,同樣會有兩個線程,完成相應的數據更新動作,它們是固化(Harden)和重做(Redo)。固化線程會將主副本Log Scanner所發過來的日誌塊寫入輔助副本的磁碟上的日誌文件里(這個過程被稱為"固化")。

而重做線程,則負責從磁碟上讀取日誌塊,將日誌記錄翻譯成數據修改操作,在輔助副本的資料庫上完成。當重做線程完成其工作以後,輔助副本上的資料庫就會跟主副本一致了。AlwaysOn就是通過這種機制,保持副本之間的同步。重做線程每隔固定的時間點,會跟主副本通信,告知它自己的工作進度。主副本就能夠知道兩邊數據的差距有多遠。

這些線程在工作上各自獨立,以達到更高的效率。Log Scanner負責傳送日誌塊,而無須等待Log Writer完成日誌固化;輔助副本完成日誌固化以後就會發送消息到主副本,告知數據已經傳遞完畢,而無須等待重做完成。其設計目標,是儘可能地減少AlwaysOn所帶來的額外操作對正常資料庫操作的性能影響。

同步操作按下列方式維護:

  1. 從客戶端收到事務後,主副本會將事務的日誌寫入事務日誌,同時將該日誌記錄發送到輔助副本。
  2. 日誌記錄寫入主資料庫的事務日誌後,事務將不能撤消,除非在此時故障轉移到尚未收到該日誌的輔助副本。主副本將等待來自同步提交輔助副本的確認。
  3. 輔助副本將強制寫入日誌(固化),並將確認消息返回給主副本。
  4. 收到來自輔助副本的確認後,主副本將完成提交處理並向客戶端發送一條確認消息。

六、會話超時機制

由於軟錯誤不能由伺服器實例直接檢測到,因此,軟錯誤可能導致一個可用性副本無限期等待會話中另一個可用性副本的響應。 為了防止發生這種情況, Always On 可用性組實施了會話超時機制,此機制基於以下條件:所連接的可用性副本會在每個打開的連接上按固定間隔發送 ping。 在超時期限內收到 ping 指示連接仍是開放的且伺服器實例正在通過此連接進行通信。 收到 ping後副本將重置此連接上的超時計數器。主副本和輔助副本相互 ping 以指示它們仍處於活動狀態, 會話超時限制是用戶可配置的副本屬性,預設值為 10 秒。

如果在會話超時期限內沒有收到來自另一個副本的ping,該連接將超時、連接將關閉;超時的副本進入 DISCONNECTED 狀態。 即使為同步提交模式的副本,事務也將不等待該副本重新連接暫時將該輔助副本切換到非同步提交模式。在該輔助副本重新與主副本連接後,它們將恢復同步提交模式。

總結

理解掌握這些概念對部署維護AlwaysOn集群非常的有幫助,可以結合測試對概念更深入的理解。

 

 

 

 

備註:

    作者:pursuer.chen

    博客:http://www.cnblogs.com/chenmh

本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須註明文章來源,且在文章開頭明顯處給明鏈接,否則保留追究責任的權利。

《歡迎交流討論》

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這個概念我大概是去年時候接觸到的吧,略略記錄了一下,沒有深入研究,恰逢最近秋招,在這裡寫一寫,順便加深自己的印象。 什麼是BFC? 頁面中的元素都隱含一個屬性Block Formatting Context(塊級格式化上下文) 簡稱BFC。 BFC有什麼用?如何開啟BFC?開啟BFC後會發生什麼? ...
  • 巨集定義,不一定放在PCH文件,可能放在一個.h文件,再用PCH包含進來。 ...
  • 在前面 的章節中講解了 語言中的數據類型、變數與常量的定義。不瞭解請參見前面的內容: 1. "Kotlin從無到有系列之數據類型介紹" 。 2. "Kotlin從無到有系列之變數、常量、註釋的使用" 。 下麵詳細為大家講解 中的控制語句使用。不得不說其和 中還是有很多不一樣的地方。 目錄 一、if語 ...
  • 最近新項目用到了Protobuf來儲存數據,安裝時遇到了不少坑,網上也有很多把Protobuf集成到iOS系統上但是坑很多 下邊總結一下安裝流程: 查看官方文檔源碼在 https://github.com/google/protobuf , 如果不想自己編譯獲得最新版本,則可以下載官方編譯好的各個平 ...
  • 現在有個需求, 要求編寫oracle存儲過程生成Excel文件到指定目錄, 但是oracle自己的API貌似不太給力, 所以只能通過另一種更強大的語言來實現了 ——Java。有一個Java框架叫POI,處理Excel起來非常好用,現在我把過程記錄下來: 一、下載POI的jar包 我的測試資料庫的版本 ...
  • 今天這篇文章總結一下如何監控SQL Server的死鎖,其實以前寫過MS SQL 監控錯誤日誌的告警信息,這篇文章著重介紹如何監控資料庫的死鎖,當然這篇文章不分析死鎖產生的原因、以及如何解決死鎖。死鎖(Dead Lock)的錯誤信息在sys.messages中的message_id為1205,可以使... ...
  • 1 背景 每個DB Server都有zabbix監控,除了異常情況的報警信息外,也會在日檢、周檢、月檢等工作中用到zabbix的監控數據,對zabbix監控數據會做兩種處理:1 數據分析(環比分析、最大值、最小值及平均值分析);2 主要檢測項目折線圖留檔(為啥需要留檔呢,因為zabbix監控過多服務 ...
  • 一.安裝環境 1、系統環境 系統IP主機名說明server_id centos6.7 192.168.0.173 master 資料庫:主 173 centos6.7 192.168.0.174 slave 資料庫:從 174 2、管理賬號 linux伺服器賬號/密碼資料庫管理員賬號密碼主從複製賬號 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...