在Nomad中实现双服务器故障转移

105次阅读
没有评论

问题描述

刚开始学习关于编排工具的知识,第一次尝试使用编排工具(在这种情况下是Nomad)。他们的软件(与视频流处理相关)安装在用户的设备上,目前使用docker compose来部署该软件(一堆作为Docker容器的服务)。

现在有一个客户需要故障转移,并为他们提供了两台物理服务器,一台用作主服务器,另一台用作故障转移服务器。他们想要的是在两台服务器上都安装我们的服务,但只有在主服务器出现故障时才在故障转移服务器上运行这些服务。

他们不希望对他们的代码进行任何更改。他们有一个处理视频流并引发事件(VA服务)的服务,以及另一个处理数据库、用户、事件等(客户服务)的服务。客户服务知道这个VA服务,并为其分配工作。他们不希望在主服务器运行时在故障转移服务器上运行这些服务,因为这将导致流程被处理两次,即产生重复事件。

他们正在将数据库配置为主-主模式,以便在主服务器故障时在故障转移服务器上提供数据(在PostgreSQL上尝试,之前在MySQL上进行过类似操作)。

他们在两台机器上都配置了Nomad,每台机器上都有Nomad服务器和客户端,然后尝试配置它们,以便如果具有Nomad主服务器的机器及其客户端关闭,故障转移上的Nomad服务器应该接管并在其客户端上运行任务,但他们无法实现这一点。如果关闭主服务器,则在故障转移机器上什么都不会发生。

问题列表:
1. Nomad是适用于这种情况的合适工具吗?
2. 如何使用Nomad实现我正在尝试的目标?

解决方案

请注意以下操作注意版本差异及修改前做好备份。

Nomad的适用性

首先,让我们来解决第一个问题。Nomad是一款用于编排和调度应用程序的工具,它可以用于在集群中管理任务的部署和执行。根据您的描述,Nomad似乎是一个合适的工具,可以帮助您管理和部署应用程序。然而,您在配置上可能存在一些问题,我将在下面的解决方案中详细说明。

实现目标的步骤

在您的情况下,您希望在故障转移服务器上运行应用程序,仅当主服务器故障时才会这样做。这要求您正确配置Nomad任务以及它们的调度和故障转移行为。

以下是一些步骤,可以帮助您实现您的目标:

  1. Nomad集群配置: 首先,确保您的Nomad集群配置正确。您在提供的配置中已经有两台Nomad服务器,但需要注意以下几点:

  2. 配置一个含有多于两台服务器的集群可以增加容错性。通常,Nomad服务器集群的节点数量至少应为3个,以便在某个节点发生故障时保持足够的投票数量。

  3. 确保您的集群中至少有一个Nomad服务器处于活动状态,这样它才能够继续进行任务的调度和管理。

  4. Nomad任务配置: 为您的应用程序创建Nomad任务,使其能够在您的服务器上运行。每个任务都应该对应一个服务(如VA服务和客户服务)。任务的配置应该包括以下几个方面:

  5. 使用grouptask来定义任务的分组和配置。您可以为VA服务和客户服务各自定义一个任务。

  6. 对于需要高可用性的任务,可以使用count字段设置任务的实例数量,以便将任务在多个节点上分散部署。
  7. 使用reschedulerestartcheck_restart等参数来处理任务的故障转移和重启。这些参数可以在任务失败或死亡时重新调度或重启任务。

  8. 任务依赖关系: 如果VA服务依赖于客户服务,则确保在Nomad任务配置中正确定义这些依赖关系。这样,在故障转移服务器上运行时,Nomad将确保在客户服务之前启动VA服务。

  9. 避免重复事件: 根据您的需求,您希望在主服务器和故障转移服务器上的应用程序不重复处理事件。Nomad的默认行为是在每个任务的一个实例上运行,但您可以通过调整任务配置来避免处理重复事件。确保每个任务实例都有一个唯一的标识,以便您的应用程序可以识别并避免重复事件的产生。

  10. 定期测试和演练: 一旦您的Nomad任务配置完成,定期进行测试和演练以确保您的故障转移方案能够按预期工作。模拟服务器故障和恢复情况,观察Nomad的行为是否与您的预期一致。

总结

在本解决方案中,我们讨论了使用Nomad来实现双服务器故障转移的步骤。您可以通过正确配置Nomad集群、创建适当的任务配置以及处理任务的故

正文完