只读路由和只读应用程序意向的应用连接
一、只读路由和负载均衡
https://msdn.microsoft.com/zh-cn/library/hh710054.aspx
1)配置只读路由
ALTER AVAILABILITY GROUP [AG1]
MODIFY REPLICA ON
N'COMPUTER01' WITH
(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));
ALTER AVAILABILITY GROUP [AG1]
MODIFY REPLICA ON
N'COMPUTER01' WITH
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER01.contoso.com:1433'));
ALTER AVAILABILITY GROUP [AG1]
MODIFY REPLICA ON
N'COMPUTER02' WITH
(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));
ALTER AVAILABILITY GROUP [AG1]
MODIFY REPLICA ON
N'COMPUTER02' WITH
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER02.contoso.com:1433'));
2)在只读副本间配置负载平衡
ALTER AVAILABILITY GROUP [AG1]
MODIFY REPLICA ON
N'COMPUTER01' WITH
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('COMPUTER02','COMPUTER01')));
ALTER AVAILABILITY GROUP [AG1]
MODIFY REPLICA ON
N'COMPUTER02' WITH
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('COMPUTER01','COMPUTER02')));
二 只读应用程序意向
(https://msdn.microsoft.com/zh-cn/library/hh213417.aspx#ConfigureARsForROR)
应 用程序意向连接字符串属性表示客户端应用程序是要定向到可用性组数据库的读写版本还是只读版本的请求。 若要使用只读路由,在连接到可用性组侦听器时,客户端必须在连接字符串中使用应用程序只读意向。 如果没有只读应用程序意向,则连接到可用性组侦听器将定向到主副本上的数据库。
在登录期间,应用程序意向属性存储在客户端的会话中,然后 SQL Server 实例将处理该意向,并按照可用性组的配置和辅助副本中目标数据库的当前读写状态来确定执行什么操作。
如下所示是针对指定只读应用程序意向的 ADO.NET 访问接口 (System.Data.SqlClient) 的连接字符串的一个示例:
Server=tcp:AGListener,1433;Database=AdventureWorks;IntegratedSecurity=SSPI;ApplicationIntent=ReadOnly
在此连接字符串示例中,客户端尝试连接到端口 1433 上名为 AGListener
的可用性组侦听器(如果可用性组侦听器正在侦听 1433,您也可以忽略端口)。 连接字符串将 ApplicationIntent 属性设置为 ReadOnly,从而使其成为读意向连接字符串。 如果没有此设置,服务器将不会尝试该连接的只读路由。
可用性组的主数据库处理传入的只读路由请求,并尝试找到联接到主副本并配置为进行只读路由的只读副本。 客户端收回来自主副本服务器的连接信息,并连接到确定的只读副本。
请注意,可以将应用程序意向从客户端驱动程序发送到 SQL Server 下级实例。 在此情况下,将忽略只读的应用程序意向,并且连接将照常继续。
通过不将应用程序意向连接属性设置为 ReadOnly(不指定时,在登录过程中默认为 ReadWrite),或通过直接连接到 SQL Server 的主要副本实例而不使用可用性组侦听器名称,可以跳过只读路由。 如果您直接连接到只读副本,也不会发生只读路由。