问题标签 [mongodb-replica-set]

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 回答
568 浏览

mongodb - AWS MongoDB 集群通过 Ansible 进行配置

我们正在 AWS EC2 实例上通过 ansible 部署 mongodb 集群。配置数据库实例后,我们为其提供相应的主要/次要标签。我们有 3 个节点 - 1 个用于主节点,2 个用于辅助节点。

第一次运行 ansible 脚本时,我们按标签类型选择主实例,启动它并向其添加辅助节点

这工作正常。

然而有时,当一个从属节点成为主节点时,我们的实例标签类型——主节点和 mongoDB——主节点并不相同。在这种情况下,如果我们运行我们的 ansible 脚本,它们会失败,因为主要标签类型(现在是次要标签类型)无法在命令之上运行。

处理这种不匹配的最佳方法是什么?

0 投票
2 回答
2037 浏览

mongodb - 从 mongo shell 连接到远程副本集?

我在亚马逊云中创建了一个 3 成员副本集。我已经设置了所有需要的防火墙设置和 mongo 配置。下面是我的副本集配置:

注意:我已经使用机器主机名机器公共 IP 地址创建了副本集。

我正在使用以下命令从这 3 台副本集机器中的任何一台连接到副本集,并且我连接到副本集的主节点。

但是当我从不在同一个局域网中的任何其他机器(假设我的本地机器)上使用相同的命令时。该命令失败并出现以下错误:

由于网络的差异,mongo 无法解析副本集中使用的主机名。我没有使用公共 IP,因为我猜这是不好的做法。

所以最后的问题是我如何连接到这个远程副本集?

谢谢

0 投票
0 回答
6727 浏览

mongodb - 如何在 Ubuntu 14.04.4 上通过配置文件使用副本集启动 mongoDB

嗨,我已经为 MongoDB 配置了一个副本集。如果我运行命令:

一切正常,3 个副本正常工作,但如果我运行命令:

它不起作用,shell 不显示任何内容,如果我检查运行 mongod 的进程没有与副本集一起运行。

这是我的 mongod.conf:

这是日志文件:

0 投票
0 回答
150 浏览

mongodb - saveState 中不允许出现 WriteConflictException - 带有副本集的 mongodb

我们使用 MongoDB 副本集,一段时间后,主集将抛出下面的异常并且无法从中恢复。仅当我们以Replicaset模式运行服务器时才会出现该错误。

不变失败!“src/mongo/db/query/plan_yield_policy.cpp 95 中不允许保存状态中的 WriteConflictException”

出现上述错误后,没有任何 MongoDB 服务器(在副本集中)可用,并且在 mongo.log 中重复以下消息:

REPL [ReplicationExecutor] 从主节点下台,因为一个新的任期已经开始:32

这是我的服务器配置:

服务器 1:

  • MongoDB(Percona 版本 3.2.4-1.0rc2)
  • MongoDB Arbiter (Percona 版本 3.2.4-1.0rc2)

服务器 2:

  • MongoDB(Percona 版本 3.2.4-1.0rc2)
0 投票
1 回答
1498 浏览

mongodb - MongoDB Initial Sync 反复失败(Azure VM 上 Ubuntu 16.04 上的 Mongodb 3.2)

  • 我有一个成员 mongod 实例(Server1),它有一个非常大的数据库,有 250 万个文档(每个文档都很大)和 4 个索引。
  • 然后我向这个副本集添加了另一台机器(Server2)。Server2 上的 Mongod 大约需要 5 个小时才能获取这个大数据库中的所有文档。
  • 在 Server2 获取所有文档后,它开始制作二级索引。索引完成大约需要 3 个小时。

    • 在完成构建二级索引后,它立即尝试连接到主索引并发现套接字已过期并超时。
    • 在收到超时错误时,它 (Server2) 会简单地删除所有数据库并再次开始初始同步。

    • 来自日志的片段如下:

  • 尝试同步这个副本集非常令人沮丧。它一遍又一遍地进行初始同步。非常感谢任何帮助。
0 投票
2 回答
244 浏览

mongodb - 写入两个文档时,副本集上的 Mongodb 最终一致性

我们有一个客户端连续写入两个文档(带有{w:1})。例如,原始文件可能是:

{_id: "a", value: 0}, {_id: "b", value: 0}

并且客户端将文档“a”更新为{_id: "a", value: 1},然后在更新完成后,客户端将文档“b”更新为{_id: "b", value: 1}

第二个客户find({})随后打电话。第二个客户端从辅助客户端读取,可能尚未收到所有更改。显然它可以读取以下状态:

  • {_id:"a",value:0},{_id:"b",value:0}
  • {_id:"a",value:1},{_id:"b",value:0}
  • {_id:"a",value:1},{_id:"b",value:1}

这是主要的“真实”状态(在过去的某个时刻)。

第二个客户可以看到如下状态:{_id:"a",value:0}, {_id:"b",value:1}? 请注意,此状态在主节点上从未存在过。

PS这里的解释说:

辅助节点...按照它们在 oplog 中出现的顺序应用写操作。

这是否意味着辅助节点按照它们在主节点上更新的顺序更改他们的文档?

PSfind游标是否“冻结”了它们正在阅读的文档的状态(即忽略创建游标后所做的更改)?如果我使用find(...).sort({_id:-1})或者如果文档“a”的 id 是“c”(即大于“b”),情况会有所不同吗?

谢谢

0 投票
1 回答
957 浏览

mongodb - mongos 无法写入副本集配置服务器(CSRS)(无效的写入问题)

我正在设置一个分片的 mongodb,主要是按照https://docs.mongodb.com/manual/tutorial/deploy-shard-cluster/。当我启动mongos实例时,我得到了一系列错误

我相信这是因为配置服务器副本集需要{w:majority}写入问题,但由于不清楚的原因mongos是使用{w:1}. 到处找,没有找到答案;我见过的最接近的是https://jira.mongodb.org/browse/SERVER-20945但这是我正在运行的版本,所以似乎不是答案。

因为配置服务器本质上是不可写的,这会阻止创建分片等,从而使整个事情无法运行。

这是mongosv 2.6.12 和mongov 3.2.6。

提前感谢您的帮助。

0 投票
2 回答
250 浏览

mongodb - 锁定在 mongodb 副本集之外

我有一个包含 3 个成员(2.4 版)的 mongodb 副本集,其中“admin”数据库的管理员用户没有“userAdminAnyDatabase”角色。

此角色是管理所有数据库上的用户所必需的。

我目前拥有的角色是:[“readWriteAnyDatabase”、“dbAdminAnyDatabase”、“clusterAdmin”]

我尝试为自己更新角色或创建新用户,但是我无权访问管理数据库中的 db.system.users。

我尝试设置 noauth=true 但这没有帮助。删除 keyFile 时,数据库也无法与其他成员同步(显然)并陷入 RECOVERY 状态。

我发现了一个类似的问题,它指的是一个独立的数据库(没有副本集),所以在这种情况下它并没有真正的帮助。

在系统停机时间最短的情况下添加此角色的最佳方法是什么?

0 投票
0 回答
1112 浏览

mongodb - 当三个节点中的一个节点关闭时放弃主节点mongo ReplicaSet

我有一个ReplicaSet三个节点,192.168.254.107:27023、192.168.254.108:27023、192.168.2.69:27023。

当 192.168.254.108:27023 关闭(意外关闭)时,192.168.2.69:27023 成为主要的。
但过了一会儿,放弃初级,过渡到次级。选举和放弃不断循环执行。

ReplicaSet 是集群的一个分片。

这是日志:

这是分片状态:

它是如何发生的?

这是 的配置ReplicaSet,当它没问题时:

0 投票
1 回答
4207 浏览

java - 当主服务器节点在副本集中更改时,MongoDB java客户端失败

问题: MongoDB 写入失败并出现错误 -

等待与 PrimaryServerSelector 匹配的服务器时,在 30000 毫秒后超时。集群状态的客户端视图是 {type=REPLICA_SET, servers=[{address=intdb01:27017, type=REPLICA_SET_SECONDARY, roundTripTime=0.7 ms, state=CONNECTED}]

当主数据库从intdb01切换到intdb02时会发生这种情况。看起来客户端驱动程序仍在寻找intdb01 作为主节点。

我们的设置

我们在一个名为 rs0 的副本集中有 3 个 mongoDb 节点。当我们使用 Java 连接到它时,我们在连接字符串中给所有 3 个服务器如下: mongodb://intdb01:27017,intdb02:27017,intdb03:27017/?replicaSet=rs0

db.version --> 3.0.4

Java驱动版本:mongodb-driver-3.0.4.jar, mongodb-driver-core-3.0.4.jar

客户端连接代码:

mongoConnect 包含上面显示的连接字符串。

Mongo 副本集状态信息

我已经检查并重新检查了文档中的代码/配置,但找不到问题所在。我们可以通过降低主节点来模拟这一点。辅助节点接管,但应用程序写入开始失败。:-(

非常感谢任何指针/提示!

添加堆栈跟踪-

我试图弄清楚它是编码错误还是配置。堆栈跟踪中的最后一条信息消息,说 connectionMode 是 SINGLE。怀疑它会导致此问题,但我在开发人员文档站点中找不到任何有关它的信息。