使用mongodb进行故障转移

时间:2013-02-10 15:18:17

标签: mongodb transparency replication failover

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

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

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

一些帮助入门会很棒!

1 个答案:

答案 0 :(得分:11)

  

建议在副本集中使用至少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。