【问题标题】:Direct connection to mongo hidden instance in a replica set直接连接到副本集中的 mongo 隐藏实例
【发布时间】:2021-09-15 00:06:26
【问题描述】:

我有一个 Mongo 隐藏成员作为副本集的一部分,该副本集专用于报告和洞察(长时间运行的任务)等任务。我们使用 mongoose 5.7.4 直接连接到实例,如下所示:

mongoose.createConnection('mongodb://mongo-hidden-instance:27017/dbname',
   {
        useNewUrlParser: false,
        useUnifiedTopology: true,
        readPreference: "secondaryPreferred",
        socketTimeoutMS: 1800000
    }, cb);

我们可以正确连接到实例并运行我们的查询。但是,如果隐藏的实例断开了我们的连接,它一直保持活动状态,正在到达副本集的另一个成员。这种行为是我们没有预料到的,也是我们不想要的,我们只想在隐藏的实例上运行长时间的查询。

我怎样才能只连接到隐藏的实例,如果它出现错误而不是连接到副本集的另一个成员?

【问题讨论】:

  • 你试试secondary而不是secondaryPreferred
  • 即使secondary 正在连接到其他副本集成员。

标签: node.js mongodb mongoose


【解决方案1】:

正如 MongoDB 所说的 https://docs.mongodb.com/manual/core/read-preference/

secondaryPreferred :在大多数情况下,操作从辅助成员读取,但如果没有辅助成员可用,则操作从分片集群上的主成员读取。

secondary:从副本集的从属成员读取的所有操作。

所以你需要改变

        readPreference: "secondaryPreferred",

        readPreference: "secondary",

【讨论】:

  • 我尝试过,但仍在连接到辅助实例,即使唯一带有选项 secondaryOk = true 的实例是隐藏实例。我只需要连接到隐藏实例并在隐藏实例关闭时得到错误。我不想在不是隐藏的辅助设备上运行长时间查询。
猜你喜欢
  • 2015-09-26
  • 2013-03-30
  • 2016-12-09
  • 2021-10-30
  • 1970-01-01
  • 1970-01-01
  • 2017-01-05
  • 1970-01-01
  • 2020-07-14
相关资源
最近更新 更多