在2个独立的数据中心同步2个NodeJS实例和PostgresSQL
我们目前有一个NodeJS程序从套接字中收集数据,该套接字从一个其他服务发送实时信息。
然后这个数据被存储在上述实例中的数据库中。 这个过程只是听stream。 将对象parsing出来,然后用这些信息更新数据库。
另一个服务可以简单地从数据库中读取数据。 这是我们的用户对信息进行的调查。
我的问题是:
我如何确保这个代码的2个实例正在运行,并保持运行在2个独立的数据中心? 所以如果有一个实例出现故障,则只需开始更新数据库。 当我们修复另一个过程。
在这里,我在想:
-
正在考虑运行2个PosgresSQL服务器,每个数据中心一台。 在主和备用模式下运行。 这将使两个数据中心的Web服务能够从数据库中读取数据,但在主服务器还在运行时不会更新它。 给我唯一一个我想要的更新。
-
但另一个问题是如果NodeJS实例死亡。 那么我无法知道? 我可以实施一个心跳系统,但必须有一个更好的?
-
同时考虑运行带有队列的Rabbit MQ服务,但这给我一个单点故障。
一直在思考这一点,但似乎无法find一个可行的架构。 有什么build议?
基本上这样或那样的一种方式,你需要有一些在头解决scheme(亲切地称为STONITH)拍摄其他节点。 这可以从某种心跳程序启动或手动启动。 理想情况下,你有两个方面:
-
拍摄头部的其他节点。 把它从图片中拿出来。 让它停止。
-
将stream量直接转到运行节点。
如果我想这样做,我会看几层。 在某些types的故障中(让我们称它们为致命故障),您的nodejs实例将启动故障转移过程,然后退出。 如果validation停止响应,则心跳将启动故障切换并终止进程。