Alwayson--配置只讀請求


場景:有三台服務器SQLNode131,SQLNode132 ,SQLNode133:

1) 三台服務器加入域DCDemo.com

2) 三台服務器使用端口訪問數據庫

3) 三台服務器構建故障轉移群集SQLNode02

4) 三台服務器構建高可用性組AGNode134

5) SQLNode12和SQLNode22實現自動故障轉移

目標:實現對SQLNode12和SQLNode22的只讀請求轉移

SQLNode131的IP:192.168.25.131

SQLNode132的IP:192.168.25.132

AGNode134的IP:192.168.25.134

 

只讀路由配置

--=====================
--只讀路由配置
USE master
GO
ALTER AVAILABILITY GROUP [AGNode134]
MODIFY REPLICA ON N'SQLNode131' WITH
(
    SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY)
);
GO
ALTER AVAILABILITY GROUP [AGNode134]
MODIFY REPLICA ON N'SQLNode131' WITH
(
    SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://192.168.25.131:1433')
);
GO
ALTER AVAILABILITY GROUP [AGNode134]
MODIFY REPLICA ON N'SQLNode132' WITH
(
    SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY)
);
GO
ALTER AVAILABILITY GROUP [AGNode134]
MODIFY REPLICA ON N'SQLNode132' WITH
(
    SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://192.168.25.132:1433')
);
GO
ALTER AVAILABILITY GROUP [AGNode134]
MODIFY REPLICA ON N'SQLNode131' WITH
(
    PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('SQLNode132','SQLNode131'))
);
GO
ALTER AVAILABILITY GROUP [AGNode134]
MODIFY REPLICA ON N'SQLNode132' WITH
(
    PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('SQLNode131','SQLNode132'))
);

GO

只讀路由驗證:

SELECT
g.name AS AGName,
ar1.replica_server_name AS ReplicaServerName,
ar2.replica_server_name AS RountingReplicaServerName,
ar1.endpoint_url AS ReplicaServerURL,
ar2.endpoint_url AS RountingReplicaServerURL
FROM sys.availability_read_only_routing_lists rl
INNER JOIN sys.availability_replicas ar1 
ON ar1.replica_id=rl.replica_id
INNER JOIN sys.availability_replicas ar2 
ON ar2.replica_id=rl.read_only_replica_id
INNER JOIN sys.availability_groups g 
ON ar1.group_id=g.group_id
WHERE rl.routing_priority=1

 

刪除只讀路由

ALTER AVAILABILITY GROUP [AGNode134]
MODIFY REPLICA ON N'SQLNode132' WITH
(
    PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=NONE)
);
GO
ALTER AVAILABILITY GROUP [AGNode134]
MODIFY REPLICA ON N'SQLNode131' WITH
(
    PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=NONE)
);
GO

 

使用:

   MSDN指明可使用.NET Framework4.0.2來訪問,但是.NET 4正式發布版本為.0.3,經過測試,該功能在.NET4.5 S上可正常運行,連接串為

 

Server=tcp:192.168.25.123,1433;Database=DB1;ApplicationIntent=ReadOnly;MultiSubnetFailover=True;User Id=sa;Password=password;

ApplicationIntent 有兩種配置值:Readonly 和ReadWrite,ApplicationIntent並不限制請求的操作,只是表明該連接上應該發生的操作。

 

 對於配置了只讀路由的請求,每次請求會首先轉發到主副本,通過主副本獲取到可用的副本,依次遍歷找到一個可以處理只讀請求的輔助副本,並將該請求轉發給該輔助副本。

在輔助副本上執行查詢時,Alwayson采用行版本來消除數據庫上的阻塞問題,所有查詢都會自動運行在快照隔離級別,即使顯示設置其他隔離級別或鎖提示。快照隔離級別雖然避免在數據上加S鎖,但仍會對對象加Sch-S鎖,Sch-S鎖會阻塞DDL語句。

由於無法在輔助副本上單獨建立索引,因此為提升查詢性能,需先在主副本上建立索引,這會導致在索引維護是同步大量索引整理數據

將輔助副本設置為可讀時,需要考慮查詢時所消耗的temp空間(臨時統計和快照隔離級別的行版本信息)

 


免責聲明!

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



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