我在其中一个环境中配置了永远在线。
SQL1 = Primary
SQL2 = Slave1 (readonly)
SQL3 = Slave2 (readonly)
我的问题:
我希望我的应用程序将从两个从属服务器读取(例如SQL2和SQL3,如果它们是从属服务器而SQL1是主服务器)。
是否有可能,如果可以,我是怎么做的
我已经配置了路由表,如:
ALTER AVAILABILITY GROUP [AG1]
MODIFY REPLICA ON N'SQL1' WITH
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://SQL1.aws.ir:1433'));
GO
ALTER AVAILABILITY GROUP [AG1]
MODIFY REPLICA ON N'SQL2' WITH
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://SQL2.aws.ir:1433'));
GO
ALTER AVAILABILITY GROUP [AG1]
MODIFY REPLICA ON N'SQL3' WITH
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://SQL3.aws.ir:1433'));
GO
ALTER AVAILABILITY GROUP [AG1]
MODIFY REPLICA ON N'SQL1' WITH
(PRIMARY_ROLE(READ_ONLY_ROUTING_LIST = (N'SQL2',N'SQL3')))
GO
ALTER AVAILABILITY GROUP [AG1]
MODIFY REPLICA ON N'SQL2' WITH
(PRIMARY_ROLE(READ_ONLY_ROUTING_LIST = (N'SQL1',N'SQL3')))
GO
ALTER AVAILABILITY GROUP [AG1]
MODIFY REPLICA ON N'SQL3' WITH
(PRIMARY_ROLE(READ_ONLY_ROUTING_LIST = (N'SQL1',N'SQL2')))
GO
答案 0 :(得分:0)
您需要创建一个监听器。它是客户端可以连接的虚拟网络名称,以便访问Always On可用性组的主副本或副本副本中的数据库。
在此处阅读有关AG的更多信息https://msdn.microsoft.com/en-us/library/hh213417.aspx#AGlisteners
答案 1 :(得分:0)
我希望我的应用程序将从两个从属服务器读取(例如SQL2和SQL3,如果它们是从属服务器而SQL1是主服务器)
这是不可能的,除非你在SQL2016 ..
SQL Server 2104和SQL 2012只读路由将流量路由到路由列表中的第一个可用副本,除非它不可访问,然后它会将连接定向到路由列表中的下一个副本。
如果有多个辅助副本可供读取,则无法在这些副本之间分配读取负载。
但是在2016年,您可以在一组只读副本中配置负载平衡。
例如,
ALTER AVAILABILITY GROUP ag
MODIFY REPLICA ON N’SQL16N1′
WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=((‘SQL16N3’, ‘SQL16N2’), ‘SQL16N1’)));
在上面的路由列表中
第一个传入的只读连接将路由到SQL16N3,第二个只读连接将路由到SQL16N2,第三个只读连接将路由到SQL16N3,第四个只读连接将路由到SQL16N3 SQL16N2,等等