只读路由未正确工作
请确保你已按照配置只读路由文档中的内容设置只读路由。
保证客户端驱动程序支持
客户端应用程序必须使用支持
ApplicationIntent参数的客户端提供程序。 请参阅可用性组的驱动程序和客户端连接支持备注
如果要连接到分布式网络名称 (DNN) 侦听器,则提供程序还必须支持
MultiSubnetFailover参数请务必正确设置连接字符串属性
若要使只读路由正常工作,客户端应用程序必须在连接字符串中使用以下属性:
- 属于 AG 的数据库名称
- 可用性组侦听器名称
- 如果使用 DNN,则必须指定 DNN 侦听器名称和 DNN 端口号
<DNN name,DNN port>
- 如果使用 DNN,则必须指定 DNN 侦听器名称和 DNN 端口号
- ApplicationIntent 设置为 ReadOnly
- 要使用分布式网络名称 (DNN),需要将 MultiSubnetFailover 设置为 true
示例
此示例说明了用于虚拟网络名称 (VNN) 侦听器的 .NET System.Data.SqlClient 提供程序的连接字符串:
C#
Server=tcp:VNN_AgListener,1433;Database=AgDb1;ApplicationIntent=ReadOnly;MultiSubnetFailover=True这说明了用于分布式网络名称 (DNN) 侦听器的 .NET System.Data.SqlClient 提供程序的连接字符串:
C#
Server=tcp:DNN_AgListener,DNN_Port;Database=AgDb1;ApplicationIntent=ReadOnly;MultiSubnetFailover=True备注
如果使用的是命令行程序(如 SQLCMD),请确保为服务器名称指定正确的开关。 例如,在 SQLCMD 中,必须使用大写的 -S 开关(用于指定服务器名称),而不是小写的 -s 开关(用于列分隔符)。
示例:sqlcmd -S AG_Listener,port -E -d AgDb1 -K ReadOnly -M确保可用性组侦听器处于联机状态。 为确保可用性组侦听器处于联机状态,请在主要副本上运行以下查询:
SQL
SELECT * FROM sys.dm_tcp_listener_states;如果发现侦听器处于脱机状态,可以尝试使用以下命令使其联机:
SQL
ALTER AVAILABILITY GROUP myAG RESTART LISTENER 'AG_Listener';确保正确填充了 READ_ONLY_ROUTING_LIST。 在主要副本上,确保 READ_ONLY_ROUTING_LIST 仅包含托管可读次要副本的服务器实例。
若要查看每个副本的属性,可以运行此查询并检查只读副本的连接性终结点 (URL)。
SQL
SELECT replica_id, replica_server_name, secondary_role_allow_connections_desc, read_only_routing_url FROM sys.availability_replicas;查看只读路由列表并与终结点 URL 进行比较:
SQL
SELECT * FROM sys.availability_read_only_routing_lists;若要更改只读路由列表,可以使用如下所示的查询:
SQL
ALTER AVAILABILITY GROUP [AG1] MODIFY REPLICA ON N'COMPUTER02' WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('COMPUTER01','COMPUTER02')));有关详细信息,请参阅为可用性组配置只读路由 - SQL Server Always On
检查 READ_ONLY_ROUTING_URL 端口是否打开。 请确保 Windows 防火墙未在阻止 READ_ONLY_ROUTING_URL 端口。 在 read_only_routing_list 中的每个副本和任何将连接到这些副本的客户端上配置 Windows 防火墙,以便于数据库引擎访问。
备注
如果是在 Azure VM 上运行 SQL Server,必须执行额外的配置步骤。 如果使用的是 DNN 侦听器,请确保每个副本 VM 的网络安全组 (NSG) 都允许流量流向终结点端口和 DNN 端口。 如果使用的是 VNN 侦听器,必须确保已正确配置负载均衡器。
确保 READ_ONLY_ROUTING_URL (TCP://system-address:port) 包含正确的完全限定的域名 (FQDN) 和端口号。 请参阅:
- 计算 AlwaysOn 的 read_only_routing_url
- sys.availability_replicas (Transact-SQL)
- 更改可用性组 (Transact-SQL)
- 计算 AlwaysOn 的 read_only_routing_url
确保 SQL Server 配置管理器中的 SQL Server 网络配置正确。
在 read_only_routing_list 中的每个副本上验证以下内容:
- 已启用 SQL Server 远程连接
- 已启用 TCP/IP
- 已正确配置 IP 地址




