我们正在为即将推出的网络产品构建我们的生产环境.对于此堆栈,主sql Server 2008将用于实时数据库操作,而辅助sql Server 2008将从主sql Server镜像(通过sql Server的内置
Mirroring功能).我们将针对辅助sql Server运行报表服务,同时在主sql Server不可用时具有热备用.
在应用程序级别,我们有2个选项:
>在应用层中实现故障检测,因此如果主sql Server没有响应,请让我们的DAL命中辅助sql Server.要么
>让应用层指向一个VIP并让HAProxy处理故障检测.
问题是,选项#2是可行的选择吗?
解决方法
‘data mirrored’是什么意思?
您可以拥有数据库镜像,在这种情况下,客户端(即您的DAL)可以在连接字符串中使用FailoverPartner并遵循故障转移事件并连接到新的主体.由于镜像不可用,您的报告将运行数据库快照,而不是数据库本身.
您可以拥有故障转移群集,并且客户端连接到群集资源名称以开始,并且它不知道要开始的活动节点主机名,但是这不会让您访问备用伙伴上的数据.
您可以拥有硬件镜像,但这是一个单独的主题.
有人说复制是一种选择,我不在那个阵营.
并且……几乎就是这样.无论这意味着什么,都没有酿造自己的内部数据镜像技术.
更新
如果使用数据库镜像,则只需在连接字符串中指定故障转移伙伴,请参阅Connecting Clients to a Mirrored Database.您的应用程序必须在故障转移事件面前处理事务一致性.故障转移事件将突然断开客户端连接,并且将在客户端代码中引发异常.任何待处理的交易都将中止.客户端代码必须重新连接,读取持久状态并从数据库中找到的状态恢复工作.正确编写的应用程序将优雅地处理此问题而不会出现问题.
镜像始终处于脱机状态且无法访问.如果要在镜像上运行报告,则必须获取数据库快照并在快照上运行报告.必须定期刷新(删除并重新创建)快照.见Database Mirroring and Database Snapshots.