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

时间: 2024-08-28 17:01:26

AlwaysOn Group Listener的相关文章

SQL Server AlwaysOn 集群 关于主Server IP与Listener IP调换的详细测试

1. 背景 SQL Server 搭建AlwaysOn后,我们就希望程序连接时使用虚拟的侦听IP(Listener IP),而不再是主Server 的IP.如果我们有采用中间件,则可以在配置中,直接用Listener IP 替换掉 Server IP,可有时候,我们不太确定,是否有些旧程序.不太常用的程序在使用.甚至在很多公司根本就没有使用中间件,这时候去修改每个应用.APP.程序的数据库连接配置,太难了. 那么有没有其它好的方案呢?有一个---调换主Server IP与Listener IP,

SQL Server 2016 AlwaysOn 安装及配置介绍

SQL Server 2016  AlwaysOn 安装及配置介绍 Always On 可用性组功能是一个提供替代数据库镜像的企业级方案的高可用性和灾难恢复解决方案. SQL Server 2012 中引入了 Always On 可用性组功能,此功能可最大程度地提高一组用户数据库对企业的可用性. "可用性组" 针对一组离散的用户数据库(称为"可用性数据库" ,它们共同实现故障转移)支持故障转移环境. 一个可用性组支持一组读写主数据库以及一至八组对应的辅助数据库. (

AlwaysOn 可用性组方案

AlwaysOn 可用性组方案 1.可用性组 "可用性组"(Availability Group,简称 AG)针对一组离散的用户数据库(称为"可用性数据库",它们共同实现故障转移)支持故障转移环境.一个可用性组支持一组主数据库以及多组对应的辅助数据库. 每组可用性数据库都由一个"可用性副本"承载.有以下两种类型的可用性副本: (1)一个"主副本" 主副本用于承载主数据库.主副本使一组主数据库可用于客户端的读写连接. (2)多个

[AlwaysOn Availability Groups]AG排查和监控指南

AG排查和监控指南 1. 排查场景 如下表包含了常用排查的场景.根据被分为几个场景类型,比如Configuration,client connectivity,failover和performance. Scenario 笔记 Scenario Type Description Troubleshoot AlwaysOn Availability Groups Configuration (SQL Server) 排查:AG配置 Configuration 提供了一些典型的配置AG实例发生问题的

部署AlwaysOn第二步:配置AlwaysOn,创建可用性组

AlwaysOn是在SQL Server 2012中新引入的一种高可用技术,从名称中可以看出,AlwaysOn的设计目标是保持数据库系统永远可用.AlwaysOn利用了Windows服务器故障转移集群(Windows Server Failover Clustering,简称WSFC)的健康检测和自动故障转移的特性,因此,必须建立在WSFC之上,搭建WSFC的过程,请参考<部署AlwaysOn第一步:搭建Windows服务器故障转移集群>. AlwaysOn支持的高可用单位是可用性组(Avai

005.SQLServer AlwaysOn可用性组高可用简介

一 AlwaysOn 可用性组 1.1 AlwaysOn 可用性组概述 AlwaysOn 可用性组功能是一个提供替代数据库镜像的企业级方案的高可用性和灾难恢复解决方案.SQL Server 2012 中引入了 AlwaysOn 可用性组功能,此功能可最大程度地提高一组用户数据库对企业的可用性. "可用性组"针对一组离散的用户数据库(称为"可用性数据库",它们共同实现故障转移)支持故障转移环境. 一个可用性组支持一组读写主数据库以及一至四组对应的辅助数据库.可使辅助数

Alwayson Failover失败

最近做了一个case, 客户在ALWAYSON环境下进行failover操作, 之后所有replica上的alwayson group状态变成了resolving. 并且在执行failover的replica上生成1个到多个dump 文件. 下面是具体的排查问题. 环境 === SQL Server 2014 SP1 CU3 Primary replica: p1 Secondary replica: p2 Secondary replica: p3 P1和P2属于同一个子网 P3在另外一个子网

SQL Server 2012 AlwaysOn集群配置指南

1. AlwaysOn介绍 AlwaysOn是SQL Server 2012提供的全新综合.灵活.高效经济的高可用性和灾难恢复解决方案.它整合了镜像和群集的功能,基于OS 故障转移群集(Windows Server FailOver Cluster),通过在同一个WSFC的不同Node上,安装独立的SQL Server实例,定义AlwaysOn Group,一个数据库最多可以部署4个镜像.当热备机出现故障时,可以手工或自动实现故障转移,交换主.辅数据库的角色. AlwaysOn的亮点在于镜像可读

翻译:到AlwaysOn级别1的楼梯:什么是“SQL Server AlwaysOn”?

到AlwaysOn级别1的楼梯:什么是"SQL Server AlwaysOn"?佩里·惠特尔,2016/02/24(首次出版:2014 /09/24)该系列这篇文章是楼梯系列的一部分:通往AlwaysOn的楼梯AlwaysOn是一套复杂的技术,经常被误解.在这个阶梯中,您将了解AlwaysOn技术,它们如何适应高可用性堆栈,以及如何充分利用它们.欢迎来到"SQL Server AlwaysOn"系列的第一个级别.在这一级别的文章中,我们将发现技术"Alw