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读写分离配置,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

时间: 2024-12-21 05:20:18

SQL Server AlwaysOn读写分离配置图文教程的相关文章

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

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

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

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

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

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

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

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

MS SQL Server Management Studio Express安装图文教程

  Microsoft sql server Management Studio Express (SSMSE) 是一种免费.易用的图形管理工具,用于管理 SQL Server 2005 Express Edition 和具有高级服务的 SQL Server 2005 Express Edition.SSMSE 还可以管理任何版本的 SQL Server 2005 创建的 SQL Server 数据库引擎实例.注意:SSMSE 无法管理 SQL Server Analysis Services.

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 2008 安装和配置图解教程(附官方下载地址)_mssql2008

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

Sql Server2012 使用IP地址登录服务器的配置图文教程

最近在使用NFineBase框架+c#做一个系统的时候,在使用sql server 2012 连接数据库的时候 ,遇到几个问题. 一. 就是在本地或者远程连接别人的数据库的时候,以ip地址作为服务器名称 以SQL Server 身份验证(即输入登录名和密码)的方式登录数据库 总会出现错误 比如说会提示一下错误: 用户 'sa' 登录失败,该用户与可信 SQL Server 连接无关联. 但是使用 计算机名\实例名 这种方式就可以登录 \ 最后发现还是数据库的配置问题,解决方案如下: 我使用的是w

在阿里云ECS上轻松实现无域控的SQL Server AlwaysOn可用性组

在阿里云ECS上轻松实现无域控的SQL Server AlwaysOn可用性组 前言 SQL Server AlwaysOn功能在SQL Server 2012版本就已经出来了,AlwaysOn 可用性组功能是一个提供替代数据库镜像的企业级方案的高可用性和灾难恢复解决方案,可最大程度地提高一组用户数据库对企业的可用性.从我的角度来看,这个功能提供的是革命性的改变,首先他实现了多个副本并且可读,非常方便实现读写分离方案,比起使用Database Mirroring +Relication实现读写分