暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

AG 只读路由未正确工作

原创 YanLang 2023-11-10
118

只读路由未正确工作

  1. 请确保你已按照配置只读路由文档中的内容设置只读路由。

  2. 保证客户端驱动程序支持

    客户端应用程序必须使用支持 ApplicationIntent 参数的客户端提供程序。 请参阅可用性组的驱动程序和客户端连接支持

     备注

    如果要连接到分布式网络名称 (DNN) 侦听器,则提供程序还必须支持 MultiSubnetFailover 参数

  3. 请务必正确设置连接字符串属性

    若要使只读路由正常工作,客户端应用程序必须在连接字符串中使用以下属性:

    • 属于 AG 的数据库名称
    • 可用性组侦听器名称
      • 如果使用 DNN,则必须指定 DNN 侦听器名称和 DNN 端口号 <DNN name,DNN port>
    • 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

  4. 确保可用性组侦听器处于联机状态。 为确保可用性组侦听器处于联机状态,请在主要副本上运行以下查询:

    SQL

    SELECT * FROM sys.dm_tcp_listener_states;
    

    如果发现侦听器处于脱机状态,可以尝试使用以下命令使其联机:

    SQL

    ALTER AVAILABILITY GROUP myAG RESTART LISTENER 'AG_Listener';
    
  5. 确保正确填充了 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

  6. 检查 READ_ONLY_ROUTING_URL 端口是否打开。 请确保 Windows 防火墙未在阻止 READ_ONLY_ROUTING_URL 端口。 在 read_only_routing_list 中的每个副本和任何将连接到这些副本的客户端上配置 Windows 防火墙,以便于数据库引擎访问。

     备注

    如果是在 Azure VM 上运行 SQL Server,必须执行额外的配置步骤。 如果使用的是 DNN 侦听器,请确保每个副本 VM 的网络安全组 (NSG) 都允许流量流向终结点端口和 DNN 端口。 如果使用的是 VNN 侦听器,必须确保已正确配置负载均衡器。

  7. 确保 READ_ONLY_ROUTING_URL (TCP://system-address:port) 包含正确的完全限定的域名 (FQDN) 和端口号。 请参阅:

    • 计算 AlwaysOn 的 read_only_routing_url
    • sys.availability_replicas (Transact-SQL)
    • 更改可用性组 (Transact-SQL)
  8. 确保 SQL Server 配置管理器中的 SQL Server 网络配置正确。

    在 read_only_routing_list 中的每个副本上验证以下内容:

    • 已启用 SQL Server 远程连接
    • 已启用 TCP/IP
    • 已正确配置 IP 地址
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论