我最近接管了一个包含两个节点的可用性组的管理,同步提交模式。
我的理解是,当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
不,它应该首先转到节点 2,因为节点 2 是只读副本,而节点 1 是主副本,它将服务于读写操作。根据 BOL
什么是输出
因此,从输出中您可以看到节点 1 是主副本时,只读连接将作为首选连接到节点 2,反之亦然