AlwaysOn配置只读路由
1.配置只读路由
--①配置A副本的只读路由属性(ReadOnly代表‘只读意向’)
ALTER AVAILABILITY GROUP [gky]
MODIFY REPLICA ON N'CZ-IT-aon-02' WITH (SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));
--②配置A副本的只读路由URL
ALTER AVAILABILITY GROUP [gky]
MODIFY REPLICA ON N'CZ-IT-aon-02' WITH (SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://CZ-IT-aon-02.CZ.QUECTEL.COM:1433'));
--③配置B副本的只读路由属性
ALTER AVAILABILITY GROUP [gky]
MODIFY REPLICA ON N'CZ-IT-aon-03' WITH (SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));
--④配置B副本的只读路由URL
ALTER AVAILABILITY GROUP [gky]
MODIFY REPLICA ON N'CZ-IT-aon-03' WITH (SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://CZ-IT-aon-03.CZ.QUECTEL.COM:1433'));
--⑤配置A副本作为主副本时候的只读路由表
ALTER AVAILABILITY GROUP [gky]
MODIFY REPLICA ON N'CZ-IT-aon-02' WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('CZ-IT-aon-03','CZ-IT-aon-02')));
--⑥配置B副本作为主副本时候的只读路由表
ALTER AVAILABILITY GROUP [gky]
MODIFY REPLICA ON N'CZ-IT-aon-03' WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('CZ-IT-aon-02','CZ-IT-aon-03')));
查看路由表
SELECT * FROM sys.availability_read_only_routing_lists
对应关系
A副本id--B副本id
A副本id--A副本id
B副本id--A副本id
B副本id--B副本id
为什么这么配置请分析如下过程 1.正常运行时候,A作为主副本,B作为辅助副本,客户端连接字符串指定数据源是侦听器地址 2.此时发送只读请求 3.侦听器收到只读数据请求,有主副本A来处理,主副本A发现是ReadOnly,就查询路由表,发现第一条符合,就把只读请求交给辅助副本B来处理 4.此时主副本A失效了,那么由AlwaysOn的高可用可知,会让辅助B作为了主副本,等原来的主副本A恢复之后,让A成为新的辅助副本(当然这些对客户端是透明的) 5.副本A恢复之后,再发送一条只读请求 6.此时侦听器使用主副本B来处理这个请求,如果不像上面的设置方法,就找不到B到A的路由,也就不能实现所谓的高可用