部署AlwaysOn第二步:配置AlwaysOn,創建可用性組

来源:http://www.cnblogs.com/ljhdo/archive/2017/01/21/4434798.html
-Advertisement-
Play Games

AlwaysOn是在SQL Server 2012中新引入的一種高可用技術,從名稱中可以看出,AlwaysOn的設計目標是保持資料庫系統永遠可用。AlwaysOn利用了Windows伺服器故障轉移集群(Windows Server Failover Clustering,簡稱WSFC)的健康檢測和自 ...


AlwaysOn是在SQL Server 2012中新引入的一種高可用技術,從名稱中可以看出,AlwaysOn的設計目標是保持資料庫系統永遠可用。AlwaysOn利用了Windows伺服器故障轉移集群(Windows Server Failover Clustering,簡稱WSFC)的健康檢測和自動故障轉移的特性,因此,必須建立在WSFC之上,搭建WSFC的過程,請參考《部署AlwaysOn第一步:搭建Windows伺服器故障轉移集群》。

AlwaysOn支持的高可用單位是可用性組(Availability Group,簡稱AG),AG是包含了一個或多個用戶資料庫(User Database)的容器,AG里不能包含系統資料庫;AG以用戶資料庫的集合為單位進行健康檢測和故障轉移,就是說,AG中的所有資料庫作為一個整體發生故障轉移。

一,AlwaysOn的基本架構

1,瞭解AlwaysOn的關鍵特性

  • AlwaysOn支持的故障轉移,不是以整個SQL Server實例為單位,而是以AG為單位,AG中的多個用戶資料庫一起進行故障轉移;
  • AG提供虛擬的伺服器網路名,也就是AG Listener,無論哪台伺服器是當前的Primary Server,客戶端都可以使用統一的AG Listener進行連接;
  • AlwaysOn在輔助伺服器(Secondary Server)上維護用戶資料庫組的副本,同步提交方式能夠使Primary Server和Secondary Server上的數據保持完全同步;
  • 在特定的配置情況下,客戶端的只讀請求可以被自動定向到輔助伺服器,減少了Primary Server的IO壓力;
  • 一臺主伺服器最多對應4台輔助伺服器,總共5台伺服器,發生故障轉移時,可以切換到任意一臺輔助伺服器上;

2,推薦安裝SQL Server單機實例(stand-alone)

部署AlwaysOn之前,必須搭建WSFC環境;在Windows集群的結點上,推薦安裝SQL Server單機實例,AlwaysOn僅要求所有的SQL Server實例都運行在同一個Windows集群環境中,但SQL Server實例本身不需要是集群模式的,推薦安裝SQL Server單機實例。在SQL Server安裝中心中,選擇“全新SQL Server獨立安裝或向現有安裝添加功能(New SQL Server stand-alone installation or add features to an existing installation)”。

3,可用性資料庫(Availability Database)

AlwaysOn可用性組裡包含一個或多個用戶資料庫,稱作可用性資料庫(Availability Database),每個可用性副本上都存儲可用性資料庫的副本,這些資料庫副本彼此之間互相同步,如果可用性副本是SQL Server單機實例,那麼資料庫副本就存儲在實例的本地磁碟(Local Disk)中。可用性組不能包括系統資料庫,就是說,系統資料庫不能通過AlwaysOn實現高可用性。

在多個可用性副本上,只有一個可用性副本上運行的資料庫處於可讀寫狀態,這個可讀寫的資料庫稱作Primary Database,這個可用性副本稱作Primary Replica,其餘的副本都稱作輔助副本(Secondary Replica),輔助副本上的資料庫可能是不可訪問的,或者是只讀的,這些資料庫稱作輔助資料庫。一旦發生故障轉移,任何一個輔助副本都可以成為新的Primary Replica,主副本會不斷地將Primary database上的數據更新發送到輔助副本,實現副本間的數據同步。

4,AG是集群的資源組

從WSFC的角度來看,AG是集群的資源組,因此,AG中包含的所有用戶資料庫是作為一個整體在集群的結點之間進行故障轉移的,這使得AlwaysOn非常適合那些需要用到多個資料庫的應用程式。

5,偵聽器(Listener)

在故障轉移集群管理器(Failover Cluster Manager)中,WSFC只能看到一個資源組,就是AlwaysOn的可用性組(AG),但是應用程式不能使用資源組的名字登錄SQL Server實例,必須知道當前主副本(Primary Replica)的名字,使用這個伺服器名稱連接SQL Server實例。一旦發生可用性組(AG)的故障轉移,應用程式必須通過修改連接字元串(Connection String)重新連接到新的Primary Replica上,這很麻煩。通過可用性組偵聽器(Availability Group Listener,簡稱Listener),能夠解決該問題。Listener是一個虛擬的伺服器,用於讓應用程式透明的連接到主副本而不會受到故障轉移的影響,一個Listener包含虛擬的網路名(DNS Name),虛擬IP地址和埠號。創建了Listener之後,WSFC就會為可用性組資源添加虛擬IP地址和虛擬網路名資源,應用程式通過連接虛擬網路名,連接主副本(Primary Replica)上的SQL Server實例。

應用程式使用Listener的虛擬網路名連接SQL Server實例,是以一個預設實例的形式訪問的,只有伺服器名,沒有SQL Server實例名,因此應用程式不會嘗試使用SQL Brower 服務。推薦AlwaysOn的各個副本都使用預設實例,預設埠。如果Listener使用的埠號是預設埠1433,那麼應用程式能夠直接使用虛擬網路名連接到SQL Server實例。

二,AlwaysOn的數據同步原理

AlwaysOn會在各個副本上維護資料庫的副本,主副本上發生的數據更新,都會同步到輔助副本上,為了實現數據同步,AlwaysOn需要完成三個任務:

  • 把主副本上發生的數據更新的事務日誌記錄下來;
  • 把事務日誌記錄傳輸到各個輔助副本;
  • 在各個輔助副本上重做數據更新;

在主副本和輔助副本上,SQL Server都會啟動相應的線程來完成相應的任務。

1,日誌持久化

任何一個SQL Server都有個Log Writer線程,當事務提交一個數據更新時,Log Writer把數據更新的日誌寫入到物理事務日誌文件。

2,主副本的日誌傳輸

對於配置AlwaysOn 主副本的資料庫,SQL Server創建一個Log Scanner線程,負責將日誌記錄從日誌緩衝區或者事務日誌文件讀出,打包成日誌塊,發送到各個輔助副本,由於Log Scanner線程的不間斷工作,使得主副本上的數據變化,不斷地向輔助副本上傳播。

3,輔助副本上的固化(Harden)和重做(Redo)

在輔助副本上,同樣有兩個線程固化線程和重做線程完成相應的數據更新操作。固化線程將主副本上Log Scanner傳入的日誌塊寫入輔助副本的硬碟上的事務日誌文件里,而重做線程,負責從硬碟上讀取事務日誌,將日誌記錄翻譯成數據更新操作,在輔助副本的資料庫上重做主副本的數據更新操作。

當重做線程完成工作之後,輔助副本上的資料庫和主副本保持同步,重做線程每隔固定的時間間隔,就會向主副本報告自己的工作進度,主副本根據各個輔助副本的工作進度,就能計算數據的差異。

在AlwaysOn中,在固化線程和重做線程是完全獨立工作的,固化線程負責將主資料庫傳遞的日誌寫入到硬碟上的日誌文件中,將日誌持久化存儲;而重做線程負責讀取和翻譯已被固化線程存儲的日誌,將主資料庫上的數據更新操作在輔助資料庫上重新執行。

三,AlwaysOn的可用性模式

可用性模式決定了主副本在提交事務之前,是否需要等待某個輔助副本將事務日誌記錄固化到硬碟,AlwaysOn可用性組支持兩種可用性模式:非同步提交模式和同步提交模式。

1,非同步提交模式

當輔助副本處於非同步提交模式時,主副本無需等待輔助副本完成日誌固化,就可以提交事務,因此,主副本事務提交不會受到輔助資料庫的影響而產生等待,但是,輔助資料庫的更新會滯後於主資料庫,如果發生故障轉移,可能會導致某些數據更新丟失。

在非同步提交模式下,輔助副本會儘量和主副本的日誌記錄保持一致,不過,即使輔助資料庫和主資料庫上的數據是同步的,可用性組始終認為輔助資料庫處於“在同步”(SYNCHRONIZING)狀態,因為,理論上在非同步模式下,輔助資料庫在任何時間點都可能滯後於主資料庫。

2,同步提交模式

在同步提交模式下,主資料庫在提交事務之前,主副本必須等待輔助副本將日誌固化到硬碟上,主副本只有收到來自輔助副本的日誌固化成功的確認信息之後,才能提交事務;只要輔助副本沒有向主副本報告日誌固化完成,主副本上的事務就不能提交。這樣能夠保持主副本和輔助副本的數據始終是同步的,只要一直進行數據同步,輔助資料庫就會保持”已同步“(SYNCHRONIZED)狀態。

同步提交模式能夠實現輔助資料庫和主資料庫上的數據的完全同步,但是,代價是主資料庫上的事務提交延遲增加,可以說,同步提交模式相對於性能來說,更強調高可用性。

3,可用性副本之間的短線連接狀態

”DISCONNECTED“連接狀態:AlwaysOn可用性組之間有一個會話超時機制,預設值10s。主副本和輔助副本之間,按固定的時間間隔相互發送ping,在會話超時時間內,如果主副本收到輔助副本的ping命令,就說明副本之間的連接正常;一旦某個輔助副本因為故障而不能響應,產生會話超時,主副本將該輔助副本的連接設置為”DISCONNECTED“連接狀態,即使使用同步提交模式,主副本的事務也不需要等待該副本的響應就可以提交。

4,輔助資料庫的”NOT SYNCHRONIZING“狀態

無論使用什麼可用性模式,如果一個事務在輔助資料庫上重做失敗,就會導致輔助副本進入”NOT SYNCHRONIZING“狀態,即使處於同步提交模式,主副本的事務也不需要等待該副本的響應就可以提交。

如果用戶想中斷資料庫的數據同步,而不想影響可用性組中的其他資料庫,可以通過在SSMS中選擇Suspend Data Movement來手動掛機,掛起之後,該資料庫在各個可用性副本上的狀態都會變成”NOT SYNCHRONIZING“狀態。

四,AlwaysOn的故障轉移

當WSFC觸發故障轉移之後,一個輔助副本被選擇成為新的主副本角色,該副本上的SQL Server實例對可用性資料庫執行恢復操作,使其成為新的主資料庫;在故障轉移完成之後,如果原先的主副本還可用,那麼它就成為輔助副本,它上面的資料庫就成為了輔助資料庫。

但AlwaysOn發現故障之後,是否立即出發故障轉移呢?這取決於可用性副本的可用性模式和故障轉移模式,如圖:

只有主副本和轉移的目標副本都配置為”同步提交模式+自動故障轉移“模式時,才能實現兩個可用性副本之間的自動故障轉移。在三種故障轉移模式中,只有強制故障轉移可能丟失數據。自動故障轉移和手動故障轉移,都必須配置在同步提交模式下,必須資料庫都處於SYNCHRONIZED狀態。對於非同步提交模式的輔助副本,無論數據是否已經達到同步,都只會處於SYNCHRONIZING狀態,只能支持強制故障轉移。

五,創建可用性組

1,在創建AG之前,配置SQL Server實例啟用AlwaysOn

在SQL Server配置管理器(SQL Server Configuration Manager)中打開SQL Server 實例的屬性,輸入Windows 故障轉移集群的名稱,並勾選“Enable AlwaysOn Availabilitty Groups”選項啟用AlwaysOn 可用性組,在所有可用性副本上都啟用SQL Server實例的AlwaysOn 可用性組。

2,使用SSMS連接任意主副本的SQL Server實例,打開新建AG嚮導(New Availability Group Wizard)

連接到主副本,是因為該副本上擁有所有的可用性資料庫,如果所有的可用性副本上都有相同的資料庫副本,那麼可以連接任意一個副本。

3,指定AG的名字,勾選“Database Level Health Detection”選項

4,選擇可用性數據

從資料庫列表中需要添加到可用性組中的數據,這些資料庫將成為一個整體一起發生故障轉移,本例勾選Test_DW。

添加到可用性組中的資料庫必須滿足一定的要求:

  • 資料庫可以讀寫;
  • 資料庫的恢復模式是FULL;
  • 資料庫已經做過完整備份;

5,添加可用性副本

使用“Add Replica”添加可用性副本,在Availability Replicas列表中,能夠查看各個可用性副本的配置:

  • Server Instance:副本的實例名稱
  • Initial Role :是副本初始角色,Primary是主副本,Secondary是輔助副本;
  • 勾選“Automatic Failover” :副本的故障轉移模式是自動故障轉移;
  • 勾選“Synchronous Commit”:副本的可用性模式是同步提交模式;
  • “Readable Secondary”:可讀的輔助副本,主資料庫是可讀寫的,輔助資料庫可以設置為可讀的;

6,創建Listener

創建一個可用性組的偵聽器,實際上是虛擬的伺服器,

  • Listener DNS Name:網路名,命名為TestAGListener;
  • Port:推薦使用預設埠1433;
  • Network Mode:IP地址的分配方式,建議使用Static IP,本例使用DHCP;
  • Subnet:子網,系統自動設置;

7,選擇如何在輔助副本上初始化AG中的數據

FULL:嚮導自動對主資料庫做完整備份和日誌備份,並將備份文件存放在共用目錄中,其他副本通過共用目錄獲得資料庫的備份,併在各自的SQL Server實例上還原資料庫。通過FULL初始化方式,必須確保主副本上的存儲主資料庫文件的路徑在輔助副本上也存在,即資料庫文件的存儲路徑一致。

Join Only:如果已經手動在各個輔助副本上還原了資料庫,使用該選項,將各個輔助副本直接加入到可用性組中。

Skip Initial data sync:跳過該步驟,用戶需要手動在主副本上對資料庫做完整備份,並還原到所有的輔助副本,然後通過SSMS將資料庫添加到可用性組中。

推薦將主資料庫和輔助資料庫的文件路徑保持一致。

 

8,成功創建可用性組

執行後續的Validation和Summary之後,嚮導開始創建可用性組,在創建完成之後,使用SSMS打開“AlwaysOn High Availability”,能夠看到創建成功的可用性組:“TestAG”,括弧中的Primary表示當前的可用性副本是主副本(Primary Replica)。 

六,可用性組是集群的資源組

AlwaysOn的可用性組是集群的資源組,資源類型是“SQL Server Availability Group”,AlwaysOn的故障轉移建立在WSFC的健康檢測和故障轉移的特性之上,由於,WSFC的故障轉移是以資源組為單位的,因此,AlwaysOn的每次故障轉移都會將整個可用性組裡的資料庫一起轉移。

1,查看集群的資源組

打開故障轉移集群管理器(Failover Cluster Manager),選中集群結點,點開Roles,能夠看到創建成功的可用性組 TestAG,角色類型(Type)是Other;

2,資源組的故障轉移屬性

右擊資源組的屬性,在Failover Tab中,查看集群的故障轉移屬性的設置,預設設置如下圖:

  • 故障轉移(Failover)屬性:設置集群在指定的時間區間內執行故障轉移的次數;
  • 故障恢復(Failback)屬性:設置集群在發生故障轉移之後,把資源組移回到最優先節點;

兩者的區別是:

  • 故障轉移(Failover)是指:出現故障後轉移,集群把故障結點擁有的資源組轉移到另一個可用的結點上;
  • 故障恢復(Failback)是指:出現故障後恢復,在發生故障轉移之後,如果最優先結點恢復正常,把資源組移回到最優先節點;

3,切換到General Tab

首選結點(Preferred Owners)選項的預設設置是勾選集群中的所有結點,優先順序是從上到下,第一個勾選的結點是最優先結點(Most Preferred Owners)。

在發生故障轉移之後,如果最優先結點恢復健康,那麼故障恢復(Failback)將資源組移回到最優先選結點;

 

 

參考文檔:

《SQL Server 2012 實施與管理實戰指南》第三章

虛擬化IDC的高可用和高可靠性解決方案 

從0開始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)

AlwaysOn Failover Cluster Instances (SQL Server)


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

-Advertisement-
Play Games
更多相關文章
  • 前幾天剛完工的一個定製單,需要用到分享,第三方登錄,微信支付功能。因為一直都是用友盟去集成分享和第三方登錄,所以項目初期就使用cocopads導入了友盟庫。 上個月開始做支付功能,支付寶支付沒有什麼問題,按照官方文檔順利實現。到微信支付時候,下載了微信包,導入項目,順利完成支付功能。然後開始做第三方 ...
  • 微軟新出UWP手機端調試利器App File Explorer簡介。通過瀏覽器就可以安裝卸載UWP應用,下載上傳手機端應用文件,查看應用運行記憶體等情況。 ...
  • 伴著6S的發佈,iOS 9.0開始支持3D Touch功能。使用場景來分一共有三種情況。 一、基於UIViewController的擴展 1. 首先要註冊需要監聽重按手勢的 source view: 2. 重按手勢識別出來之後需要按照 協議去處理 peek 和 pop 事件,這個協議有兩個方法 3. ...
  • 作者:Antonio Leiva 時間:Jan 19, 2017 原文鏈接:https://antonioleiva.com/anko-background-kotlin-android/ Anko是由Jetbrains用Kotlin開發的Android庫,它可以用於很多不同的方面。它的主要特性是使 ...
  •    受人所托,做一個類似於qq賬號信息里的一個動畫,感覺挺有意思,也沒感覺有多難,就開始做了,結果才發現學的數學知識都還給體育老師了,研究了大半天才做出來。    先看一下 "動畫效果" : 用到的知識點: (1)三角函數 (2)CALayer (3)CAT ...
  • 博客也開了挺長時間了,一直都沒有來寫博客,主要原因是自己懶~~~此篇博客算是給2017年一個好的開始,同時也給2016年畫上一個句點,不留遺憾。 那就讓我們正式進入今天的主題:貝塞爾曲線。 首先,讓我們來瞭解下什麼是貝塞爾曲線。 貝塞爾曲線(Bézier curve),又稱貝茲曲線或貝濟埃曲線,是應 ...
  • /*可以更改列的大小,只要將滑鼠指針懸停到該列標題的右邊界,再單擊並拖動該列邊界到合適的位置。雙擊右邊界使得該列自動調整大小如果選擇幾個單元,然後將其剪切並複製到其他網格,則這幾個單元可作為單獨的單元處理(如果選擇"以文本格式顯示結果"選項,剪切的數據會全部粘帖到一個單元格中)可以從多行只選擇一列或 ...
  • Java代碼 Java代碼 關註流行國外網站 facebook:http://www.fb-on.com facebook官網:http://www.facebookzh.com facebook:http://www.cn-face-book.com youtube:http://www.yout ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...