使用mongodb进行故障转移

rmo*_*njo 9 replication transparency failover mongodb

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

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

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

一些帮助入门将是伟大的!

Mat*_*ias 12

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

不,副本集的最低要求是三个进程(docs),但第三个可能是仲裁者,即使不建议这样做.

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

有两种选择:

#1(推荐)

您为驱动程序提供了所有地址(有关详细信息,请访问文档),示例包含nodejs驱动程序(与其他地址类似).这样,驱动程序将直接知道所有实例,或至少多于一个实例,这将在所有指定实例都关闭时防止出现问题(参见#2).

var MongoClient = require('mongodb').MongoClient;

MongoClient.connect('mongodb://[server1],[server2],[...]/[database]?replicaSet=[name]', function(err, db) {
});
Run Code Online (Sandbox Code Playgroud)

#2

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