设为首页 加入收藏

TOP

AlwaysOn Group Listener(一)
2017-01-24 08:15:20 】 浏览:322
Tags:AlwaysOn Group Listener

1.Listener是什么


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


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


SQL Server Management Studio对应的记录



? ?


对应的VCO记录



?


?


对应的DNS记录



?


下面是一个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



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错误:


The availability group '%.*ls' already has a listener with DNS name '%.*ls'. Availability groups can have only one listener. Use the existing listener, or drop the existing listener and create a new one.


?


但实际上我们可以通过下面的方式为AG创建多个Listener


1)打开Failover Cluster Manager,右键ag->Add a resource->Client Access Point



?


2)填写Listener名称



?


3)右键为其分配IPAddress




4) 右键ag resource property,设置dependency. 将agListener2添加到Dependencies



?


5)为Listener分配port,此时portnull


select *from sys.availability_group_listeners



执行下面的语句创建port


alter availability group [ag]


modify listener 'agListener2'


(port = 1433)


?


7)新的Listener就可以使用了,我们在SSMS里也可以找到相应的记录



?


?


4.MultiSubnetFailover


SQLServer2012开始支持Multi Site SQL Cluster。 一般而言,多个数据中心分布在不同的地理位置,例如在上海和北京分别建立了数据中心,这样当一个数据中心出现故障后(例如地震等灾害),备用的数据中心可以继续提供服务


下面是一个多子网的Listener截图




在多子网环境中,一个Listener下会注册多个IP Address(之间为OR关系),但只有primary replica所在子网的IP是处于Online状态的,其余的均为Offline。如果发生failover,这些IPAddress的状态会依据对应的replica的角色发生变化。


那么多子网环境会对Listener有什么影响呢?


首先要介绍一下RegisterAll

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Oracle 11g 清理SYSAUX的表空间 下一篇SQL Server跨子网配置AlwaysOn需..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目