故障服务的挑战和最佳实践

Joh*_*ohn 7 design-patterns windows-services high-availability

有没有人知道运行Windows服务的任何已建立的最佳实践(在我的情况下,在.NET中开发),以便它们(自动)正确地故障转移到另一台服务器,以实现高可用性?

我可以看到这样做的主要方式是在需要时启动辅助服务器(在这种情况下需要监视其他服务器的东西),或者让两个服务一起运行(在这种情况下,他们需要同步他们的工作所以他们不会尝试做同样的事情).

是否存在针对此类问题的模式或模型?我知道确切的情况会产生很大的不同,但这似乎是一个相当普遍的问题.

谢谢

约翰

Wal*_*ter 3

这对我有用。

从基础设施的角度来看,您将需要有 2 个集群 Windows 服务器。(2 个标准 Windows Server 盒子就可以了,可以安装和配置集群部分,大多数系统管理员应该知道如何执行此操作。)接下来,在集群的两个节点上安装您的服务,并将它们都关闭并设置为手动启动。接下来,将群集资源添加到您的服务的 Windows 群集管理器中,该服务将管理在任何活动节点上打开和关闭服务。让 Windows 集群管理您的服务何时运行以及在哪个节点上运行。这是集群服务中最简单的部分。

从服务的角度来看,您将希望设计您的服务,使其尽可能无状态。这是一种蹩脚的建议,但这实际上取决于您的服务正在做什么。在设计中,假设在代码生命周期的某个时刻它将在最糟糕的时间停止。Node2 上的服务如何知道从 Node1 停止的地方继续执行?这是您需要设计的最困难的部分。根据您的服务正在执行的操作,您可以将最后完成的任务保留在数据库表或共享数据文件中。您也可以让它从头开始,并在执行任务之前仔细检查该任务是否已完成。

同样,这实际上取决于服务需要完成什么。希望这可以帮助。