有谁知道运行Windows服务的任何已建立的最佳实践(在我的情况下,以.NET开发),以便(自动)出于高可用性目的将(自动)正确地失效到另一台服务器?

我可以看到的主要方法是在需要时启动辅助服务器(在这种情况下,需要监视另一个服务器),或者两者一起运行(在这种情况下,他们需要同步他们的工作,因此他们不尝试做同样的事情)。

是否有这种问题的模式或模型?我知道确切的情况会产生很大的不同,但这确实是一个相当普遍的问题。

谢谢

约翰

有帮助吗?

解决方案

这是对我有用的东西。

从基础架构站点来看,您需要拥有2个群集的Windows服务器。 (2个标准的Windows Server框,可以安装和配置群集件,大多数系统管理员应该知道如何执行此操作。启动。接下来,将群集资源添加到Windows群集管理员的服务中,该服务将在哪个节点处于活动状态下管理和关闭服务。让Windows群集在服务运行以及在哪个节点上进行管理。这是聚集服务的简单部分。

从服务角度来看,您将需要设计您的服务,以便它尽可能无状态。这是一种la脚的建议,但实际上取决于您的服务在做什么。在设计中,只需假设在代码的生命周期中,它将在最糟糕的时间停止。 Node2上的服务将如何知道node1离开的位置?这是您需要设计的困难部分。根据您的服务正在做什么,您可以将最后一个完成的任务留在数据库表或共享数据文件中。您也可以从一开始就开始并仔细检查该任务是否已完成之前。

同样,这确实取决于服务需要完成的工作。希望这可以帮助。

其他提示

始终运行两者可能是最简单的解决方案,但是您需要确保您永远不会超过50%的负载,否则,当一个失败时,另一个人也会过载,也许也会失败。

要同步,请使用交易数据库。尝试编写自己的同步通常会导致错误。

如果您可以使用这两种服务,那就更好了。您需要确保它们无状态或知道如何处理状态问题,并且数据在它们之间将同步。在没有单个故障的地方 - 您将把问题推向数据库,在那里您可以拥有一个2个节点主动群集,并让DB制造处理同步问题。

我相信处理故障转移的最佳方法是尽可能在网络级别。虚拟IPS前面负载平衡或主/故障转移环境是避免为故障转移方案编写代码的好方法。

如果您必须处理代码故障转移的情况:

  1. 测试连接/服务电话
  2. 如果测试失败,请发送警报
  3. 失败到下一个“注册”服务端点

有两种基本方法。

  1. 客户知道不同的端点地址,并根据需要或按照其他服务或配置机制进行切换。 (例如 Stocktrader演示申请 做这个。)

  2. 客户不知道,您使用标准的网络负载平衡方法,该方法也可以提供故障转移。 F5是一种产品。还有很多。基本上,就像服务的NAT一样,所有请求都通过您的NLB,并将其发送到服务器,并将响应转发回呼叫者。这些产品监视服务,仅使用已上涨的服务。另外,您通常可以使用规则自定义它,以使其基于服务器工作负载为服务器分配新请求。 Windows Server有此 功能在某种程度上内置。

无论哪种方式,如果您的服务呼叫是“无状态”,则要容易得多。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top