node.js - 使用 PostgreSQL 在 2 个独立的数据中心同步 2 个 NodeJS 实例

标签 node.js postgresql replication high-availability

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

此数据然后由上述实例存储在数据库中。这个过程只是监听流。解析出对象,然后用信息更新数据库。

然后另一个服务可以简单地从数据库中读取数据。这是我们的用户轮询的信息。

我的问题是:

我如何确保此代码的 2 个实例正在运行并在 2 个独立的数据中心中保持运行?因此,如果一个实例出现故障,另一个实例就会开始更新数据库。当我们修复另一个过程时。

这是我的想法:

  1. 正在考虑运行 2 个 PosgresSQL 服务器,每个服务器一个 数据中心。在主模式和备用模式下运行。这将启用 两个数据中心的网络服务从 数据库,但在 master 还活着的时候不更新它。给我 我想要的唯一更新。

  2. 但另一个问题是如果 NodeJS 实例挂掉了怎么办。然后我 有没有办法知道?我可以实现心跳系统但是 必须有更好的吗?

  3. 还考虑过使用队列运行 Rabbit MQ 服务,但这给了我一个 单点故障。

考虑了一段时间,但似乎找不到可行的架构。有什么建议吗?

最佳答案

基本上,无论哪种方式,您都需要某种解决方案中的 Shoot The Other Node In the Head(亲切地称为 STONITH)。这可以从某种心跳程序或手动启动。理想情况下,您有两个方面:

  1. 射击另一个 Node 的头部。把它从照片中拿出来。让它停止。

  2. 将流量定向到正在运行的 Node 。

如果我尝试这样做,我会查看多个图层。在某些类型的故障中(我们称它们为致命故障),您的 nodejs 实例将启动故障转移过程,然后退出。如果验证停止响应,heartbeat 将启动故障转移并终止进程。

关于node.js - 使用 PostgreSQL 在 2 个独立的数据中心同步 2 个 NodeJS 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16335545/

相关文章:

javascript - 重新格式化日期正则表达式

python - 使用 sqlalchemy 创建一个 db.Sequence

postgresql - 如何使用 SpringBoot + JPA 存储 PostgreSQL jsonb?

mysql在log位置停止slave

javascript - 测试后连接未关闭?

javascript - TesserActJS错误: UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'send' of null

javascript - AngularJS - 从无序列表中省略用户

ruby-on-rails - 为用户搜索添加邻近过滤器

postgresql - 使用 PostgreSQL 从从站恢复故障主站的过程是什么?

mongodb - 为什么我们在 MongoDB 复制中需要一个 'arbiter'?