SQL Server AlwaysOn架構及原理

來源:互聯網
上載者:User

標籤:

SQL Server AlwaysOn架構及原理

杜飛

SQL Server2012所支援的AlwaysOn技術集中了容錯移轉叢集、資料庫鏡像和記錄傳送三者的優點,但又不相同。容錯移轉叢集的單位是SQL執行個體, 資料庫鏡像和記錄傳送的單位是單個使用者資料庫,而AlwaysOn支援的單位是可用性群組,每個組中可以包括一個或者是多個使用者資料庫。也就是說,一旦發生 切換,則可用性群組中的所有資料群組會作為一個整體進行切換。

AlwaysOn底層依然採用Windows 容錯移轉叢集的機制進行監測和轉移,因此也需要先建立Windows Cluster,只不過可用性群組中的資料庫不一定非要再存放在共用儲存上了。可以是儲存在本地磁碟上。

下面,先看一下AlwaysOn的關鍵特性:

1. 同容錯移轉叢集一樣,也需要一個虛擬網路名稱用於用戶端的統一串連。

2.一個主伺服器可以最多對應四個次要伺服器,總數達到五個,而且次要伺服器支援唯讀功能。

3.次要伺服器可以獨立執行備份和DBCC維護命令。通過配置,可以實現用戶端的唯讀請求可以被自動定向到次要伺服器。

4.主伺服器和次要伺服器之間的資料會被加密和壓縮,以提高安全性和網路傳輸效率。

5..支援自動、手動和強制三種容錯移轉方式。

6.有儀錶盤用於監控AlwaysOn的運行狀態。

7.可以實現多網站的部署,即主要站台和次要站台可以跨物理網路。

AlwaysOn的基本架構

在Windows MSCS容錯移轉叢集的基礎上部署AlwaysOn高可用組,使用者可以在叢集節點上安裝SQL Server單機執行個體,也可以安裝SQL Server叢集執行個體,AlwaysOn僅要求所有SQL Server執行個體都運行在同一個MSCS中,但SQL Server執行個體本身是不需要群集模式的,這與SQL Server2008 群集的執行個體完全不同。在此推薦使用單機模式的SQL Server,好處是:可用性複本是個單機執行個體,那麼資料庫副本就存放在該運行該執行個體節點的本地磁碟上;如果可用性複本是個叢集執行個體,那麼資料庫副本就存 放在共用磁碟上。

可用性群組從Windows群集角度來看,就是一個叢集資源,其中的所有資料庫作為一個整體在節點間進行容錯移轉,當然這不包括系統資料庫,系統資料庫是不能加入高可用性群組中的。

因為需要藉助Windos群集實現監控和轉移,所以AlwaysOn會受到一些限制:

一個可用性群組中的所有可用性複本必須運行在單一的Windows群集上,跨不同Windows群集的SQL Server執行個體不能配置成一個AlwaysOn可用性群組。

一個可用性群組的所有可用性複本必須運行在Windows群集的不同節點上。運行在同一個節點上的兩個不同執行個體不能用作同一個可用性群組的副本。

如果某個可用性複本執行個體是一個SQL叢集執行個體,那同一個SQL群集的其他非活躍節點上安裝的任何其他SQL執行個體都不能作為它的輔助副本。

一個資料庫只能屬於一個可用性群組。

AlwaysOn最多可以支援五個副本,但只有一個可用性複本上啟動並執行資料庫是處於可讀寫狀態。這個可讀寫的資料庫被稱為主要資料庫 (PrimaryDatabase),同時這個可用性複本被稱為主副本(primaryreplica)。其餘的副本都被稱為輔助副本 (secondaryreplica),輔助副本上的資料庫可能是不可訪問的,或者是只能接受唯讀操作(取決於可用性群組的配置),這些資料庫被稱為輔助數 據庫。一但發生容錯移轉,任何一個輔助副本都可以成為新的主副本執行個體。主副本會不斷地將主要資料庫上的資料變化發送到輔助副本,來實現副本間的資料庫同步。 就顯示了一個可用性群組中各副本之間的關係。

下面,咱們再通過一個圖看 一下AlwaysOn可用性群組與Windows容錯移轉叢集之間的關係,在這個圖中,Windows的容錯移轉叢集使用到了兩個子網,在左邊的子網裡,有 兩個節點 ;右邊的子網裡有三個節點,其中最右邊兩個節點上建立了一個SQL Server的叢集執行個體,存放於共用儲存;其他三個節點安裝的是單機執行個體,存放於本機存放區;一共四個執行個體組成了一個AlwaysOn可用性群組,其中一個主 副本,其他的都是輔助副本。

接聽程式

AlwaysOn建立後,用戶端就需要進行串連,為了讓應用程式能夠透明地串連到主副本而不受故障容錯移轉的影響,我們需要建立一個接聽程式,接聽程式 就是一個虛擬網路名稱,可以通過這個虛擬網路名稱訪問可用性群組,而不用關心串連的是哪一個節點,它會自動將請求轉寄到主節點,當主節點發生故障後,輔助 節點會變為主節點,接聽程式也會自動去偵聽主節點。

一個接聽程式包括虛擬IP地址、虛擬網路名稱、連接埠號碼三個元素,一旦建立成功,虛擬網路名稱會註冊到DNS中,同時為可用性群組資源添加IP地址資源和 網路名稱資源。使用者就可以使用此名稱來串連到可用性群組中。與容錯移轉叢集不同,除了使用虛擬網路名稱之外,主副本的真實執行個體名還可以被用來串連。

SQL Server2012早期版本的SQL Server只有在執行個體啟動的時候地會嘗試綁定IP和連接埠,但是SQL Server2012卻允許在副本執行個體處於健全狀態的時候隨時綁定新的IP地址、網路名稱和連接埠號碼。因此可以為隨時為為可用性群組添加接聽程式,而且這個操作 會立即生效。當添加了接聽程式之後,在SQL Server的錯誤記錄檔中可以看到類似:在虛擬網路名稱上停止和啟動接聽程式的訊息。

要注意的是,SQLBrowser服務是不支援Listener的。這是因為應用程式在使用Listener的虛擬網路名串連SQLServer時,是以一個預設執行個體的形式進行訪問的(只有主機名稱,沒有執行個體名),因此用戶端根本就不會去嘗試使用SQLBrowser服務。

各副本間的資料同步

AlwaysOn必須要維護各副本間的資料一致性,當主副本上的資料發生變化,會同步到輔助副本上。這裡AlwaysOn通過三個步驟來完成:

步驟1:主副本記錄發生變化的資料;

步驟2:將記錄傳輸到各個輔助副本;

步驟3:把資料變化操作在輔助副本上執行一遍。

具體實現如下:

在主副本和輔助副本上,SQL Server都會啟動相應的線程來完成相應的任務。對於一般的SQL Server伺服器,即沒有配置高可用性,會運行Log Writer的線程,當發生資料修改事務時,此線程負責將本次操對應的日誌資訊記錄到日誌緩衝區中,然後再寫入到物理記錄檔。但如果配置了 AlwaysOny主副本的資料庫,SQL Server會為它建立一個叫Log Scanner的線程,不間斷的工作,負責將日誌從日誌緩衝區或記錄檔裡讀出,打包成日誌塊,發送到輔助副本。因此可以保證發生的資料變化,不斷送給各 輔助副本。

輔助副本上存在固化和重做兩個線程完成資料更新操作,固化線程會將主副本Log Scanner所發過來的日誌塊寫入輔助副本磁碟上的記錄檔裡,因此稱為固化,然後重做線程負責從磁碟上讀取日誌塊,將日誌記錄對應的操作重演一遍,此 時主副本和輔助副本上的資料就一致了。重做線程每隔固定的時間點,會跟主副本通訊,告知自己的工作進度。主副本由此知道兩邊資料的差距。Log Scanner負責傳送記錄塊,不需要等待Log Writer完成日誌固化;輔助副本完成日誌固化以後就會發送訊息到主副本,告知資料轉送完成,而不需要等待重做完成,這樣各自獨立的設計,是儘可能減少 AlwaysOn所帶來的操作對資料庫效能的影響。

SQL Server AlwaysOn架構及原理

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.