繁体   English   中英

最佳实践:如何检测SQ​​L Server是否可用以及是否进行故障转移

[英]Best practice: How to detect if a SQL Server is available and failover if not

我正在寻找一种方法来检测SQL Server是否无法响应(超时/异常等),以便如果我们尝试访问服务器的C#/。net程序要求关闭服务器进行维护,它将跳出并尝试另一台服务器自动。

我想要一个解决方案,其中我们进行SQL连接,然后获得超时。 我们可以构建一个WCF服务并要求该服务,但是我认为这有点过头了。

多个服务器位置之间的同步在这里不是问题。

目前,我们的开发平台是SQL2008express,因为目前它已经足够了,但是稍后我们可能会切换到真正的SQL2008服务器(或时机成熟的任何服务器)。

客户端将连接到“最新动态列表”中的“第一已知”,要求“ rootserver”或硬编码配置进行首次查找。

当客户端失去连接时,他们将必须自动尝试重新连接到群集中的其他节点,并使用首先返回答复的任何内容。 节点将通过我们也分布在云中的其他服务单独连接并共享数据。

我们知道可以通过大许可证获得镜像和群集功能,但是我们的设置需要更动态的“链接”,并且我们相信这种方法更适合我们的需求。

所以...具体来说:

我们需要检测SQL服务器何时脱机,何时不再可用。 例如。 在交易过程中或尝试连接时。

是执行“尝试捕获”异常处理的最佳方法,还是在查看WAN并使用C#/。net时有更好的技巧?

编辑

我已经收到了许多使用故障转移服务器的好主意,但是我想采用一种更具编程性的方法,那么查询服务器(如果可用)的最佳方法是什么?

情况:在单独的WAN / IP上运行的4个不同的SQL服务器,每个SQL Server都维护一个“其他位置”(对等)列表。 它们将自动相互移动数据(非常类似于RAID设置,其中数据分散在多个驱动器上)

客户端从入口点服务器重试该列表,并要求第一个可用。 如果客户端要求“关闭维护服务器”或数据已移至其他服务器之一,则它必须自动询问列表中的下一个服务器。

我们正在寻找..

是从C#/。net内部检测服务器当前不可用的最佳方法。

  1. 我们可以连接到一个服务,当我们松开它时,服务器关闭
  2. 我们可以创建一个“ dbConnectionSqlServer3.open()”并等待超时。
  3. 我们可以投资“真正的集群服务器”,并付出很多代价,并将自己绑定到一种SQL服务器类型(SQL平台将来可能会更改,因此这不是一个真正的选择)

那么您在这里的投票数是1还是2? 还是可以提出一个比创意高出4的数字? :O)

在ConnectionString中,您可以指定故障转移伙伴,例如

Data Source=<MySQLServer>;Failover Partner=<MyAlternateSQLServer>;Initial Catalog=<MyDB>;Integrated Security=True

http://www.connectionstrings.com上有一节谈论数据库镜像。

我可能会采取另一种方法。

我将指定一台服务器(具有故障转移伙伴)作为服务器列表的持有人。 它应该监视所有其他服务器的可用性。

当客户端最初想要连接时,它应联系列表服务器并询问其使用什么。 从那时起,除非发现故障,否则客户端应坚持使用。 此时应与列表服务器联系以获取新的服务器。

只需告诉客户端要连接到哪个客户端,列表服务器就可以实现所需的任何类型的负载平衡。 此外,部署新服务器将很容易,因为唯一的“列表”将由该主服务器维护。

这完全忽略了您可能遇到的任何服务器同步问题。

一个主要的好处是,通过使用中央服务器进行监视,您的客户端不必为了找到正常的服务器而掉入3、5或10个服务器。 这将增加响应速度。

UPDATE
@BerggreenDK:检测服务器是否发生故障的最好且可能唯一有保证的方法是连接到服务器并运行简单查询。 所有其他机制,例如ping,简单检查端口是否打开等,都可能导致误报。 如果服务器本身已启动但SQL Server已关闭(例如:数据库处于脱机状态),则即使在该服务器本身上运行进程也可能会产生错误的读数。

最终,听起来您的客户端将必须连接到其中一个网关服务器,并获得一小段试图连接的sql服务器。 如果失败,它将不得不轮流浏览该简短列表。 如果所有操作均失败,则必须返回网关并要求提供新列表以重新开始该过程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM