如何在AWS中的NodeJS中编写Mongo Replicas脚本

我有3个服务器都运行Mongo作为副本集,1个主副本和2个副本。

如果一个失败,我的自动比例将杀死实例,并使用用户数据重新启动服务器重新安装软件包。

我怎么能通知主(新的或旧的),实例已经复活,因为它将有一个新的私有IP地址(你不能分配静态私有IP的自动调整/启动configuration)

我似乎无法在Mongoose或Mongo Node Driver的最新版本中find一种方法来告诉主要有一个想要join的新实例。

我可以通过访问Mongo shell并传入来手动执行此操作

rs0:PRIMARY> rs.add("10.23.229.17"); 

它将被添加,并且数据将同步。 但是,我怎样才能通过节点驱动程序或Bash脚本rs.add?

更新

我发现这个post非常有用, 我可以使用MongoDb驱动程序从node.js调用rs.initiate()和rs.Add()吗?

基本上, 这是所有数据库命令的列表。 虽然我找不到任何包装好的东西,但使用命令方法很容易:

 var MongoClient = require('mongodb').MongoClient; MongoClient.connect('mongodb://10.23.223.231', function(err, db) { if (err) { console.log('error', err); } else { var adminDb = db.admin(); //use any command from https://goo.gl/0oh6H5 adminDb.command({ replSetGetConfig: 1 }, function(err, info) { if (!eer) { console.log(info); } }); } }); 

你想做的事情在很多方面都是错误的,我不知道从哪里开始。 并坚持技术的。

首先,如果您只是简单地向副本集添加一个新节点,那么通过configuration,副本集中将有4个节点,只要所有剩下的三台服务器都在运行就可以了。 但现在,一旦失败,你立即松动法定人数,副本集将恢复到第二状态,使写不可能。

您添加另一个节点,根据configuration将数目增加到5个节点。 上述规则同样适用。 现在,您添加了第六个节点,真正的麻烦就开始了:您不可能再次达到法定人数。 永远。 除非你删除不存在的机器了。 所以在最坏的情况下,你将会在机器之后产生机器,而不会达到法定人数。 让这个星期五晚上发生,我相信你的公司将在星期一打破,除了亚马逊本身或F500。

假设您每次脚本重新configuration副本集。 这可以触发小学退出,导致又一次选举和相应的服务中断(你记得,你试图减less的东西)。 在一个真正的最坏的情况下,甚至可能会导致回滚,并且该机器当然会失败 – 将数据写入Nirwana,因为您只需转储机器。

总而言之,这是一个非常糟糕的想法。

如果您需要多台计算机可能发生故障的安全性,请将另一个成员添加到副本集,如果这样做合理的话。 根据我的经验,在AWS上,有3个数据承载节点是足够好的。

如果您仍然真的想要这样做,您可能需要查看副本集pipe理命令的文档 ,即replSetReconfig