AlwaysOn Group Listener
1.Listener是什么
Listener实际上是一个 VirtualNetworkName,客户端通过这个VNN来连接的具体的sqlserver实例 .Listener包含了DNS名称,port和IPaddress。
当客户端通过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,此时port为null
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有什么影响呢?
首先要介绍一下RegisterAllProvidersIP属性。如果值为1,那么Listener对应的DNS就会出现同名的多条记录,每个记录地应一个IP Address。
如果RegisterAllProvidersIP的值为0,那么只会存在一条DNS记录,也就是Primary replica所在子网的IP。
如果存在多条重名的DNS(RegisterAllProvidersIP=1)记录,客户端会依次请求这些IP Address,如果得到的IP是offline的,那么会继续请求一下条记录.这样就增加了连接时间,您的应用也可能会出现连接问题。
为了解决这个问题,ADO.NET(.NET 3.5.1)引入了MultiSubnetFailover关键字,如果MultiSubnetFailover
为True,那么客户端会同时尝试连接所有子网的IPAddress,使用最先响应的那个IP地址来作为最终使用的地址,这样就极大地缩短了连接时间.
如果RegisterAllProvidersIP=0,那只有PrimaryReplica子网下的IP会注册到DNS,当failover发生时,新的primaryreplica子网下的listener的IP会代替之前的IP。这样就避免的之前的情况。
但在实际环境中,我们还需要考虑DNS的TTL值(Time-To-Live),TTL默认值是1200秒。也就是说当failover发生后,失效的DNS记录要在客户端可能要保持20分钟才会失效,在此期间,客户端无法通过listener进行连接。
当然我们可以手工执行ipconfig /flushdns才更新记录,但这样毕竟需要人工介入。
或者缩短TTL,但TTL值越小,DNSServer的性能消耗就严重。需要权衡两者。微软的建议值是300秒(5分钟).
1 OR 0
那么是什么时候应当将RegisterAllProvidersIP这是为1,而什么时候为0呢? 如果您的客户端支持MultiSubnetFailover关键字,那么建议设置成1,并且在连接字符串将MultiSubnetFailover设置为true.
如果客户端不支持MultiSubnetFailover关键字,那么就设置成0,并修改TTL为300秒
更多信息
===
如果Listener使用过T-SQL语句或者SSMS创建的,RegisterAllProvidersIP为1
如果是通过ClusterFailovermanager创建的, RegisterAllProvidersIP为0
可以通过powershell修改RegisterAllProvidersIP的值
Get-ClusterResource "SQL Network Name (SQLMULTISUBCLUS)" | Set-ClusterParameter RegisterAllProvidersIP 1/0
AlwaysOn Group Listener的更多相关文章
- 基于VMware Workstation在Windows Server 2008 R2上搭建SQL Server 2012高可用性组(AlwaysOn Group)测试环境(二)
接上篇: 以SERVER02为例,将服务器加入域,并安装故障转移群集:(SERVER02-SERVER-04操作相同)
- SQL Server AlwaysOn 集群 关于主Server IP与Listener IP调换的详细测试
1. 背景 SQL Server 搭建AlwaysOn后,我们就希望程序连接时使用虚拟的侦听IP(Listener IP),而不再是主Server 的IP.如果我们有采用中间件,则可以在配置中,直接用 ...
- 从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)
从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...
- [AlwaysOn Availability Groups]AG排查和监控指南
AG排查和监控指南 1. 排查场景 如下表包含了常用排查的场景.根据被分为几个场景类型,比如Configuration,client connectivity,failover和performance ...
- 部署AlwaysOn第二步:配置AlwaysOn,创建可用性组
AlwaysOn是在SQL Server 2012中新引入的一种高可用技术,从名称中可以看出,AlwaysOn的设计目标是保持数据库系统永远可用.AlwaysOn利用了Windows服务器故障转移集群 ...
- [SQL in Azure] Tutorial: AlwaysOn Availability Groups in Azure (GUI)
http://msdn.microsoft.com/en-us/library/azure/dn249504.aspx Tutorial: AlwaysOn Availability Groups i ...
- 005.SQLServer AlwaysOn可用性组高可用简介
一 AlwaysOn 可用性组 1.1 AlwaysOn 可用性组概述 AlwaysOn 可用性组功能是一个提供替代数据库镜像的企业级方案的高可用性和灾难恢复解决方案.SQL Server 2012 ...
- (转载) 从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)
这一篇是从0开始搭建SQL Server AlwaysOn 的第二篇,主要讲述如何搭建故障转移集群,因为AlwaysOn是基于Windows的故障转移集群的 在讲解步骤之前需要了解一下故障转移集群仲裁 ...
- Filestream/Windows Share导致Alwayson Failover失败
最近做了一个case, 客户在ALWAYSON环境下进行failover操作, 之后所有replica上的alwayson group状态变成了resolving. 并且在执行failover的rep ...
随机推荐
- 【读书笔记】iOS-iCloud编程
一,苹果云服务-iCloud. 苹果公司斥资10亿美元在北卡罗来纳州简历数所中心-iDataCenter,该数据中心面积为50万平方英尺,也是美国最大规模的数据中心之一. 二,配置iCloud. 1, ...
- 深入理解Objective-C Runtime
一.简介 主要特点: 在OC语言中,函数的调用是属于动态调用的,编译阶段并不确定要调用的函数,在真正的运行时才会根据函数名查找要调用哪个函数. 而在C语言中,函数的调用是在编译阶段就已经确定要调用哪个 ...
- nginx 的信号控制概述
<nginx 在ubuntu 上的启动,停止,重启>中的停止和重启命令基本都是用信号来控制的.这是一些简单的信号控制. 在Nginx服务器中,通常情况都是通过对其发送控制信号进行控制的,除 ...
- HTML5离线存储原理
找到一篇介绍离线缓存的,感觉比之前看到的解释的更透彻,新的知识点记录如下: 大家都知道Web App是通过浏览器来访问的,所以离线状态下是无法使用app的.其中web app中的一些资源并不经常改变, ...
- Oracle 安装后关于用户
一.关于用户 Oracle安装会自动的生产sys用户和system用户: 1. sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限,该用户的默认密码是ch ...
- 使用dwr时动态生成table的一个小技巧
这篇随笔是我在07年写的,因为当时用了自己建设的blog,后来停止使用了,今天看到备份数据库还在,恢复出来放到这里.留着记录用. 我在使用DWR时,试了很多次都无法在动态生成的table中的一个或多个 ...
- spring定时器(一)
使用的是spring的quartz功能,需导入com.springsource.org.quartz.jar包. 此定时器无法重置定时时间,需要的话可查看:spring定时器(二) spring的be ...
- my_mosaic
//功能:输入想要打马赛克的坐标点,宽,高以及每个边需要划分的块数进行打马赛克 //只能处理位图,根据不同色深定义depth即可 //还没写从文件头读取图片分辨率 #include<unistd ...
- 深入理解linux系统的目录结构(总结的非常详细)
对于每一个Linux学习者来说,了解Linux文件系统的目录结构,是学好Linux的至关重要的一步.,深入了解linux文件目录结构的标准和每个目录的详细功能,对于我们用好linux系统只管重要,下面 ...
- AI (Adobe Illustrator)详细用法(四)
本节主要是介绍和形状相关的操作. 一.外观面板的使用 熟悉外观面板的使用很重要. 1.新增描边 外观面板可以让我们增加多个描边. 点击“新增描边”,系统自动添加一个描边. 选中文字,新增描边,可以修改 ...