在2个独立的数据中心同步2个NodeJS实例和PostgresSQL

我们目前有一个NodeJS程序从套接字中收集数据,该套接字从一个其他服务发送实时信息。

然后这个数据被存储在上述实例中的数据库中。 这个过程只是听stream。 将对象parsing出来,然后用这些信息更新数据库。

另一个服务可以简单地从数据库中读取数据。 这是我们的用户对信息进行的调查。

我的问题是:

我如何确保这个代码的2个实例正在运行,并保持运行在2个独立的数据中心? 所以如果有一个实例出现故障,则只需开始更新数据库。 当我们修复另一个过程。

在这里,我在想:

  1. 正在考虑运行2个PosgresSQL服务器,每个数据中心一台。 在主和备用模式下运行。 这将使两个数据中心的Web服务能够从数据库中读取数据,但在主服务器还在运行时不会更新它。 给我唯一一个我想要的更新。

  2. 但另一个问题是如果NodeJS实例死亡。 那么我无法知道? 我可以实施一个心跳系统,但必须有一个更好的?

  3. 同时考虑运行带有队列的Rabbit MQ服务,但这给我一个单点故障。

一直在思考这一点,但似乎无法find一个可行的架构。 有什么build议?

基本上这样或那样的一种方式,你需要有一些在头解决scheme(亲切地称为STONITH)拍摄其他节点。 这可以从某种心跳程序启动或手动启动。 理想情况下,你有两个方面:

  1. 拍摄头部的其他节点。 把它从图片中拿出来。 让它停止。

  2. 将stream量直接转到运行节点。

如果我想这样做,我会看几层。 在某些types的故障中(让我们称它们为致命故障),您的nodejs实例将启动故障转移过程,然后退出。 如果validation停止响应,则心跳将启动故障切换并终止进程。