我有 6 个 SQL Server 实例,需要通过托管在两个站点(一个作为主站点,一个作为 DR)来实现高可用性。需要透明的自动故障转移。大多数实例相当无聊,而且做不了什么,其中两个实例大量用于写入。
最繁忙的数据库平均每分钟处理 400,000 个事务,峰值达到 900,000 个事务,每天生成约 10 GB 的新数据。
两个站点相同,均具有 netapps 15k SAS iscsi sans。
目前我们有win server 2003,sql server standard 2005。同步镜像太慢了,每个事务都会增加2ms。
我已成功说服客户购买 Windows Server 2008 和 SQL Server Enterprise 2008,以便在两个站点之间建立故障转移群集(每个群集中有一个节点),并使用 Netapps 进行跨站点复制。
如何使用每个站点一台服务器来实现双站点 HA?
谢谢
答案1
如果需要真正透明的自动故障转移,并且您无法处理每个事务 2ms 的开销,那么最好的选择可能是使用非常好的负载平衡器前端(如 F5 Big-IPs)进行双向复制。这样两个 SQL Server 都可以随时使用。
双向复制有很多缺点 - 模式更改可能很棘手,您必须重新设计您的身份字段(不同的种子、奇数/偶数增量),并且它不能自我修复。您需要监控以了解复制何时发生故障,并且您需要一个 24/7 团队在发生故障时快速采取行动,因为如果客户在两个节点上看不到一致的数据,他们不会满意。某些故障还可能导致数据在一个节点上而不是另一个节点上。例如,如果复制停止工作,然后 10 分钟后整个服务器都瘫痪了,那么第二台服务器将看不到这 10 分钟的数据,直到您恢复主服务器并修复复制。
答案2
没有什么是 100% 透明的。故障转移群集在另一个节点停止和启动期间会造成停机。如果应用程序具有群集感知能力和/或具有重试逻辑,则不是问题。实例名称保持不变,因此在该级别上群集是透明的。
复制和日志传送具有不同的服务器名称(源/目标),因此您需要采用某种技术/别名/任何东西来抽象名称更改和/或能够更改应用程序配置(假设它们没有硬编码名称)。数据库镜像有一个有点类似的故事,但如果应用程序编码为 SNAC,您可能能够使用 Witness 的自动故障转移。
DBM/log shipping/repl 还要求您同步数据库之外的对象,并确保备用数据库具有运行所需的一切(包括实例级别的登录)。
因此,只有具有见证和高安全性的故障转移群集和 DBM 才能为您提供自动故障转移。这并不一定意味着透明。
没有绝对正确的方法可以做到这一点。这取决于您的要求(包括总体 SLA、RTO 和 RPO)。
如果您遇到镜像问题,则可能是 I/O 和/或网络问题。也可能与 SQL 无关。因此,在考虑新架构时,请确保评估解决方案的所有级别。
答案3
我建议您考虑将文件共享见证与 Windows Server 2008 中的群集结合使用(我记不清是否需要 R2。)我个人没有这样做过,但去年夏天我花了一些时间研究它。
如果人们相信营销并且 Netapp 拥有合适的软件,它应该提供站点到站点的故障转移。它能否处理这些交易量令人担忧,但责任在于 Netapps 以及将它们连接在一起的任何东西。
请注意,如果没有用户应用程序本身的支持,“透明自动故障转移”可能无法实现。如果您已经在进行镜像,这可能不是问题。