始終處於讀取意圖
我最近接管了一個包含兩個節點的可用性組的管理,同步送出模式。
我的理解是,當
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,反之亦然