当前位置: 澳门新濠3559 > 数据库 > 正文

MSSQL/只读路由,在错误日志中看到非常多的alwa

时间:2019-10-06 19:48来源:数据库
三、处理方法 将主角色中的连接修改为“允许所有连接” 注意:当前的这个处理方法并没有根本的解决问题。正常情况下是通过监听ip自动路由到对应的副本。       当前没有找到那

三、处理方法

将主角色中的连接修改为“允许所有连接”

注意:当前的这个处理方法并没有根本的解决问题。正常情况下是通过监听ip自动路由到对应的副本。

 

 

 

当前没有找到那种方法可以在数据库中查询到应用程序使用了哪种查询连接字符串参数进行连接,希望知道的朋友能告知一下。

 

 

 

 

 

 

 

 

 

备注:

    作者:pursuer.chen

    博客:http://www.cnblogs.com/chenmh

本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接,否则保留追究责任的权利。

《欢迎交流讨论》

 

概述  

Alwayson相对于数据库镜像最大的优势就是可读副本,带来可读副本的同时还添加了一个新的功能就是配置只读路由实现读写分离;当然这里的读写分离稍微夸张了一点,只能称之为半读写分离吧!看接下来的文章就知道为什么称之为半读写分离。

 

数据库:SQLServer2014

db01:192.168.1.22

db02:192.168.1.23

MSSQL/只读路由,在错误日志中看到非常多的alwayson群集只读连接错误。db03:192.168.1.24

监听ip:192.168.1.25

 

连接仍将指向主副本SERVER02。

澳门新濠3559,3.3.4 Secondary的”NOT SYNCHRONIZING”状态

如果一个事务在secondary上重做失败,那么secondary的数据库会进入 not synchronizing状态。

澳门新濠3559 1

连接测试

1.ReadOnly

澳门新濠3559 2

澳门新濠3559 3

可以看到使用ApplicationIntent=ReadOnly连接属性正确的连接到了只读副本DB02上。ApplicationIntent=ReadWrite同理。

20170714补充

SQLServer2016支持多个只读副本负载分担只读操作,只读路由列表修改如下:

ALTER AVAILABILITY GROUP [Alwayson21]
MODIFY REPLICA ON
N'HD21DB01' WITH
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=(('HD21DB02','HD21DB03','HD21DB04'),'HD21DB01')));

ALTER AVAILABILITY GROUP [Alwayson21]
MODIFY REPLICA ON
N'HD21DB02' WITH
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=(('HD21DB01','HD21DB03','HD21DB04'),'HD21DB02')));

当HD21DB01作为主节点时,HD21DB02,HD21DB03,HD21DB04平均分摊读的压力,当HD21DB02,HD21DB03,HD21DB04都无法访问时读连接访问HD21DB01;演示如下:

澳门新濠3559 4

最后,特别感谢大菠萝,耽误你好久的时间哈~~

3.6.1 ApplicationIntent

AplicationIntent用来标记客户端发送来的请求类型:

ApplicationIntent = ReadOnly

ApplicationIntent = ReadWrite

一、问题概述

在错误日志中看到非常多的alwayson群集只读连接错误,错误信息的描述为“目标数据库位于可用性组,当前不允许通过read only连接”。错误日志如下:

澳门新濠3559 5

当前的业务系统使用监听ip对数据库进行连接,使用了ReadOnly和ReadWrite进行读写自动路由。当前alwayson的配置如下

配置hosts 

--配置使用监听ip进行连接
192.168.1.22    db01.ag.com 
192.168.1.23    db02.ag.com
192.168.1.24    db03.ag.com
--配置使用hostname进行连接
192.168.1.22    db01
192.168.1.23    db02
192.168.1.24    db03

注意:这一步只是在没有加入域的客户端进行配置,如果非域的客户端没有配置hosts无法使用监听IP和hostname进行连接,数据库服务器端不需要配置此项!!!

select a.*,c.is_local,c.role_desc,d.endpoint_url,d.read_only_routing_url 
from sys.dm_hadr_availability_replica_cluster_nodes a
join sys.dm_hadr_availability_replica_cluster_states b
on a.replica_server_name = b.replica_server_name 
join sys.dm_hadr_availability_replica_states c
on b.replica_id = c.replica_id 
join sys.availability_replicas d
on c.replica_id = d.replica_id 

3.4.1自动故障转移

要求条件:

1.当前primary和secondary都设置为同步模式并且是自动故障转移模式

2.primary和secondary必须是同步的

3.primary边的不可用

步骤:

1.如果当前primary在运行,会把primary和secondary的连接断开

2.如果secondary上面有没有完成的日志,secondary会继续执行redo,完成secondary的前滚。

3.前滚完成,secondary变成primary

4.新的primary在连接到一个secondary之前,不管前滚是否结束会把自己的状态设置为NOTSYNCHRONIZED,只有当secondary连接到primary,primary会变成SYNCHRONIZED。

5.当老的primary重启之后,发现其他人变成primary,会把自己变成secondary。

二、问题原因

问题原因是使用了ReadOnly对主副本进行了连接操作导致的。由于当前的主角色中的连接配置的是“允许读/写连接”;所以当前主副本不允许ReadOnly的连接字符串的参数。当时这样设置的目的就是为了避免只读连接连接上主副本。防止客户错误地将读意向工作负荷连接到主副本。

 

问题原因大概有两种可能:

1.应用程序连接配置存在问题,

2.路由本身BUG

 

第一种可能的可能性比较大,但是向开发经理确认过代码那边调用的是通用连接借口,而且系统系统已经运行了一年多,而且这个问题是间隙性的,所以可以肯定接口连接配置是没有问题的,唯一的可能性是哪里单独使用的主副本的ip进行了连接。

配置语句

---查询可用性副本信息
SELECT * FROM master.sys.availability_replicas

---建立read指针 - 在当前的primary上为每个副本建立副本对于的tcp连接
ALTER AVAILABILITY GROUP [Alwayson22]
MODIFY REPLICA ON
N'db01' WITH
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://db01.ag.com:1433'))

ALTER AVAILABILITY GROUP [Alwayson22]
MODIFY REPLICA ON
N'db02' WITH
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://db02.ag.com:1433'))

ALTER AVAILABILITY GROUP [Alwayson22]
MODIFY REPLICA ON
N'db03' WITH
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://db03.ag.com:1433'))


----为每个可能的primary role配置对应的只读路由副本
--list列表有优先级关系,排在前面的具有更高的优先级,当db02正常时只读路由只能到db02,如果db02故障了只读路由才能路由到DB03
ALTER AVAILABILITY GROUP [Alwayson22]
MODIFY REPLICA ON
N'db01' WITH
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('db02','db03')));

ALTER AVAILABILITY GROUP [Alwayson22]
MODIFY REPLICA ON
N'db02' WITH
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('db01','db03')));

--查询优先级关系
SELECT  ar.replica_server_name ,
        rl.routing_priority ,
        ( SELECT    ar2.replica_server_name
          FROM      sys.availability_read_only_routing_lists rl2
                    JOIN sys.availability_replicas AS ar2 ON rl2.read_only_replica_id = ar2.replica_id
          WHERE     rl.replica_id = rl2.replica_id
                    AND rl.routing_priority = rl2.routing_priority
                    AND rl.read_only_replica_id = rl2.read_only_replica_id
        ) AS 'read_only_replica_server_name'
FROM    sys.availability_read_only_routing_lists rl
        JOIN sys.availability_replicas AS ar ON rl.replica_id = ar.replica_id

注意:这里只是针对可能成为主副本的角色进行配置,这里没有给db03配置只读路由列表,原因是不想将主副本切换到DB03上面来,配置越多的主副本意味着你后面要做越多的事情包括备份、作业等。

到此只读路由已配置完成,不要忘记在每个alwayson副本上创建登入用户。

  • 引用该可用性组中的数据库。

3.4.3强制故障转移

强制故障转移和镜像的类似,会有可能会照成数据丢失。

标签:MSSQL/只读路由

3.3.3可用副本之间“DISCONNECTED”状态

副本之间会固定间隔发送ping,如果在超时期间内收到ping,那么正常。收到之后副本会重置连接上的超时计数器。Primary和secondary通过ping来判断批次是否依旧处于活动状态。

如果ping超时,那么primary和secondary连接户进入disconnected状态。

回话超时限制可以设置,默认为10s,最小允许5s。一般建议大于10s。

主角色支持的连接访问类型

1.允许所有连接
主数据库同时允许读写连接和只读连接。 这是主角色的默认行为。

2.仅允许读/写连接
允许ApplicationIntent=ReadWrite或未设置连接条件的连接。 不允许 ApplicationIntent=ReadOnly的连接。 仅允许读写连接可帮助防止客户错误地将读意向工作负荷连接到主副本。

  • 使用 TCP 协议。      

  • 将应用程序意向特性/属性设置为只读。      

3.4 AlwaysOn故障转移

AlwaysOn依赖Windows故障转移集群。AlwaysOn需要一个集群Resource DLL来连接到Windows集群和SQL Server实例。Windows集群需要透过AlwaysOn的Resource DLL来控制资源的上线和离线。

AlwaysOn的可用性组的资源是“SQL Server Availability Group”Resource DLL叫Hadrres.DLL,并在Hadrres.exe定义了可用性组isalive的检查方法。

注意点:

1.可用性组也是集群资源,healthchecktimeout为30000毫秒。

2.无论有多少个可用性组,只有一条sp_server_diagnostics来诊断可用性组。

3.sp_server_diagnostics用来检查实例的健康,而不是检查每个数据库的状态。

Alwayson发生故障之后,是否会立刻故障转移,去决议可用性模式和故障转移模式的设置.

 

异步提交

同步提交,手动故障转移

同步提交,自动故障转移

自动故障转移

不支持

不支持

支持

手动故障转移

不支持

支持

支持

强制故障转移

支持

支持

支持

 

自动故障转移和手动故障转移都要求故障转移目标是使用同步提交模式并且处于SYNCHRONIZED状态的secondary。

异步提交的只能使用强制故障转移。

登入方式

按照书中的方法,执行如下脚本(本来我是3节点的可用性组,由于笔记本开4台虚拟机实在是太卡,我把server03给关掉了,只读路由也没配置这个节点。):

3.3 AlwaysOn可用性模式

AlwaysOn有2个可用性模式:异步提交,同步提交

和数据库镜像类似,不多介绍。

日志同步步骤

步骤

行为

连接

通过镜像端点连接

请求数据

发起一个请求到primary,要求发送日志块,双方协商出一个LSN

运行Log Scanner

Log Scanner运行,将日志块发送到secondary

固化和重做日志

Secondary固化和重做线程来处理log scanner发送过来的日志块,固化将日志块固化到硬盘,重做线程将日志重做

反馈进度

当secondary收到primary3个消息,就会反馈进度,如果超过1秒没有3条,也会反馈进度,进度信息包含了哪些LSN被应用到了secondary。

事务提交步骤

步骤

行为

提交事务

在primary上执行commit

写入到本地日志记录

Primary上commit会被写入成一条日志记录,log writer会把知道commit为止的日志,全部写入到LDF文件。当写入磁盘后,primary等待secondary成功固化的消息

扫描日志

当日志块被写入到磁盘,给Log Scanner信号,开始工作。把日志发送给日志块解码器,解码器会搜索要特殊处理的操作,这些特殊操作解码器会以一个消息发送给secondary。如果解码完毕,整个日志块被发送给secondary

处理日志块消息

收到日志块,被固化和重做

反馈进度

当secondary收到primary3个消息,就会反馈进度,如果超过1秒没有3条,也会反馈进度,进度信息包含了哪些LSN被应用到了secondary。

完成提交

Primary收到了secondary的确认,完成事务提交并发送给客户端确认

当primary为复制的发布数据库,那么log reader代理程序不会去处理那些没有被secondary固化的日志,这样做的目的是当复制发送数据比较快的时候,当secondary变成primary,就可能发送订阅数据库的数据比发布数据库新的问题。

概述  

从上面我们可以看到只读路由的读写分离是通过连接属性ApplicationIntent=ReadOnlyReadWrite使得连接是连向主副本还是辅助副本,这意味着需要在应用端配置多个连接串手动的配置代码是走写还是只读。这也就是为什么一开始我说这是半读写分离的原因。还有一个缺陷就是虽然配置了两个只读副本,但是每次只有优先级高的那个只读副本能提供只读连接,只有当优先级高的那个只读副本故障了才能路由到下一个只读副本。这也就意味着当前只有2个副本在提供读写操作,多个只读副本之间不能做到同时提供读操作的负载均衡。

 

注意: 域服务器宕机了也不影响使用SQLServer身份验证连接副本或者监听器,Windows身份验证会受域服务器的影响。所以只要不故障切换AD宕机了也不影响AlwaysOn群集的连接。这个功能减少了AlwaysON对AD的依赖,同时也减少建双域控的成本。

 

 

 

 

搭建和加入域参考:http://www.cnblogs.com/chenmh/p/4444168.html

搭建故障转移群集参考:http://www.cnblogs.com/chenmh/p/4479304.html

Alwayson搭建参考:http://www.cnblogs.com/chenmh/p/4484176.html

Alwayson配置两个节点加共享文件夹仲裁见证:http://www.cnblogs.com/chenmh/p/7156719.html

Alwayson概念总结参考:http://www.cnblogs.com/chenmh/p/6972007.html

 

备注:

    作者:pursuer.chen

    博客:http://www.cnblogs.com/chenmh

本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接。

《欢迎交流讨论》

澳门新濠3559 6

3.5 创建一个Always可用性组

辅助角色支持的连接访问类型

1.无连接
不允许任何用户连接。 辅助数据库不可用于读访问。 这是辅助角色中的默认行为。

2.仅读意向连接
辅助数据库仅接受ApplicationIntent=ReadOnly 的连接,其它的连接方式无法连接。

3.允许任何只读连接
辅助数据库全部可用于读访问连接。 此选项允许较低版本的客户端进行连接。

澳门新濠3559 7

3.4.2 手动故障转移

当primary和secondary处理SYNCHRONIZED状态,就可以执行手动故障转移,如果primary停止运行,secondary就会进入RESOLVEING角色,RESOLVEING是一个角色不是状态,和primary和secondary类似。可以执行强制故障转移,但是会丢失数据。

方法:

1.直接用windows故障转移管理器

2.使用TSQL

3.使用SSMS UI

4.使用powershell

注意:只有为自动故障转移模式的可用性副本才能使用windos故障转移管理器。

配置可用性组

澳门新濠3559 8

按道理说,脚本执行完后,在连接字符串中加入参数:ApplicationIntent = ReadOnly
就能自动重定向到辅助副本。

3.4.5 Split Brain(大脑分裂)

大脑分裂就是,在一个可用性组里面出现了2个primary。这个是不被允许的。可用性组资源属性中有一个leasetimeout,windows会定期的和windows集群认为的primary通信,如果leasetimeout都没有收到windows集群的确认消息,那么副本就认为自己被切换掉了。

C#连接字符串

server=侦听IP;database=;uid=;pwd=;ApplicationIntent=ReadOnly

 昨天晚上学习了【SQL Server 2012实施与管理实战指南】的第三章,于是今天想在前段时间建的那个alwayson

3.4.6 连接,可用性副本和可用性数据库状态

ssms:其它连接参数

---仅意向读连接
ApplicationIntent=ReadOnly
---读写连接
ApplicationIntent=ReadWrite

如果不使用ApplicationIntent = ReadOnly参数连接。

3.6.2 副本可读模式设置

Secondary访问方式有3中:

1.NONE:辅助数据库不接受任何类型的数据访问

2.READ_ONLY:和自由applicationintent=ReadOnly是可以访问

3.ALL:任何链接都可以连接,但是只有只读操作可以执行

Primary访问类型只有ReadWrite和ALL。

如果Primary为ReadWrite,客户端连接字符串中指定了ApplicationInit为ReadOnly,并指向了Primary,那么访问会被拒绝。

可用性副本概念


3.6.4.2 系统资源的争用

复杂查询的运行也会影响日志redo,尽量在业务低谷期运行这些查询

参考链接:

3.6 可读的Secondary

AlwaysOn中secondary可以做只读,来分担读负荷。

要让只读操作能够透明的被自动转向到secondary,要解决一下三个问题:

1.客户端要标记自己的操作时只读的

2.secondary要被设置为可读

3.客户端连接,要被重定向才能到secondary,需要只读路由。

澳门新濠3559 9

3.6.4.3 索引

Secondary上可以用索引,但是不能创建索引,所以要用的时候要在primary上创建

修改成固定端口1433后并重启服务。

3.6.4 secondary上可能出现的性能问题

select 
 b.replica_server_name 
,a.routing_priority 
,c.replica_server_name 
from
sys.availability_read_only_routing_lists a
left join
sys.dm_hadr_availability_replica_cluster_states b
on a.replica_id = b.replica_id 
left join sys.dm_hadr_availability_replica_cluster_states  c
on a.read_only_replica_id = c.replica_id 
order by a.replica_id 

3.6.5 统计信息

因为secondary只读,所以只能在primary创建统计信息,然后同步到secondary。Alwayson会在tempdb上创建临时的统计信息。来替代永久的 统计信息。

临时统计信息以_readonly_database_statistic后缀。

3.1 AlwaysOn基本架构

AlwaysOn的可用性组包含一个或者多个数据库,这些数据库被称为可用性数据库。每个secondary上都有这些数据库的副本。这些数据库彼此之间是同步的。

AlwaysOn可用性组从windows集群角度看是一个集群资源,可用性数据库在集群的节点之间进行迁移。AlwaysOn不能应用到系统数据库,不能保证系统数据库的高可用性。

在AlwaysOn成员内,只有一个成员是可读写的,称为主数据库(Primary),其他的叫副本(secondary)。

限制:

1.可用性组运行在一个windows集群上,不能跨集群

2.可用性成员要在不同的windows集群节点上

3.如果集中一个可用性成员是一个sql集群,那么这个集群上的其他非活跃节点上安装的实例不能成为这个可用性组的副本

4.一个数据库只能属于一个可用性组

澳门新濠3559 10

Listener:AlwaysOn重要的组件之一,可以让应用程序透明的连接到primary。

Listener由虚拟ip地址,虚拟DNS,端口号组成。创建完Listener之后,会为当前primary添加虚拟ip和虚拟DNS。这样就可以透明的访问primary。SQL Server 2012支持在启动状态下绑定ip地址,DNS,端口来完成这个功能。

Listener不会使用sql browser,listener会以默认实例方式连接。

如果Listener的端口是1433端口(可以和实例共享端口),那么可以很简单的直接使用虚拟网络名连接到副本。如果Listener使用的是非默认端口:

1.如果primary监听1433端口,那么直接用DNS就可以访问了。

2.如果primary监听的不是1433端口,那么客户端必须在连接字符串中指定端口号才能连接到primary。(从SQL Server 2012 SP1测试看可以是listener的端口,也可以是primary监听的端口)

建议所有节点使用相同的监听端口,不然故障转移之后可能导致listener无法访问primary。

查看副本间的只读路由关系:

3.6.3只读路由

实现只读路由需要以下条件:

1.客户端要使用TCP协议,通过Listener连接到primary

2.客户端连接字符串ApplicationIntent=ReadOnly

3.至少有一个secondary被配置为ALL或者READONLY

4.为secondary配置只读路由URL和在primary中的只读路由列表

ALTERAVAILABILITYGROUP [AG1]

   MODIFYREPLICAON

  N'COMPUTER01'WITH

  (SECONDARY_ROLE (ALLOW_CONNECTIONS=READ_ONLY));

  ALTERAVAILABILITYGROUP [AG1]

   MODIFYREPLICAON

  N'COMPUTER01'WITH

  (SECONDARY_ROLE (READ_ONLY_ROUTING_URL =N'TCP://COMPUTER01.contoso.com:1433'));

 

  ALTERAVAILABILITYGROUP [AG1]

   MODIFYREPLICAON

  N'COMPUTER02'WITH

  (SECONDARY_ROLE (ALLOW_CONNECTIONS=READ_ONLY));

  ALTERAVAILABILITYGROUP [AG1]

   MODIFYREPLICAON

  N'COMPUTER02'WITH

  (SECONDARY_ROLE (READ_ONLY_ROUTING_URL =N'TCP://COMPUTER02.contoso.com:1433'));

 

  ALTERAVAILABILITYGROUP [AG1]

  MODIFYREPLICAON

  N'COMPUTER01'WITH

  (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('COMPUTER02','COMPUTER01')));

 

  ALTERAVAILABILITYGROUP [AG1]

  MODIFYREPLICAON

  N'COMPUTER02'WITH

  (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('COMPUTER01','COMPUTER02')));

  GO

 

 

1.连接请求会首先被直到primary上

2.primary检查目标数据库,确认该数据库属于可用性组

3.如果属于,检查只读路由列表,如果没有只读路由列表,只读路由不会工作

4.若发现只读路由,会依次检查列表,直到发现第一个访问模式设置为READONLY或者 ALL的secondar。

5.primary把只读路由URL通过TDS发送给客户端

6.客户端重新定向到secondary。

这里,附上大菠萝提供的几个脚本:

3.7 监控AlwaysOn可用性组的运行状态

3.2 AlwaysOn数据同步原理

AlwaysOn要把primary上的变化同步给secondary,所以要完成以下几件事情:

1.把primary上的修改记录下来

2.把修改传输到副本

3.把修改应用到副本

AlwaysOn完成以上事情的步骤:

1.使用Log Write线程,负责把日志信息写入到内存的log buffer上,然后log buffer 写入到磁盘(固化)。

2.primary有个工作线程log scanner,将log buffer中的日志读出来,打包成日志块传输给secondary

3.在secondary上2个线程,redo和harden。Harden负责将发送过来的日志快写入到日志文件中。Redo负责将日志记录翻译成修改操作,在辅助数据库上完成。

最后在大菠萝的帮助下,终于找出来是端口的问题。

3.AlwaysOn可用组

Alwayson支持的,是一个可用性组,每个可用性组是包含了多个用户数据库的容器,可用性组内的数据库可以作为一个整体进行故障转移。

AlwaysOn关键特性:

一、类似集群的特性

1.多个数据库可以一起迁移

2.提供一个虚拟服务器名,这个虚拟服务器名始终是当前的primary。

3.可以有自动切换,手动切换和强制切换

4.一个primary,最多4个secondary(sql server 2014增加到了8个)

5.Dashborad可以监视alwayson运行状况

6.依赖于windows 2008集群,实现多站点部署。

二、类似镜像的特性:

1.每个secondary上有一份数据复制,可以支持只读请求

2.可以在secondary执行备份和dbcc命令

3.在配置情况下,只读请求可以被重定向到secondary

4.自动修复某些类型数据页的损坏

5.primary和secondary之间的数据被加密和压缩,提高安全性和减少流量。

目录

3.AlwaysOn可用组... 1

3.1 AlwaysOn基本架构... 1

3.2 AlwaysOn数据同步原理... 2

3.3 AlwaysOn可用性模式... 2

3.3.3可用副本之间“DISCONNECTED”状态... 3

3.3.4 Secondary的”NOT SYNCHRONIZING”状态... 3

3.4 AlwaysOn故障转移... 4

3.4.1自动故障转移... 4

3.4.2 手动故障转移... 4

3.4.3强制故障转移... 5

3.4.4 多子网可用性组故障转移... 5

3.4.5 Split Brain(大脑分裂)5

3.4.6 连接,可用性副本和可用性数据库状态... 5

3.5 创建一个Always可用性组... 5

3.6 可读的Secondary. 5

3.6.1 ApplicationIntent. 5

3.6.2 副本可读模式设置... 6

3.6.3只读路由... 6

3.6.4 secondary上可能出现的性能问题... 7

3.6.5 统计信息... 7

3.7 监控AlwaysOn可用性组的运行状态... 8

 

 

澳门新濠3559 11

3.4.4 多子网可用性组故障转移

要在客户端链接字符串的MultiSubnetFailover参数设置为true。除支持外必须通过listener来访问可用性副本。

--指定在此可用性副本当前拥有辅助角色(即它是辅助副本)时要生效的角色有设置:
ALTER AVAILABILITY GROUP [AG01]
MODIFY REPLICA ON
N'SERVER02ISS' WITH
(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));
ALTER AVAILABILITY GROUP [AG01]
MODIFY REPLICA ON
N'SERVER02ISS' WITH
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://SERVER02.testad.com:1433'))

ALTER AVAILABILITY GROUP [AG01]
MODIFY REPLICA ON
N'SERVER04ISS' WITH
(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));
ALTER AVAILABILITY GROUP [AG01]
MODIFY REPLICA ON
N'SERVER04ISS' WITH
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://SERVER04.testad.com:1433'))

--指定在此可用性副本当前拥有主角色(即它是主副本)时要生效的角色有设置:
ALTER AVAILABILITY GROUP [AG01]
MODIFY REPLICA ON
N'SERVER04ISS' WITH
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST = (N'SERVER02ISS',N'SERVER04ISS')));

ALTER AVAILABILITY GROUP [AG01]
MODIFY REPLICA ON
N'SERVER02ISS' WITH
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST = (N'SERVER04ISS',N'SERVER02ISS')));

3.6.4.1 受用航版本控制来消除堵塞

因为secondary上同时存在读写,所以会存在堵塞的情况,为了保证只读的性能,AlwaysON会使用行版本控制来消除堵塞问题

澳门新濠3559 12

最后,对于要使用只读路由的客户端应用程序,其连接字符串必须满足以下要求:  

我的SQL Server服务并没有监听在1433端口,而是动态端口!

澳门新濠3559 13

澳门新濠3559 14

可用性组测试环境上也配置一下只读路由,尝试实现读写分离。

再次使用ApplicationIntent = ReadOnly参数连接。

可是,在我的环境中只要加上ApplicationIntent = ReadOnly参数,就无法连接服务器。

澳门新濠3559 15

澳门新濠3559 16

虽然主副本是SERVER02,但是连接已经被重定向到了SERVER04

  • 引用配置为支持只读路由的可用性组的侦听器。      

当前的只读路由配置:

编辑:数据库 本文来源:MSSQL/只读路由,在错误日志中看到非常多的alwa

关键词: 澳门新濠3559