AlwaysOn Group Listener

Listener实际上是一个 VirtualNetworkName,客户端通过这个VNN来连接的具体的sqlserver实例 .Listener包含了DNS名称,portIPaddress

当客户端通过Listener进行连接时,Listener会将请求自动导向到PrimaryReplica或者SecondaryReplica了。

SQL Server Management Studio对应的记录

AlwaysOn Group Listener

对应的VCO记录

AlwaysOn Group Listener

对应的DNS记录

AlwaysOn Group Listener

下面是一个ADO.NET的连接字符串Server=AgListener;Initial Catalog=agdb1;Integrated Security=SSPI;

在这个连接字符串中指定了要连接的Listener名称,这样客户端就会自动连接到primaryreplica了。如果发生了failover,在新的primaryreplica上线后,listener会自动将连接导向到新的primaryreplica,无需人为的干预。

2.负载平衡

SecondaryReplica可以配置成readonly模式,这样就可以将一些只读的工作放置到secondaryreplica中进行(例如报表),这样就可以实现一定程度的负载平衡。并且Listener可以将这些只读的连接自动导向到SecondaryReplica

要实现这一功能,需要在SQLServer端和客户端同时进行一些配置。

SQL Server端

1)Secondary replica要配置成read-intent only或者Yes

AlwaysOn Group Listener

2)设置READ_ONLY_ROUTING_URL

下面是一个的READ_ONLY_ROUTING_URL的例子。 语句里指定了每个replica使用的端口,这里的端口号需要根据实际instance使用的端口号进行相应调整

alter availability group ag modify replica on 'SQL108W2K8R21' with (secondary_role(read_only_routing_url='tcp://SQL108W2K8R21.259442DOM.COM:1433'))

alter availability group ag modify replica on 'SQL108W2K8R22' with (secondary_role(read_only_routing_url='tcp://SQL108W2K8R22.259442DOM.COM:1433'))

alter availability group ag modify replica on 'SQL108W2K8R23' with (secondary_role(read_only_routing_url='tcp://SQL108W2K8R23.259442DOM.COM:1433'))

   

3) READ_ONLY_ROUTING_LIST

为三个replica分别设置readonly routing的顺序。以SQL108W2K8R21为例,当SQL108W2K8R21成为Primary replica时,readonly routing的顺序依次为SQL108W2K8R22->SQL108W2K8R23-> SQL108W2K8R21. Listener会将客户端的请求导向到SQL108W2K8R22,如果SQL108W2K8R22不可用,导向到SQL108W2K8R23,以此类推。

alter availability group ag MODIFY REPLICA ON N'SQL108W2K8R21' WITH (PRIMARY_ROLE(READ_ONLY_ROUTING_LIST=(N'SQL108W2K8R22', N'SQL108W2K8R23', N'SQL108W2K8R21')))

alter availability group ag MODIFY REPLICA ON N'SQL108W2K8R22' WITH (PRIMARY_ROLE(READ_ONLY_ROUTING_LIST=(N'SQL108W2K8R21', N'SQL108W2K8R23', N'SQL108W2K8R22')))

alter availability group ag MODIFY REPLICA ON N'SQL108W2K8R23' WITH (PRIMARY_ROLE(READ_ONLY_ROUTING_LIST=(N'SQL108W2K8R21', N'SQL108W2K8R22', N'SQL108W2K8R23')))

客户端的设置

需要在连接字符串内指定ApplicationIntent=Readonly 并且将database指定为AG内的数据库

例如:

Server=AgListener;database=agdb1;Integrated Security=SSPI;ApplicationIntent=Readonly

3.Multiple Listener

默认情况下,一个Ag只支持一个listener,当尝试创建第二个listener时会返回19477错误:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/facebc6e23b933af6ce4099309defd3a.html