使用 HAProxy 为镜像 SQL Server 提供容错功能

使用 HAProxy 为镜像 SQL Server 提供容错功能

我们正在为即将推出的 Web 产品构建生产环境。对于此堆栈,主 SQL Server 2008 将用于实时数据库操作,辅助 SQL Server 2008 将从主 SQL Server 获取其数据镜像(通过 SQL Server 的内置镜像功能)。我们将让 Report Service 针对辅助 SQL Server 运行,同时让它在主 SQL Server 不可用时处于热备用状态。

在应用程序层面,我们有两个选择:

  1. 在应用层实施故障检测,这样如果主 SQL Server 没有响应,我们的 DAL 就会访问辅助 SQL Server。或者
  2. 让应用层指向 VIP,并让 HAProxy 处理故障检测。

问题是,选项 2 是否可行?

注意:我们知道还有其他方法可以在数据库级别提供高可用性(例如集群),但我们的目标是寻找一种经济高效的解决方案。

答案1

“数据镜像”是什么意思?

您可以进行数据库镜像,在这种情况下,客户端(即您的 DAL)可以使用连接字符串中的 FailoverPartner 并遵循故障转移事件并连接到新主体。由于镜像不可用,您的报告将基于数据库快照而不是数据库本身运行。

您可以拥有一个故障转移群集,并且客户端首先连接到群集资源名称,并且它不知道首先要启动的活动节点主机名,但这不会让您访问备用伙伴上的任何数据。

您可以进行硬件镜像,但这是一个单独的主题。

有人说复制是一种选择,但我不属于那一派。

而且……差不多就是这样了。除了开发自己的内部数据镜像技术,不管那意味着什么。

更新

如果您使用数据库镜像,那么您只需在连接字符串中指定故障转移伙伴,请参阅将客户端连接到镜像数据库。您的应用程序必须在发生故障转移事件时处理事务一致性。故障转移事件将突然断开客户端连接,客户端代码中将引发异常。任何待处理的事务都将被中止。客户端代码必须重新连接,读取持久状态并从数据库中找到的状态恢复工作。正确编写的应用程序将优雅地处理此问题,而不会出现问题。

镜像始终处于脱机状态,无法访问。如果要在镜像上运行报告,则必须获取数据库快照并在快照上运行报告。必须定期刷新快照(删除并重新创建)。请参阅数据库镜像和数据库快照

网络层负载均衡器与镜像无关,也不能解决任何问题。

答案2

怎么样以上都不是?

请澄清一下您所说的镜像 SQL 服务器是什么意思。您是使用某种类型的 SAN 进行镜像,还是使用 SQL Server 的内置镜像功能?
我知道您如何在 Web 层使用 HAProxy,但为什么要对 SQL Server 这样做?SQL Server 还有其他受支持的 HA 选项,例如集群、镜像和复制。我会先研究一下这些。

相关内容