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辅助副本

SQL Server Alwayson创建代理作业注意事项

SQL Server 2012 AlwaysOn 高可用 主切换到辅(从)的时候,怎么在主的实例上做备份

SQL Server Alwayson概念总结