【问题标题】:Failover with mongodb使用 mongodb 进行故障转移
【发布时间】:2013-01-25 18:59:13
【问题描述】:

我必须设置一个可以处理故障转移的数据库(如果一个崩溃另一个接管)。为此,我决定使用 mongodb: 我设置了一个包含两个实例的副本集。每个实例都在单独的 VM 上运行。我有几个问题:

  • 建议在一个副本集中至少使用 3 个实例。只用两个可以吗?

  • 我有两个实例,然后是两个 IP 地址。我应该为需要在数据库中读/写的应用程序提供哪个 IP?当数据库宕机时,如何将请求重定向到仍在运行的实例?

一些帮助开始会很棒!

【问题讨论】:

    标签: mongodb transparency replication failover


    【解决方案1】:

    建议在一个副本集中至少使用 3 个实例。只用两个可以吗?

    不,副本集的最低要求是三个进程 (docs),但第三个可能是 arbiter,即使它是 not recommended

    我有两个实例,然后是两个 IP 地址。我应该为需要在数据库中读/写的应用程序提供哪个 IP?当数据库宕机时,如何将请求重定向到仍在运行的实例?

    有两种选择:

    #1(推荐)

    您向驱动程序提供所有地址(有关详细信息,请访问docs),例如nodejs driver(与其他类似)。这样,驱动程序将直接知道所有或至少一个以上的实例,如果所有指定的实例都关闭,这将防止出现问题(请参阅#2)。

    var MongoClient = require('mongodb').MongoClient;
    
    MongoClient.connect('mongodb://[server1],[server2],[...]/[database]?replicaSet=[name]', function(err, db) {
    });
    

    #2

    您向驱动程序提供其中一个(可能是主要的),mongodb 将找出其余的。但是,如果您的应用在指定实例关闭时启动,驱动程序将无法找到其他实例,因此无法连接到 mongodb。

    【讨论】:

    • 太好了,不知道这是由驱动程序管理的。会玩一点!非常感谢!
    猜你喜欢
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    • 2011-11-15
    • 1970-01-01
    • 2015-01-29
    • 2019-06-08
    相关资源
    最近更新 更多