SQL Server AlwaysOn读写分离配置图文教程

概述

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

数据库:SQLServer2014

db01:192.168.1.22

db02:192.168.1.23

db03:192.168.1.24

监听ip:192.168.1.25

配置可用性组

可用性副本概念辅助角色支持的连接访问类型

1.无连接

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

2.仅读意向连接

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

3.允许任何只读连接

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

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

1.允许所有连接

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

2.仅允许读/写连接

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

配置语句

---查询可用性副本信息
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副本上创建登入用户。

登入方式

C#连接字符串server=侦听IP;database=;uid=;pwd=;ApplicationIntent=ReadOnly

ssms:其它连接参数

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

配置使用监听ip进行连接192.168.1.22 db01.ag.com 192.168.1.23 db02.ag.com192.168.1.24 db03.ag.com--配置使用hostname进行连接192.168.1.22 db01192.168.1.23 db02192.168.1.24 db03

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

连接测试

1.ReadOnly

可以看到使用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;演示如下:

概述

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

总结

以上所述是小编给大家介绍的SQL Server AlwaysOn读写分离配置,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • SQL Server 2016 无域群集配置 AlwaysON 可用性组图文教程

    windows server 2016 与 sql server 2016 都可用允许不许要加入AD ,管理方面省了挺多操作,也不用担心域控出现问题影响各服务器了. 本测试版本: window server 2016 datacenter + sql server 2016 ctp IP规划: 主机名 IP 说明 ad 192.168.2.2 域服务器(kk.com)windows xp Server131 192.168.2.131 节点 Server132 192.168.2.132 节点

  • SQLServer 2012中设置AlwaysOn解决网络抖动导致的提交延迟问题

    事件起因:近期有研发反应,某数据库从08切换到12环境后,不定期出现写操作提交延迟的问题: 事件分析:在排除了系统资源争用等问题后,初步分析可能由于网络抖动导致同步模式alwayson节点经常出现会话超时等待提交的问题导致. 经过排查,扩展事件里发现不定期出现35202错误,这是一条副本连接恢复的消息. 由于机房网络环境复杂,数据库服务器和应用服务器混用一个交换机,在业务高峰期时,因上联端口流量打满而导致连接失败的情况屡有发生. 既然短期内无法改造网络环境,那就从SQLSERVER服务器自身出发

  • 基于Win2008 R2的WSFC实现 SQL Server 2012高可用性组(AlwaysOn Group)

    两年前的<SQL Server 2008 R2数据库镜像部署>,今天"再续前缘"-- 微软新一代数据库产品SQL Server 2012已经面世一段时间了,不管从功能上讲还是性能上的体现,较之其早期产品都有了很大提升.特别是其引入高可用性组(AlwaysOn Group, AG)这一概念和功能,大大增强和提高了SQL Server的可用性,在之前的镜像数据库的基础上有了质的变化. SQL Server 2012高可用性组在实现过程中较之早起的SQL Server故障转移群集

  • SQL Server 2016 Alwayson新增功能图文详解

    概述 SQLServer2016发布版本到现在已有一年多的时间了,目前最新的稳定版本是SP1版本.接下来就开看看2016在Alwyson上做了哪些改进,记得之前我在写2014Alwayson的时候提到过几个需要改进的问题在2016上已经做了改进. 一.自动故障转移副本数量 在2016之前的版本自动故障转移副本最多只能配置2个副本,在2016上变成了3个. 说明:自动故障转移增加到三个副本影响并不是很大不是非常的重要,多增加一个故障转移副本也意味着你的作业也需要多维护一个副本.重要程度(一般).

  • SQLserver2014(ForAlwaysOn)安装图文教程

    SQLserver 2014 AlwaysOn在SQLserver 2012的基础之上,进行了很大程度的增加,如可以通过"添加 Azure 副本向导"简化了用于 AlwaysOn 可用性组的混合解决方案创建:辅助副本的最大数目从 4 增加到 8: 断开与主副本的连接时,或者在缺少群集仲裁期间,可读辅助副本现在保持可用于读取工作负荷: 故障转移群集实例 (FCI) 现在可使用群集共享卷 (CSV) 作为群集共享磁盘: 提供了一个新的系统函数 sys.fn_hadr_is_primary_

  • Windows2012配置SQLServer2014AlwaysOn的图解

    SQLserver 2014 AlwaysOn增强了原有的数据库镜像功能,使得先前的单一数据库故障转移变成以组(多个数据)为单位的故障转移.同时可以支持多达9个复制伙伴,可读性辅助副本服务器等多个特性.对于以组为单位的数据库,主要是解决应用对于多个数据库之间存在的依赖性,从而进行整体转移.其次,可以将那些报表或者只读需求转移到只读辅助副本,从而大大减少主副本的负载,使得主副本更加容易扩展,更好地支持生产负载,以及对请求提供更快的响应. 本文描述了基于虚拟环境Windows 2012 + SQLs

  • SQL Server AlwaysOn读写分离配置图文教程

    概述 Alwayson相对于数据库镜像最大的优势就是可读副本,带来可读副本的同时还添加了一个新的功能就是配置只读路由实现读写分离:当然这里的读写分离稍微夸张了一点,只能称之为半读写分离吧!看接下来的文章就知道为什么称之为半读写分离. 数据库:SQLServer2014 db01:192.168.1.22 db02:192.168.1.23 db03:192.168.1.24 监听ip:192.168.1.25 配置可用性组 可用性副本概念辅助角色支持的连接访问类型 1.无连接 不允许任何用户连接

  • SQL Server 2012 安装与启动图文教程

    本文给大家介绍sql server2012安装与启动图文教程,非常详细. sqlserver2012安装步骤如下所示: SQL Server 2012 安装过程很漫长, 里面很多界面不一一截取了,我分别在win7 企业版 64位 和 win10专业版SP1 64位 装了SQL Server 2012 ,都没有问题. 1. 安装的功能选择,选择"全部" 2. 数据库引擎设置,选择"混合模式",给系统管理员sa设定登录密码. 如果你在安装的时候选择的是windows登录

  • Sql server 2012 中文企业版安装图文教程(附下载链接)

    首先推荐一个网站http://msdn.itellyou.cn/,这是一个非常棒的网站,各种正版资源,安全无毒 先选择服务器如何选择SQL Server 2012 选择自己要的版本,这里笔者选的是中文企业版,下载地址附上,复制到迅雷下载即可注意这里的是64位版,如果32位机器去网站上找x86的版本,笔者还是建议换成64位的系统吧 ed2k://|file|cn_sql_server_2012_enterprise_edition_with_sp1_x64_dvd_1234495.iso|4231

  • SQL Server 2005恢复数据库详细图文教程

    不少需要用到sql2005的程序,有很多新手还是会操作,这里写个详细的图文教程送个菜鸟们,高手请飘过.适用于独立主机的朋友使用,如果你还没安装,请按照这个教程来安装 SQL Server 2005图文安装教程,超详细 下面是SQL Server 2005恢复数据库的详细过程 1:打开SQL Server Management Studio并登录,这个一般在开始--程序里面找到 2:鼠标右键单击数据库--新建数据库 3:弹出来的框里,填写数据库名称,我这里填写的是sqlqtdy,这个根据自己需求来

  • sql server 2005数据库备份还原图文教程

    首先.点击桌面的"SQL Server Management Studio"打开,sql2005的管理器,点击"连接"登录,如图: 一.新建数据库 1.新建数据库 右键点击"数据库"--"新建数据库",如图: MSSQL2005备份还原图文教程 填写数据库名,如mydata,选择数据库保存路径,一般可以保持默认地址,点击"确定". 2.新建用户 右键点击"安全性"--"登录名&

  • SQL Server 2000 清理日志精品图文教程

    SQL Server 2000 清理日志精品教程 SQL Server 2000 数据库日志太大!如何清理SQL Server 2000的日志呢?如何压缩SQL Server 2000的日志呢?如何让SQL Server 2000的日志变小呢? 据小编所知,办法有很多很多,总结起来算有3类吧: 1.点几下鼠标,用SQL Server 2000管理工具中的企业管理器即可实现,待会儿详解:2.用SQL语句,在SQL Server 2000管理工具中的查询分析器可以实现,此法高级人士喜欢用:3.用第三

  • SQL SERVER日志进行收缩的图文教程

    前言 最近经历了一次服务器SQL SERVER 数据库服务器端事务日志爆满,导致服务器数据库写入不进数据的宕机事件,经过此次事件的发生,奉劝各位同仁一句,如果没有绝对的充足存储空间,数据库事务日志文件千万不要采取完整备份,备份出的数据量是你无法承受的,简单备份就可以了,以下是收缩数据库事务日志的操作,希望可以帮助到大家! 数据库事务日志收缩通过图形界面进行操作如下: 第一步:右键数据库属性 第二步:更改数据库恢复模式,将模式从"完整"改为"简单" 第三步:右键数据库

  • SQL Server 2014 数据库中文版安装图文教程

    SQL Server 2014三大新特性:集成内存OLTP.BI和混合云搭建,那么记录一下我们的安装过程及配置. 软件环境准备 SQL Server 2014版支持的操作系统有:Windows Server 2008.Windows Server 2008 R2.Windows Server 2012.Windows Server 2012 R2.标准版还支持 Windows 7.Windows 8.Windows 8.1 操作系统. 安装 .Net Framework 3.5 sp1 如果本机

  • SQL Server 2008 安装和配置图解教程(附官方下载地址)

    SQL Server 2008我们也能从中体验到很多新的特性,但是对于SQL Server 2008安装,还是用图来说话比较好.本文将从SQL Server 2008安装开始讲起. SQL Server 2008 简体中文正式版 下载地址 http://www.jb51.net/softs/43885.html 本来这篇是打算玩玩服务器功能中的第一个:adrms的,没想到装了几次都安装成功,但是有错误,后来没招了,打算将rms的数据库放到sql上来折腾折腾,所以为了不让大家觉得突兀,所以本篇SQ

  • SQL Server 2008 R2英文版安装图文教程

    SQL Server 2008 R2英文版安装图解

随机推荐