【问题标题】:Requery from failed mongo replica instance从失败的 mongo 副本实例重新查询
【发布时间】:2014-03-14 10:45:47
【问题描述】:

我有一个在集群中运行的节点应用程序和一个包含 3 个实例的 mongo 副本集。 应用程序使用本机 mongodb 驱动程序 (https://www.npmjs.org/package/mongodb)。 当 mongo 实例执行查询失败(崩溃或连接问题)时,客户端会收到 500 错误。是否可以将失败的查询重定向到另一个 mongo 实例?

对不起我的英语)

【问题讨论】:

  • 最好的方法是感知故障引发的异常,然后针对该故障采取行动

标签: node.js mongodb replication high-availability


【解决方案1】:

如果主节点崩溃,那么根据定义,它将无法将您指向另一个次节点。您必须处理代码中的辅助端点。我不使用mongodb native,只是mongoose,但seudocode会是

var connection=new connection(primary server);
var query="{...}";

connection.runquery(query,function(err,response) {
    if(err) {
        console.log('Error, will retry with secondary');
        var connection2=new connection(secondary server);
        connection2.runquery(query,function(err2, response2) {
            if(err2) {
                console.log('Error, replica secondary is also down. OMG');
            } else {
                console.log(response2);
            }
        }
    } else {
        console.log(response);
    }
});

【讨论】:

  • 感谢您的回复。我在 replSet 中使用了“secondaryPreferred”选项。提出的方法可以工作,但它就像新的驱动程序实现,而且重写和支持所有错误处理程序的重新查询功能的成本太高。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-08
  • 1970-01-01
  • 2021-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多