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

 明天中午学习了【SQL Server
贰零壹贰履行与管理实战指南】的第一章,于是后日想在前段时间建的13分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参数,就不可以连接服务器。

图片 1

图片 2

最后在大菠萝的相助下,终于找出来是端口的难点。

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

图片 3

图片 4

图片 5

修改成固定端口1433后不分厚薄启服务。

再度利用ApplicationIntent = ReadOnly参数连接。

图片 6

尽管如此主副本是SE兰德酷路泽VE翼虎02,不过接连已经被重定向到了SELX570VE奥迪Q704

图片 7

假设不应用ApplicationIntent = ReadOnly参数连接。

图片 8

连日仍将针对主副本SE奔驰M级VE奇骏02。

图片 9

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

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

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

最后,特别多谢大菠萝,贻误您长久的日子哈~~

相关文章