SQL Server AlwaysOn配置兩個節點加共享資料夾仲裁見證

pursuer.chen發表於2017-07-12

標籤:MSSQL/節點和共享資料夾多數

概述  

之前講過多數節點的仲裁配置,多數節點一般3個節點以上的奇數個節點;常見的是使用3個節點節點多了也是浪費因為Alwayson的只讀路由只能利用到一個只讀副本,但是從Windows2008開始可以用共享資料夾來代替一個節點來充當仲裁;這就又可以節省一臺伺服器了只需要兩臺資料庫伺服器加任意一臺電腦的共享資料夾,但是一般會選擇在域伺服器上建立共享資料夾。但是要注意該共享資料夾的許可權需要everyone角色擁有讀寫許可權。

 

注意:要驗證其中一個節點故障叢集是否正常必須斷開故障節點的網路或者關機,因為alwayson是在故障轉移的基礎上,只有物理機故障無法ping通才會導致故障轉移切換節點。比如只停止SQLServer服務這種是無法驗證的。

資料庫:SQLServer2014 SP2

OS:Windows Server 2008R2

 

一、配置仲裁

 

可以在建立故障轉移叢集的時候配置,也可以建立完叢集后右鍵叢集來修改仲裁配置

這裡的共享資料夾路徑使用域伺服器已經建立好的共享網路路徑

注意:這個路徑的許可權必須everyone角色具有讀寫許可權,否則叢集會出現以下錯誤提示,如果AlwasyOn的網路共享路徑也配置在域伺服器應該避免檔案見證使用該共享路徑,這涉及到了安全問題。AlwasyOn的網路共享路徑只需要授予啟動服務使用者的所有許可權即可。

 

二、讀寫分離

當使用兩個節點後,讀寫分離的配置和三個節點會稍微有點區別,假設我現在只有DB01,DB02兩個節點

1.Alwayson屬性配置

注意:主角色中的連線這裡和三個節點不一樣,三個節點這裡可以選擇“僅允許讀/寫連線”,這裡是能選擇“允許所有連線”,否則其中一個節點無法訪問後只讀路由訪問會失敗(返回錯誤982)。

2.語句配置

---建立read指標 - 在當前的primary上為每個副本建立副本對於的tcp連線
ALTER AVAILABILITY GROUP [Alwayson22]
MODIFY REPLICA ON
N'db01' WITH
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://db01.ag.com:1433'))

ALTER AVAILABILITY GROUP [Alwayson22]
MODIFY REPLICA ON
N'db02' WITH
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://db02.ag.com:1433'))


----為每個可能的primary role配置對應的只讀路由副本
--list列表有優先順序關係,排在前面的具有更高的優先順序,當db02正常時只讀路由只能到db02,如果db02故障了只讀路由才能路由到DB01
ALTER AVAILABILITY GROUP [Alwayson22]
MODIFY REPLICA ON
N'db01' WITH
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('db02','db01')));

ALTER AVAILABILITY GROUP [Alwayson22]
MODIFY REPLICA ON
N'db02' WITH
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('db01','db02')));
--查詢優先順序關係
SELECT  ar.replica_server_name ,
        rl.routing_priority ,
        ( SELECT    ar2.replica_server_name
          FROM      sys.availability_read_only_routing_lists rl2
                    JOIN sys.availability_replicas AS ar2 ON rl2.read_only_replica_id = ar2.replica_id
          WHERE     rl.replica_id = rl2.replica_id
                    AND rl.routing_priority = rl2.routing_priority
                    AND rl.read_only_replica_id = rl2.read_only_replica_id
        ) AS 'read_only_replica_server_name'
FROM    sys.availability_read_only_routing_lists rl
        JOIN sys.availability_replicas AS ar ON rl.replica_id = ar.replica_id

會發現配置只讀路由列表這裡和之前的三個節點有區別,我用綠色標識了出來;之前三個節點的時候這裡用的是DB03。

三個節點:當DB01節點無法訪問時,DB02節點變成主節點充當讀寫副本,DB03節點充當只讀副本。

兩個節點:當DB01節點無法訪問時,DB02節點變成主節點即充當讀寫副本同時也充當只讀副本。

當停止DB01的服務後仲裁會自動切換到DB02上來,且讀寫和只讀連線都會連線到DB02上。這裡就不做演示從下圖也可以看到單節點DB02線上。

總結  

對比三個節點,使用兩個節點可以減少一臺伺服器節省不少人力成本。畢竟故障的情況並不是很多。但是也不得不說一下這種方案的弊端,那就是當一個節點故障後另一個節點要同時承擔讀寫和只讀的兩倍的負擔,使用該方案之前就必須得評估一個節點能否支援得起這種負載壓力!!!

 

備註:SQLServer2016支援多個只讀副本負載分擔只讀操作

 

 

搭建和加入域參考:http://www.cnblogs.com/chenmh/p/4444168.html

搭建故障轉移群集參考:http://www.cnblogs.com/chenmh/p/4479304.html

Alwayson搭建參考:http://www.cnblogs.com/chenmh/p/4484176.html

Alwayson讀寫分離參考:http://www.cnblogs.com/chenmh/p/7000236.html

 

備註:

    作者:pursuer.chen

    部落格:http://www.cnblogs.com/chenmh

本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須註明文章來源,且在文章開頭明顯處給明連結。

《歡迎交流討論》

相關文章