SQL Server AlwaysON 从多个辅助读取
Posted
技术标签:
【中文标题】SQL Server AlwaysON 从多个辅助读取【英文标题】:SQL Server AlwaysON read from multiple seconderies 【发布时间】:2017-01-31 11:14:27 【问题描述】:我在我的一个环境中配置了永远在线。
SQL1 = Primary
SQL2 = Slave1 (readonly)
SQL3 = Slave2 (readonly)
我的问题: 我希望我的应用程序将从两个从属服务器中读取数据(例如 SQL2 和 SQL3,以防它们是从属服务器,而 SQL1 是主服务器)。
有可能吗,如果可以,我是怎么做的
我已经配置了路由表 Like:
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
10X
【问题讨论】:
你已经完成了路由 url,但是你启用了可读的辅助文件 什么意思,启用它? 您是否使您的辅助设备可读 我附上了问题 AG properties 。这就是你说的? 我看不到图像(它们被阻止了)..您现在面临的问题是什么..我也没有看到任何问题,因为您启用了只读路由列表 【参考方案1】:我希望我的应用从两个从属服务器读取数据(例如 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,第四个只读连接会被路由到SQL16N2等
参考资料:https://blogs.msdn.microsoft.com/alwaysonpro/2016/05/02/sql-server-2016-alwayson-availability-group-enhancements-load-balance-read-only-routing/
【讨论】:
仅适用于企业版。标准不允许读取辅助文件。【参考方案2】:您需要创建一个监听器。它是一个虚拟网络名称,客户端可以连接到该名称以访问 Always On 可用性组的主要或次要副本中的数据库。
在此处阅读有关 AG 的更多信息https://msdn.microsoft.com/en-us/library/hh213417.aspx#AGlisteners
【讨论】:
是的,我设置了一个监听器! 如果为一个或多个可读辅助副本配置了只读路由,则与主副本的读取意图客户端连接将重定向到可读辅助副本。从链接中阅读更多内容... 从你所说的,我知道来自应用程序的流量将在奴隶之间分配。在我的 SQL2 和 SQL3 之间的示例中? 是的,如果请求是只读的,那么它不会 ping 主节点,而是从节点(从节点)。路由和管理由 AlwaysOn 自动完成。 你确定吗?不是仅来自 SQL 2016 吗? (我有 2012 SP1 企业版)以上是关于SQL Server AlwaysON 从多个辅助读取的主要内容,如果未能解决你的问题,请参考以下文章
基于Windows 2012配置SQL Server 2014 AlwaysOn
SQL Server 2012 标准版是不是能搭建alwayson
利用HAProxy代理SQL Server的AlwaysOn辅助副本