16.6 从客户端访问

16.6  从客户端访问

16.6.1  可读辅助副本

  对于 AlwaysOn 可用性组,主副本的数据库可以像普通的数据库一样使用,包括新增、修改和删除记录行。

  辅助副本也可以提供只读访问。

  “可读辅助副本”有以下3种类型:

(1)“是”

  这种模式允许客户端访问辅助副本。

(2)“仅读意向”

  这种模式允许客户端访问辅助副本。但要求客户端连接中明确连接意向为只读。

(3)“否”

  这种模式不允许客户端访问辅助副本。与数据库镜像的镜像数据库类似。

16.6.2  客户端连接

  客户端可以连接到以下三种地址之一。

(1)侦听器

  客户端指向侦听器,侦听器无论何时都会将主副本的地址返回给客户端,因此,客户端应用程序可以像访问普通的数据库一样正常读取、写入 AlwaysOn 可用性组中的数据库。这是最常用的一种访问方式,因为不用关心当前的主副本在哪一个故障转移节点上以及何时发生故障转移。

(2)副本的实例名称

  客户端也可以指向副本的实例名称。如果当前实例的角色是主副本,则客户端连接不会遇到问题。在实际环境中,当前实例的角色可能发生故障转移从而成为辅助副本,这时候客户端连接可能会遇到错误。这种访问方式应当在明确当前副本的角色后才可以选用,并尽量避免因故障转移带来的影响。

  例如,当前副本是辅助副本,且“可读辅助副本”选项为“否”,则客户端的连接将失败。又如,当前副本是辅助副本,且可以提供只读访问,但是当客户端发出修改数据的请求时,也会报错。

(3)“只读意向”

  客户端可以在连接字符串中明确连接的目的为“只读意向”,侦听器则会将其中一个辅助副本的地址返回给客户端,而后客户端通过这个地址访问这个只读的辅助副本。

16.6.3  配置只读路由

  在本例中,先将 SQLSVR1、SQLSVR2 和 SQLSVR3 的“可读辅助副本”设为“是”或“仅读意向”,以便让辅助副本能够响应从侦听器转来的“只读意向”。脚本如下:

USE [master]

GO

ALTER AVAILABILITY GROUP [HAGroup01] MODIFY REPLICA ON N‘SQLSVR1‘

WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL))

GO

ALTER AVAILABILITY GROUP [HAGroup01] MODIFY REPLICA ON N‘SQLSVR2‘

WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL))

GO

ALTER AVAILABILITY GROUP [HAGroup01] MODIFY REPLICA ON N‘SQLSVR3‘

WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS =READ_ONLY ))

GO

  在主副本上执行以下脚本,添加只读路由 URL。每个只读路由 URL 都用于将只读意向请求路由到一个特定的可读辅助副本。通常,向每个可读辅助副本分配一个只读路由 URL。


USE master

GO

ALTER AVAILABILITY GROUP [HAGroup01] MODIFY REPLICA ON N‘SQLSVR1‘

WITH (SECONDARY_ROLE(READ_ONLY_ROUTING_URL=N‘TCP://SQLSVR1.localdomain.local:1433‘));

GO

ALTER AVAILABILITY GROUP [HAGroup01] MODIFY REPLICA ON N‘SQLSVR2‘

WITH (SECONDARY_ROLE(READ_ONLY_ROUTING_URL=N‘TCP://SQLSVR2.localdomain.local:1433‘));

GO

ALTER AVAILABILITY GROUP [HAGroup01] MODIFY REPLICA ON N‘SQLSVR3‘

WITH (SECONDARY_ROLE(READ_ONLY_ROUTING_URL=N‘TCP://SQLSVR3.localdomain.local:1433‘));

GO

  然后还要添加只读路由表,告诉侦听器按照怎么的先后顺序将辅助副本的地址返回给客户端。

  分别为每个副本设置作为主副本时的只读路由 URL。每个副本上配置的只读路由列表中的最后一个成员都是自己,表明当前面所有的只读副本都发生故障后,则还可以由主副本自己来响应这些“只读意向”。脚本如下:


USE master

GO

ALTER AVAILABILITY GROUP [HAGroup01] MODIFY REPLICA ON N‘SQLSVR1‘

WITH (PRIMARY_ROLE(READ_ONLY_ROUTING_LIST=(‘SQLSVR2‘,‘SQLSVR3‘,‘SQLSVR1‘)));

GO

ALTER AVAILABILITY GROUP [HAGroup01] MODIFY REPLICA ON N‘SQLSVR2‘

WITH (PRIMARY_ROLE(READ_ONLY_ROUTING_LIST=(‘SQLSVR1‘,‘SQLSVR3‘,‘SQLSVR2‘)));

GO

ALTER AVAILABILITY GROUP [HAGroup01] MODIFY REPLICA ON N‘SQLSVR3‘

WITH (PRIMARY_ROLE(READ_ONLY_ROUTING_LIST=(‘SQLSVR1‘,‘SQLSVR2‘,‘SQLSVR3‘)));

GO

16.6.4  测试只读路由

  客户端必须使用TCP协议连接到支持只读路由的AlwaysOn可用性组的侦听器,并且在连接字符串中将应用程序意向特性/属性设置为只读,而且必须引用该可用性组中的数据库。例如:

Server=tcp:SQLAG01,1433; Database=SQLDB01; IntegratedSecurity=SSPI;
 ApplicationIntent=ReadOnly; MultiSubnetFailover=True

  以下通过一个实验测试只读路由。

(1)直接连接到侦听器

(2)连接到侦听器,并且使用连接参数

  在 SSMS 登录界面,在“服务器名称”中输入侦听器的名称或 IP 地址。然后单击右下角的“选项”按钮。

  在“其他连接参数”中输入连接字符串。

  连接到数据库引擎后,查看当前连接的实际节点。

(3)故障转移

  停止当前连接的辅助副本的数据库引擎(模拟故障),然后立即在 SSMS 中执行任何查询,会报错。这说明只读路由正在故障转移。

  等到故障转移成功后,在 SSMS 中再次执行查询。

时间: 2024-10-10 00:02:01

16.6 从客户端访问的相关文章

wcf Rest 服务宿主在windows服务及客户端访问

首先写好服务,代码如下: 1 using System; 2 using System.Collections.Generic; 3 using System.Runtime.Serialization; 4 using System.ServiceModel.Web; 5 using System.ServiceModel; 6 7 8 namespace Artech.WcfServices.Service 9 { 10 [ServiceContract(Namespace = "Artec

编写Web Service客户端访问www.webxml.com.cn提供的服务

Introduction  to lead/lag compensator 首先,compensator和controller有啥区别? 其实没有明确的界限,两者差不多.不必为这这个概念纠结 我找了一下关于这个问题一些人的看法,其中有很"流行"的解说 Lutz von Wangenheim · Hochschule Bremen Here is an excerpt from "G. Ellis, Control System Design Guide": &quo

python socket 套接字编程 单进程服务器 实现多客户端访问

服务器: 1 import socket 2 #单进程服务器 实现多客户端访问 IO复用 3 #吧所有的客户端套接字 放在一个列表里面,一次又一次的便利过滤 4 #这就是apache: select模型 6 server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 7 server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) #设置端口复用 8 #AF_INET: IPV4 9

Windows server 2012 搭建VPN图文教程(四)客户端访问VPN测试

Windows server 2012 搭建VPN图文教程(一)安装VPN相关服务 Windows server 2012 搭建VPN图文教程(二)配置路由和远程访问服务 Windows server 2012 搭建VPN图文教程(三)配置VPN访问账户 Windows server 2012 搭建VPN图文教程(四)客户端访问VPN测试 Part IV 客户端访问VPN测试 本部分主要介绍如何通过客户端访问VPN的方法.实验客户端操作系统为windows 8,以下是客户端配置VPN的步骤: 打

在连接windows2008时,报错:由于这台计算机没有远程桌面客户端访问许可证,远程会话被中断

前两天连接服务器的时候弹出:由于这台计算机没有远程桌面客户端访问许可证,远程会话被中断的对话框提示.前一段还在用都是好好的,怎么一下子就不行了呢?然后找了一下解决方案,解决方案很简单. 解决方案: 打开本机注册表,注册表子项:HKEY_LOCAL_MACHINESOFTWAREMicrosoftMSLicensing,对,你没有看错,就是这个,不管他下面有没有东西,将整个子项删除.将MSLicensing删除. 但,原因是什么呢???

如何监听第三方应用程序(SOAP or RESTful 客户端)访问HTTPS网站时的数据?

随着互联网的应用越来越多,在我们的日常开发和调试当中(比如调试SOAP和RESTFul的时候),我们常常需要访问用第三方的工具访问HTTPS的网站,为了简化描述,本文使用IE浏览器访问Google 提供的https://www.googleapis.com/discovery/v1/apis RESTful服务为例,注意这个是基于https协议的访问,如果用第三方的嗅探工具,比如wiresharp,即使我们能把http的数据包抓到,显示出来的内容也是乱码,因为传送的内容经过了加密,而加密的私钥就

NFS客户端访问行为相关的几个参数解释

soft / hard Determines the recovery behavior of the NFS client after an NFS request times out. If neither option is speci- fied (or if the hard option is specified), NFS requests are retried indefinitely. If the soft option is speci- fied, then the N

SVN客户端访问URL失败--请求的名称有效,但是找不到请求的类型 (转载)

描述 给同事电脑装上SVN服务器,然后在本机连接SVN时总是报错"请求的名称有效,但是找不到请求的类型的数据".在网上找了一大堆解决方案都无果. 解决 最后发现原因竟是咱俩电脑不在一个工作组.他电脑选择的是公用网络,我是家庭网络,不在一工作组.后来统一设置成家庭网络就ok了... 参照贴文 http://blog.csdn.net/mengdonghui123456/article/details/47092309 在使用SVN客户端时遇到了个这样的问题:客户端访问服务端时输入对应的U

Linux 安装MongoDB 并设置防火墙,使用远程客户端访问

1. 下载 MongoDB 提供了 linux 各发行版本 64 位的安装包  下载地址:https://www.mongodb.com/download-center#community 2. 安装 1 tar -zxvf mongodb-linux-x86_64-3.0.6.tgz # 解压 2 3 mv mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb # 将解压包拷贝到指定目录 MongoDB 的可执行文件位于 bin 目录下,所以可以将其添加