Availability-Groups

始終處於讀取意圖

  • August 18, 2017

我最近接管了一個包含兩個節點的可用性組的管理,同步送出模式。

組的配置如下所示: 可用性組屬性

我的理解是,當Yes兩個副本上的 Readable Secondary 選項都設置為時,任何帶有 applicationIntent=ReadOnly 的連接字元串都將路由到 Node1。

同樣,如果我將 Node2 的 Readable Secondary 選項更改為“Read-intent”,任何帶有 applicationIntent=ReadOnly 的連接字元串都將路由到 Node2。

那麼,為什麼當兩個節點都設置為“Readable Secondary = Yes”時,此連接字元串會路由到 Node2:

‘數據源=redacted.domain.com;初始目錄= MyDatabase;ApplicationIntent=只讀;使用者 ID=使用者;密碼=********;MultiSubnetFailover=True’

基本上,將“ReadOnly”參數更改為“ReadWrite”會導致連接轉到 Node1。改回“只讀”會導致連接路由到 Node2。如果沒有 ‘Readable Secondary= Read-intent’ 選項,這怎麼可能?

編輯:輸出 SELECT ag.name as "Availability Group", ar.replica_server_name as "When Primary Replica Is", rl.routing_priority as "Routing Priority", ar2.replica_server_name as "RO Routed To", ar.secondary_role_allow_connections_desc, ar2.read_only_routing_url FROM sys.availability_read_only_routing_lists rl inner join sys.availability_replicas ar on rl.replica_id = ar.replica_id inner join sys.availability_replicas ar2 on rl.read_only_replica_id = ar2.replica_id inner join sys.availability_groups ag on ar.group_id = ag.group_id ORDER BY ag.name, ar.replica_server_name, rl.routing_priority

輸出

對於其他需要幫助理解這一點的人,我發現以下內容很有幫助: 在此處輸入圖像描述

我的理解是,在兩個副本上將 Readable Secondary 選項設置為 Yes 時,任何帶有 applicationIntent=ReadOnly 的連接字元串都將路由到 Node1

不,它應該首先轉到節點 2,因為節點 2 是只讀副本,而節點 1 是主副本,它將服務於讀寫操作。根據 BOL

只讀路由是指 SQL Server 能夠將合格的只讀連接請求路由到可用的 Always On 可讀輔助副本(即配置為在輔助角色下執行時允許只讀工作負載的副本

什麼是輸出

SELECT ag.name as "Availability Group", ar.replica_server_name as "When 
 Primary Replica Is",
rl.routing_priority as "Routing Priority", 
ar2.replica_server_name as "RO Routed To", 
ar.secondary_role_allow_connections_desc, 
ar2.read_only_routing_url
FROM sys.availability_read_only_routing_lists rl
inner join sys.availability_replicas ar on rl.replica_id = ar.replica_id
inner join sys.availability_replicas ar2 on rl.read_only_replica_id = ar2.replica_id
inner join sys.availability_groups ag on ar.group_id = ag.group_id
ORDER BY ag.name, ar.replica_server_name, rl.routing_priority

因此,從輸出中您可以看到節點 1 是主副本時,只讀連接將作為首選連接到節點 2,反之亦然

引用自:https://dba.stackexchange.com/questions/176037