假设以下情况:
- 2 台机器(可以更多,但 2 台就很棒了)
- 它们的配置完全相同(安装了相同的服务)
- 他们可以在网络中互相看到对方
是否有一个服务可以安装在两台机器上,并且经常对另一台机器上的相同服务进行活动检查?如果它们都能看到对方,则优先级最高的那个服务将获胜,并将启用(或保持启用状态)所有已注册的正在运行的进程。另一个服务将停止其机器上所有已注册的服务。
一旦高优先级机器出现故障,另一个系统将检测到并启动服务。
简而言之:故障转移服务
我尝试在谷歌上寻找类似的东西,但没有找到任何东西。
我热衷于寻找一个现有的解决方案,否则我必须自己想办法。
答案1
如果您想要一个合适的解决方案,您应该查看 MSCS(如果您有共享存储)或 NeverFail/WanSyncHA/DoubleTake(谷歌搜索并查看白皮书)手动脚本对于基本和非常原始的东西来说是可以的,但如果它们无法调解共享访问,或者无法检测裂脑并避免它,它们可能会导致严重的数据损坏。
答案2
您可以完全自行实施,也许是一个 powershell 脚本和一个计划任务。
否则,您可以考虑使用 Microsoft Clustering。您可能需要做一些研究来查看您的服务是否支持它,它提供了一些其他功能,这些功能可能更难自己构建。例如故障回复、资源分组(您的服务、服务的存储、注册表项、网络)。
答案3
好的...我自己动手了。
制作了一个小型 .Net 服务应用程序,它的功能与我描述的一样。带有一些系统日志通知,并且能够在发生故障转移时通过短信通知人们。
我会查看并尝试将其发布到 codeplex 或 sourceforge 上,以供其他人使用/构建
当这种情况发生时,我会在评论中发布网址