问题标签 [replicaset]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1513 浏览

mongodb - 如何使用单个 shell 脚本使用多个/三个节点/服务器/机器创建 MongoDB 集群?

  1. 如何从单个远程/本地终端启动 3 个配置服务器?
  2. 如何启动分片服务器?
  3. 如何将多台机器添加到分片集群?
  4. 如何在多节点集群中创建副本集?
0 投票
3 回答
695 浏览

mongodb - Mongodb、Boot2Docker 和副本集连接

我有一个 docker 容器,它充当副本集的单个成员。我能够成功启动其中三个并在其中运行一些 shell 脚本,以便将它们连接在一起作为副本集。我发现我可以从我的主机单独连接到每个成员,但是当我尝试通过在 boot2docker IP 和相应的端口,我发现应用程序在某个地方为每个容器 IP 交换了 boot2docker IP,并尝试直接连接到该 IP。

我假设发生这种情况是因为初始连接字符串只是一个种子列表,然后实际配置是通过与成员本身的通信提供的。当然,这是一个问题,因为这些 IP 不存在于主机(运行应用程序的地方)上,只存在于 boot2docker 虚拟机中。如何让成员报告 boot2docker IP 而不是他们各自无法访问的 IP?

我遇到了与 elasticsearch 类似的东西,并且能够通过设置network.publish_host变量来修复它。mongodb有类似的设置吗?我认为也许 bind_ip 是正确的,但无法使其工作,我是否使用不正确?我一直将它设置为 boot2docker IP,并且在启动时收到绑定错误。

此外,我可以确认这只是 boot2docker 混入的问题,因为我的朋友运行 ubuntu 和本地 docker 能够正常连接。

这是我在尝试将 bind_ip 设置为 boot2docker vm 时看到的错误:

这是我的spring xml中的连接字符串:

这是我的应用程序看到的错误(如果我刚开始做事而没有尝试更改 bind_ip 等)

这些 IP 是每个容器的 IP,每个容器确实在端口 27017 上启动,但随后我在 boot2docker 虚拟机上将它们的端口发布为 27017、27018 和 27019。

0 投票
0 回答
365 浏览

node.js - Node.js/Mongoose 在主节点恢复后不会自动重新连接到主节点

在托管的 MEAN 堆栈应用程序中,托管公司技术支持报告的 MongoDB 副本集发生了以下情况:

有一个三分钟的窗口,在那里短暂地选出了一个新的初选。看起来一些网络问题导致主节点失去与辅助节点的连接。窗口只有3分钟,然后初选正常连任。

一旦一切恢复正常,我的使用 Mongoose 框架的 Node.js 应用程序没有重新建立与主节点的连接,导致记录“无法写入辅助节点”错误。

问题:在使用 Mongoose 和/或它使用的 MongoDB 驱动程序时,哪些设置可能会阻止在主切换回后自动重新连接?(即如何防止这种情况再次发生?)

使用猫鼬 v3.8.26

0 投票
3 回答
13432 浏览

mongodb - 在 mongodb 副本集中添加辅助实例时出错

我正在尝试部署 mongodb 副本集。我已将我的 mongodb 实例作为副本的主要实例。现在我正在尝试添加另一个托管在不同 IP 地址的 mongodb 实例,作为副本的辅助,但我收到以下错误:

我做错了什么?

0 投票
4 回答
12424 浏览

mongodb - 单实例 Mongodb 副本集 - 无法执行查询/插入操作

安装 mongodb 后,我运行mongod

然后我与 mongo shell 连接并运行

然后我尝试将文档插入集合中,但收到错误:

看着rs.status(),我看到状态是REMOVED

我不知道我能做些什么来搞砸这一切。我认为这应该有效。我该如何度过这个难关?

0 投票
1 回答
242 浏览

node.js - Mongodb,我可以仅在给定时间或手动触发二级复制吗?

我不是 mongodb 专家,所以我现在对服务器设置有点不确定。

我有一个使用wiredtiger 运行mongo3.0.2 的单个实例,接受读写操作。它从客户端收集日志,因此写入负载不错。每天一次我想处理这些日志并使用聚合框架计算一些指标,要处理的数据集类似于上个月的所有日志,所有计算大约需要 5-6 小时。我正在考虑拆分写入和读取以避免锁定我的集合(服务器在我阅读时继续写入日志,新写入的日志可能与我的查询匹配,但我可以跳过它们,因为我不需要 100% 的准确度)。

换句话说,我想使用辅助读取进行设置,其中复制不是连续执行,而是在配置的时间开始,或者在所有读取操作开始之前触发更好。

我正在从 node.js 进行所有处理,所以我在这里看到的一个选项是导出在某个时期(例如 [昨天,今天])创建的数据,然后将其导入到我自己读取实例并在导入完成后进行计算。我正在寻找副本集和主/从复制作为可能的设置,但我没有得到如何配置它来实现所描述的场景。所以也许我错了,错过了什么?还有其他选择可以实现这一目标吗?

0 投票
1 回答
3449 浏览

mongodb - 我怎么知道 MongoDB 恢复何时结束

根据标题,我有一个具有 1 个主、1 个辅助和 1 个仲裁器的副本集,我在主数据库中恢复了一个大数据库,它比辅助数据库快得多。现在辅助服务器滞后了很多(小时),并且从几个小时开始就处于恢复状态。我能做点什么吗?可以知道恢复进度吗?

0 投票
2 回答
1232 浏览

php - 当辅助服务器无法访问时,在 PHP 中连接到 MongoDB 副本集需要一分钟以上

我有一个由 5 个成员组成的副本集:服务器 1 上的主 + 仲裁器,服务器 2 上的辅助 + 仲裁器,服务器 3 上的隐藏辅助(备份节点)。如果一台服务器出现故障或暂时失去连接,我希望此配置能够工作。

但是,当服务器 2 关闭时(具有辅助 + 仲裁节点的服务器),我遇到了一个奇怪的问题。从 PHP 到副本集的任何连接都需要一分钟多的时间。我尝试修改连接字符串以从中排除已关闭的服务器(辅助节点),但它没有帮助。

同时通过 mongo 控制台连接工作得很好。主节点仍然是主节点。PHP 错误日志不包含任何错误。

唯一有帮助的是从副本集中删除服务器上的节点。

但是,我现在担心配置的故障转移。正如我现在意识到的那样,如果具有辅助+仲裁节点的服务器出现故障,整个配置将停止正常工作。有什么办法可以避免吗?无论辅助+仲裁服务器是否可用,我都需要 PHP 客户端能够连接到主服务器。如何做到这一点?

mongo PHP客户端库版本为1.6.x,服务器版本为3.0。

0 投票
2 回答
594 浏览

mongodb - 如何替换分片副本集中的节点?

我得到了带有两个副本集的分片 mongodb 设置:

节点 10.133.250.140 刚刚关闭,我将其替换为另一个(IP 地址已更改)。副本集重新配置非常简单,只需 rs.remove() 和 rs.add() 现在我必须更新分片 rs01 的主机配置。什么是正确的方法?

0 投票
0 回答
95 浏览

node.js - nodejs-mongodb-native@2.x 中的“ha”事件是什么意思?

我正在使用带有 RF=3 的副本集的 MongoDB。文档中有一个事件“ha”,我看到它对更新操作的影响是巨大的:

据我所知,这个事件来自 mongodb-core。但是这个事件的意义是什么?副本集连接是否每 N 秒丢失并恢复?