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

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

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

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

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

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

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

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

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

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

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

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

连接仍将指向主副本SERVER02。

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

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

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

当前的只读路由配置:

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

----------------------------------------

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

  • 使用 TCP 协议。

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

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

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

参考链接:

http://msdn.microsoft.com/zh-cn/subscriptions/downloads/ff878308.aspx#ror

http://msdn.microsoft.com/zh-cn/subscriptions/downloads/hh213002.aspx

http://hi.baidu.com/hanxiao2100/item/e0a46226519aab8b6f2cc368

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

sql server alwayson 可用性组 只读路由的设置的更多相关文章

  1. 宣布正式发布 Windows Azure Notification Hub,新增 SQL Server AlwaysOn 可用性组侦听器支持

    今天,我们非常高兴地宣布,针对使用 Windows Azure 的移动和企业开发人员推出一些新功能.这些新功能可以减少构建移动应用程序的开发时间和成本,并能帮助企业开发人员实现高可用性和全球业务连续性 ...

  2. SQL Server Alwayson可用性副本会话期间的可能故障

    200 ? "200px" : this.width)!important;} --> 介绍 物理故障.操作系统故障或 SQL Server 故障都可能导致两个可用性副本之间 ...

  3. SQL Server AlwaysON从入门到进阶(1)——何为AlwaysON?

    本文属于SQL Server AlwaysON从入门到进阶系列文章 本文原文出自Stairway to AlwaysOn系列文章.根据工作需要在学习过程中顺带翻译以供参考.系列文章包含: SQL Se ...

  4. SQL Server ->> 高可用与灾难恢复(HADR)技术 -- AlwaysOn(实战篇)之AlwaysOn可用性组搭建

    因为篇幅原因,AlwaysOn可用性组被拆成了两部分:理论部分和实战部分.而实战部分又被拆成了准备工作和AlwaysOn可用性组搭建. 三篇文章各自的链接: SQL Server ->> ...

  5. SQL Server ->> 高可用与灾难恢复(HADR)技术 -- AlwaysOn可用性组(理论篇)

    因为篇幅原因,AlwaysOn可用性组被拆成了两部分:理论部分和实战部分.而实战部分又被拆成了准备工作和AlwaysOn可用性组搭建. 三篇文章各自的链接: SQL Server ->> ...

  6. AlwaysOn可用性组功能测试(二)--SQL Server群集故障转移对AlwaysOn可用性组的影响

    三. SQL Server群集故障转移对AlwaysOn可用性组的影响 1. 主副本在SQL Server群集CLUSTEST03/CLUSTEST03上 1.1将节点转移Server02.以下是故障 ...

  7. SQL Server 2012 管理新特性:AlwaysOn 可用性组

    SQL Server 2012 新特性(一)管理新特性:AlwaysOn 一.准备环境 1.准备4台计算机 域控制器DC1,IP地址192.168.1.1 主节点SQL1:IP地址192.168.1. ...

  8. AlwaysOn可用性组测试环境安装与配置(一)--SQL群集环境搭建

    一.测试环境介绍 1. 宿主使用工作站(HYPR-V)基本配置如下: 处理器:Intel(R) Core(TM) i5-4470 CPU @ 3.20GHz 3.20GHz 内存(RAM):8.00G ...

  9. 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)

    从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://w ...

随机推荐

  1. 基于Flume的日志收集系统方案参考

    前言 本文将简单介绍两种基于Flume的日志收集系统可能的架构方案,可根据不同的实际场景参考使用. 方案一 示例图如下: 说明: 每个日志源(http上报.日志文件等)对应一个Agent-c用于收集对 ...

  2. Facelets应用程序的生命周期

    当客户端(如浏览器)向使用Facelets创建的页面发出新的请求时,会创建一个新的组件树或 javax.faces.component.UIViewRoot将其创建并放入FacesContext. 该 ...

  3. S0到S5状态讲解

    ACPI(高级配置和电源管理接口)的六种工作状态Advanced Configuration and Power Management InterfaceACPI表示高级配置和电源管理接口( Adva ...

  4. SpringBoot(2) Json框架 -- Jackson返回结果处理

    一.常用框架 阿里 fastjson,谷歌gson等 JavaBean序列化为Json,性能:Jackson > FastJson > Gson > Json-lib 同个结构 Ja ...

  5. 使用Asp.Net Core MVC 开发项目实践[第五篇:缓存的使用]

    项目中我们常常会碰到一些数据,需要高频率用到但是又不会频繁变动的这类,我们就可以使用缓存把这些数据缓存起来(比如说本项目的导航数据,帖子频道数据). 我们项目中常用到有Asp.Net Core 本身提 ...

  6. PHP语言的优缺点

    PHP是一种跨平台的服务器端的嵌入式脚本语言. 优点: 实用性强 它大量地借用C.Java 平台广 支持数据种类多 有成熟框架 ,面向对象体系 PHP是完全免费 开源 缺点: 语法不严谨, 弱类型语言 ...

  7. Linux进程间通信(System V) --- 共享内存

    共享内存 IPC 原理 共享内存进程间通信机制主要用于实现进程间大量的数据传输,下图所示为进程间使用共享内存实现大量数据传输的示意图: 共享内存是在内存中单独开辟的一段内存空间,这段内存空间有自己特有 ...

  8. [转]How to Improve Entity Framework Add Performance?

    本文转自:http://entityframework.net/improve-ef-add-performance When you overuse the Add() method for mul ...

  9. 【操作系统】二、JVM线程与Linux内核线程的映射

    Linux从内核2.6开始使用NPTL (Native POSIX Thread Library)支持,但这时线程本质上还轻量级进程. Java里的线程是由JVM来管理的,它如何对应到操作系统的线程是 ...

  10. hadoop之 hadoop能为企业做什么?

    hadoop是什么? Hadoop是一个开源的框架,可编写和运行分不是应用处理大规模数据,是专为离线和大规模数据分析而设计的,并不适合那种对几个记录随机读写的在线事务处理模式.Hadoop=HDFS( ...