MongoDB的故障转移

9
我必须设置一个可以处理故障转移的数据库(如果一个崩溃了,另一个会接管)。因此,我决定使用mongodb: 我用两个实例设置了一个副本集。每个实例在单独的虚拟机上运行。我有几个问题:
  • 建议在副本集中使用至少3个实例。只用两个可以吗?

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

一些帮助来开始工作将是很好的!
1个回答

12
建议至少使用3个实例来组成副本集。仅使用两个实例可以吗?
不行,副本集的最低要求是三个进程(docs),但第三个进程可以是arbiter,尽管这样not recommended
我有两个实例,然后有两个IP地址。我应该将哪个IP地址提供给需要读/写数据库的应用程序?当一个数据库宕机时,请求将如何重定向到仍在运行的实例?有两种选择:
你需要向驱动程序提供所有地址(有关更详细信息,请访问docs),例如使用nodejs driver(与其他驱动程序类似)。这样,驱动程序将直接知道所有实例,或者至少知道多个实例,这将防止出现问题,如果所有指定的实例都宕机(请参见#2)。
var MongoClient = require('mongodb').MongoClient;

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

#2

你提供其中一个(可能是主要的),MongoDB 将解析出其他副本集成员。但是,如果指定的实例已停机并且应用程序启动,则驱动程序将无法找到其他实例,因此无法连接到 MongoDB。


太好了,我不知道这是由驱动程序管理的。我会稍微尝试一下!非常感谢! - rmonjo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接