【问题标题】:How to fail over node.js timer on amazon load balancer?如何在亚马逊负载均衡器上故障转移 node.js 计时器?
【发布时间】:2015-05-08 22:25:03
【问题描述】:

我在 aws 负载均衡器下设置了 2 个实例。我在两个实例中都部署了 node.js Web 服务 + mongodb。负载均衡器可以很好地与 Web 服务配合使用。

但是,问题是我有一个计时器服务(仅限 node.js 服务)。这个计时器的行为是根据一些计算更新我的 mongodb。

我的问题是,我必须同时仅在一个 aws 实例(共 2 个)上运行此计时器服务 (timer.js)。并期望如果一个aws实例出现故障,那么另一个实例的计时器服务将会出现。

我知道 elb 不提供这种设施。有人可以帮我完成吗?

条件:一次只能使用亚马逊负载均衡器运行一个计时器服务。

谢谢。

【问题讨论】:

  • 我看不出 ELB 如何在这个问题中发挥作用?请你澄清一下。您的 timer.js 是否使用 URL 从 AWS 外部调用?
  • 嗨,格雷格,定时器服务仅在 aws 实例上。计时器不是网络服务。它对我来说就像调度程序一样工作。这就是为什么我在我的问题中提到 elb 对这种类型的计时器服务没有任何配置。但我想让定时器服务失败。如何完成?

标签: node.js amazon-web-services amazon-elb


【解决方案1】:

您必须自己使用支持原子操作的共享数据存储的锁定算法来实现这一点

或者,考虑在 Min:1, Max:1 的 Auto Scale Group 中启动“计时器”服务器,以便亚马逊保持其运行。这个实例可以是非常便宜的 t2.micro。它可以自行运行作业,也可以向负载均衡器发出 http 请求以在所需的内部运行作业。如果你这样做了,那么每个作业只有一个服务器会运行

【讨论】:

  • 谢谢 Max,我也在考虑在不同的服务器上设置我的计时器服务。微实例绰绰有余。但我的要求是为计时器服务进行故障转移。如果我把它放在单个微服务上,我将无法对其进行故障转移。你有什么建议?
  • 这就是它在自动缩放组中的原因。您可以设置某种监控来检测应用程序故障,并且 Auto Scaling 组会确保如果实例死掉,一个新实例会替换它
  • 是的。这也是有道理的。我们可以使用自动缩放。
  • 另外,我打算从我的 Web 服务创建手动运行状况检查,并将从我的第二个实例检查计时器的状态。如果出现任何故障,那么我将在我的第二个实例上启动计时器。这有意义吗?这是正确的方法吗?
  • 听起来会很复杂而且矫枉过正。也许使用一个服务线路 Pingdom 来监控实例,如果它出现故障,它会通过电子邮件发送给你。如果实例设计得好,应该不会有问题。
【解决方案2】:

像处理任何其他需要继续运行的“服务”一样处理这个不是更有意义吗?

新贵服务
running node.js server using upstart causes 'terminated with status 127' on 'ubuntu 10.04'
这家伙的文件路径不好,但他的新贵脚本看起来还不错

监控
Node.js (sudo) and monit

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    相关资源
    最近更新 更多