2023年12月4日 星期一

如何建立 SQL Server AlwasyOn 分散式可用性群組 - 進階高可用性

        在之前陸續介紹多種不同方式 SQL Server AlwaysOn 的設定與安裝的方式,可以有效的提高資料庫的高可用性,這次我們再來介紹 AlwaysOn 進階的部份 分散式可用性群組 (Distributed availability groups) 的功能。

相關連結參考:
在混合雲的架構上建立完整的AlwaysOn架構
http://caryhsu.blogspot.com/2015/12/alwayson.html
SQL Server 2012 新功能 - AlwaysOn安裝與設定
http://caryhsu.blogspot.com/2012/04/sql-server-2012-alwayson.html
如何在Amazon上透過EC2,架設完整的AlwaysOn架構。
https://caryhsu.blogspot.com/2015/10/amazonec2alwayson.html

一般的情況下,我們在 AlwaysOn 的設定上以2個節點為主,進一步的設定,可以將第三個節點放在不同的地區或雲端,藉以當問題發生時,可以將 AlwaysOn 的節點轉移至雲端上,而且也可以當作可讀副本,藉以減輕主節點的壓力。

但在發生問題時,可能由於地端的網域或叢集等問題,所以轉移後,可能仍需及時的確認等問題,所以如果在預算允許的情況下,其實可以建立相同的第二組藉以問題發生時進行移轉,而 AlwaysOn 可以透過 分散式可用性群組 (Distributed availability groups)進行管理,當發生問題時,可以進行轉移的動作。

常見的方式,直接將第三個或第四個節點放在不同區或雲端上。


可用性群組 (Distributed availability groups) 的方式,也是本篇介紹的方式。


在使用 分散式可用性群組 (Distributed availability groups) 的部份,有下列的幾個優點:

  1. 將叢集節點建立在不同的地區,而且真正作到多叢集多節點的情境。
  2. 資料中心(DataCenter) 轉移。
  3. 延伸可讀副本至不同的地區上。

環境說明:
==============

  1. AD - Windows Server 2022
  2. SQL Server Nodes, 這裡主要有四台 SQL Server,一個叢集中有二個SQL Server的節點


安裝方式:
==============

1. 請依照下列的文章將二組叢集建立好. 

SQL Server 2012 新功能 - AlwaysOn安裝與設定
http://caryhsu.blogspot.com/2012/04/sql-server-2012-alwayson.html

2. 請在第一組叢集的部份,建立第一組的 AlwaysOn,然後確認轉移等功能皆正常。

3. 在第二組叢集時,AlwaysOn 可以透過自動同步的方式進行建立,但通常如果資料庫較大,會透過備分的方式進行還原,而且這樣在建立上,問題也會比較單純。

4. 目前請確認二組的叢集在 Failover 上皆正常,可以 Listener 也可以正常的連接,最後在 Endpoint 的部份,也都確認有建立完成。

透過 SQL 語法進行查詢

SELECT * FROM sys.endpoints
where type = 4

5. 請透過下列的語法,建立 分散式可用性群組 (Distributed availability groups)

CREATE AVAILABILITY GROUP [distributedag]  

   WITH (DISTRIBUTED)   

   AVAILABILITY GROUP ON  

      'sqlag2019-1' WITH    

      (   

         LISTENER_URL = 'tcp://sqlag2019ag1lt.mscaryhsu.com:5022',    

         AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,   

         FAILOVER_MODE = MANUAL,   

         SEEDING_MODE = MANUAL   

      ),   

      'sqlag2019-2' WITH    

      (   

         LISTENER_URL = 'tcp://sqlag2019ag2lt.mscaryhsu.com:5022',   

         AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,   

         FAILOVER_MODE = MANUAL,   

         SEEDING_MODE = MANUAL   

      );    

GO 

上述中可以看到 分散式可用性群組 (Distributed availability groups) 主要是將二個 AlwaysOn 透過 Listener 進行綁定,其中在 AVAILABILITY_MODE 一定要設定為 ASYNCHRONOUS_COMMIT 模式,因為如果設定為 SYNCHRONOUS_COMMIT 的模式,因為要等於第一個叢集完成後,也要同時寫到第二個叢集才算一個交易的完成,一來會造成交易的時間過長,二來也會因為跨區的網路延遲造成問題,由於是 ASYNCHRONOUS_COMMIT 模式,所以在 FAILOVER_MODE 也會是手動的方式(MANUAL),最後在 SEEDING_MODE 也就是在同步時,如果資料庫不存在,進行初使化為同步傳送,還是透過手動進行,因為我們上一個步驟是透過手動進行還原,所以這個步驟就設定成 SEEDING_MODE = MANUAL。

6. 最後建立完成後,如果要進行手動的 Failover,可以透過下列的方式進行轉移。

ALTER AVAILABILITY GROUP [distributedag] FORCE_FAILOVER_ALLOW_DATA_LOSS;

設定完上述的部份即已完成,但其實用性上來說,個人感覺使用第三個節點於雲端上已算是很好的部份,你要地端與雲端都同時發生問題,我想可能真的是發生了很嚴重的事情了,大家也別太擔心,最後也希望這篇有幫助到大家。

沒有留言:

張貼留言