gpt4 book ai didi

node.js - 如何在 AWS 中的 NodeJS 中编写 Mongo 副本脚本

转载 作者:太空宇宙 更新时间:2023-11-03 22:32:05 27 4
gpt4 key购买 nike

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

如果失败,我的自动缩放将终止实例并使用用户数据重新启动服务器以重新安装软件包。

我如何通知主实例(新的或旧的)实例已恢复正常,因为它将具有新的私有(private) IP 地址(您无法将静态私有(private) IP 分配给自动缩放/启动配置)

我似乎无法在 Mongoose 或最新版本的 Mongo Node 驱动程序中找到一种方法来告诉主 Node 有一个新实例想要加入。

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

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

它将被添加,并且数据将同步。但是如何通过 Node 驱动程序或 Bash 脚本执行 rs.add 操作?

更新

我发现这篇文章非常有用,Can I call rs.initiate() and rs.Add() from node.js using the MongoDb driver?

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

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); }
});
}
});

最佳答案

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

首先,如果您只是向副本集中添加一个新 Node ,则通过配置,您的副本集中将有 4 个 Node ,只要其余三个服务器都在运行就可以了。但现在,当其中一个失败时,您会立即失去仲裁,并且副本集将恢复到辅助状态,从而使写入变得不可能。

您添加另一个 Node ,根据配置将 Node 数量增加到 5 个。适用与上述相同的规则。现在您添加了第六个 Node ,真正的麻烦开始了:您不可能再次达到法定人数。曾经。除非你再移除不存在的机器。因此,在最坏的情况下,您将生成一台又一台的机器 - 而不会达到法定人数。如果周五晚上发生这种情况,我相信你的公司到周一就会破产,除非它是亚马逊本身或 F500。

假设您每次编写脚本时都重新配置副本集。这可能会触发主 Node 下台,导致另一次选举和相应的服务中断(你记住,你正在尝试减少的事情)。在真正最坏的情况下,甚至可能会导致回滚,接下来机器当然会失败 - 将写入数据发送到 Nirwana,因为您只是转储机器。

总而言之:这是一个非常糟糕的主意™。

如果您需要多台计算机可能发生故障的安全性,请向副本集添加另一个成员(如果这在经济上有意义)。根据我的经验,在AWS上,3个数据承载 Node 就足够了。

如果您确实想这样做,您可能想看看 the documentation for replica set administrative commands ,即replSetReconfig

关于node.js - 如何在 AWS 中的 NodeJS 中编写 Mongo 副本脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35353872/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com