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


標簽: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

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

《歡迎交流討論》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM