sql server alwayson 可用性组 只读路由的设置

一、难点概述

在错误日志中见到那多少个多的alwayson集结只读连接错误,错误新闻的描述为“目的数据库位于可用性组,当前不允许通过read only连接”。错误日志如下:

图片 1

脚下的作业连串采纳监听ip对数据库实行连接,使用了ReadOnly和ReadWrite进行读写自动路由。当前alwayson的布署如下

支柱色援助的总是访谈类型

1.允许具备连接
主数据库同不常候同意读写连接和只读连接。 那是主演色的默许行为。

2.仅同意读/写连接
允许ApplicationIntent=ReadWrite或未设置连接条件的连天。 不容许 ApplicationIntent=ReadOnly的总是。 仅同意读写连接可协理幸免顾客错误地将读意向工作负荷连接受主别本。

--指定在此可用性副本当前拥有辅助角色(即它是辅助副本)时要生效的角色有设置:
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')));

二、难题由来

主题材料由来是利用了ReadOnly对主别本进行了三番五次操作变成的。由于当下的主演色中的连接配置的是“允许读/写连接”;所以当前主别本不容许ReadOnly的连年字符串的参数。那时如此设置的指标便是为着幸免只读连接连接上主别本。防止客户错误地将读意向专业负荷连接受主别本。

 

标题原因差不离有三种也许:

1.应用程序连接配置存在难点,

2.路由本人BUG

 

首先种恐怕的或许十分大,可是向开拓经营承认过代码那边调用的是通用连接借口,何况系统系统已经运转了一年多,何况以此主题素材是间隙性的,所以能够断定接口连接配置是不曾难题的,唯一的只怕是何地单独接纳的主别本的ip举办了连接。

老是测验

1.ReadOnly

图片 2

图片 3

能够看看选择ApplicationIntent=ReadOnly连接属性正确的总是到了只读别本DB02上。ApplicationIntent=ReadWrite同理。

20170714补充

SQLServer2014援救八个只读别本负载分担只读操作,只读路由列表修改如下:

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;演示如下:

图片 4

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 

图片 5

ssms:此外连接参数

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

图片 6

三、管理措施

将主演色中的连接修改为“允许持有连接”

留意:当前的那些管理办法并未根本的化解难题。寻常意况下是透过监听ip自动路由到对应的别本。

 

 

 

现阶段从未找到这种格局能够在数据库中询问到应用程序使用了哪个种类查询连接字符串参数举办延续,希望知晓的心上人能告诉一下。

 

 

 

 

 

 

 

 

 

备注:

    作者:pursuer.chen

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

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

《欢迎交流讨论》

 

登录方式

接连仍将对准主别本SECRUISERVE奔驰G级02。

概述  

从下边大家得以观望只读路由的读写分离是经过连日属性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

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

《欢迎交流讨论》

最后在大菠萝的扶助下,终于搜索来是端口的主题材料。

安插语句

---查询可用性副本信息
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别本上创造登录客商。

自个儿的SQL Server服务并不曾监听在1433端口,而是动态端口!

C#连天字符串

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

图片 7

概述  

Alwayson相对于数据库镜像最大的优势正是可读别本,带来可读别本的还要还增添了多个新的功能正是安排只读路由落成读写分离;当然这里的读写分离稍微夸张了少数,只好称之为半读写分离吧!看接下去的稿子就领会为何称之为半读写分离。

 

数据库:SQLServer2014

db01:192.168.1.22

db02:192.168.1.23

db03:192.168.1.24

监听ip:192.168.1.25

 

图片 8

标签:MSSQL/只读路由

翻开别本间的只读路由关系:

配备可用性组

图片 9

配置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进行连接,数据库服务器端无需铺排此项!!!

参谋链接:

赞助剧中人物帮衬的接连访问类型

1.无连接
不允许别的客户连接。 扶助数据库不可用于读访谈。 那是扶植剧中人物中的暗中同意行为。

2.仅读意向连接
扶持数据库仅接受ApplicationIntent=ReadOnly 的连日,另外的连年方式不能够连接。

3.同意别的只读连接
支援数据库全体可用以读访谈连接。 此选项允许相当的低版本的顾客端实行连接。

这里,附上大菠萝提供的多少个剧本:

可用性副本概念

图片 10

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

图片 11

sql server alwayson 可用性组 只读路由的设置。按道理说,脚本实践完后,在连接字符串中加入参数:ApplicationIntent = ReadOnly
就能够自行重定向到支持别本。

图片 12

若是不利用ApplicationIntent = ReadOnly参数连接。

 前些天深夜学习了【SQL Server 2011施行与处理实战指南】的第三章,于是前日想在近年来建的足够alwayson

再也行使ApplicationIntent = ReadOnly参数连接。

图片 13

修改成固定端口1433后玉石俱焚启服务。

  • 援引该可用性组中的数据库。
  • 使用 TCP 协议。      

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

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 

提及底,特别谢谢大菠萝,推延您久久的时光哈~~

可是,在本身的条件中一经增加ApplicationIntent = ReadOnly参数,就不能连接服务器。

即便主别本是SE君越VE讴歌RDX02,可是接连已经被重定向到了SE中华VVEGL45004

可用性组测量试验蒙受上也配备一下只读路由,尝试达成读写分离。

图片 14

依照书中的方法,实践如下脚本(本来小编是3节点的可用性组,由于台式机开4台虚构机实在是太卡,小编把server03给关掉了,只读路由也没安插这几个节点。):

最终,对于要选取只读路由的顾客端应用程序,其总是字符串必得满足以下须求:  

当前的只读路由计划:

图片 15

本文由上海时时乐走势图发布于上海时时乐走势图官网,转载请注明出处:sql server alwayson 可用性组 只读路由的设置

您可能还会对下面的文章感兴趣: