问题标签 [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 回答
5293 浏览

mongodb - 我应该为 mongodb 连接字符串使用主机名还是 IP 地址

我已经设置了一个包含 3 个节点的 MongoDB 副本集。所有服务器都位于同一个 VPC 中,但位于不同的可用区中。多亏了etc/hosts文件,当我描述在哪里可以找到其他节点时,我的副本集能够在节点之间进行通信。我的etc/hosts文件在所有 3 个节点上都是这样的。

现在,应用服务器需要连接到副本集。我应该在连接字符串中使用节点的 IP 地址还是应该使用主机名?

mongodb://private_ip1:27017,private_ip2:27017,private_ip3:27017/dbname?replicaSet=rs0 或者 mongodb://mongo0.example.com:27017,mongo1.example.com:27017,mongo2.example.com:27017/dbname?replicaSet=rs0

如果是后者(主机名),我应该/etc/hosts像每个 mongo 节点一样配置应用服务器吗?

0 投票
1 回答
6000 浏览

mongodb - mongo:错误:子进程失败,以错误号 100 退出

我在 mongodb 上成功创建了三个实例的副本集。副本集的每个成员都使用配置文件进行实例化。当我测试它时,一切都很顺利,并且执行成功,没有任何错误。

生成标题中错误的下一步是启用内部身份验证。为此,我遵循了此页面中的 mongo 文档:

[a] https://docs.mongodb.com/v3.0/tutorial/enable-internal-authentication/

首先,我使用下面的两行代码生成了一个密钥文件

如果没有 root 身份,我无法执行这些行,所以我使用 root 来执行。

然后我在实例的配置文件中添加了密钥文件。

现在为了再次启动 mongo,我编写了以下命令,我每次都使用它

我得到了上面的错误。我确保一切都归root所有。dbpath、配置文件和密钥文件。

然后,我将所有内容切换为普通用户所有,并尝试以普通用户身份启动 mongod(没有 sudo)。我收到了同样的错误。

您认为解决方案是什么?

0 投票
0 回答
103 浏览

mongodb - Pymongo 不在副本集中使用 MongoClient 定义的 IP 地址

我正在运行 MongoDB ReplicaSets 的 Kubernetes 集群。

我已经很好地初始化了副本集,并且一切都彼此同步。

但是,当我尝试使用 pymongo 使用私有公开的 ip 地址(在 范围内172.20.x)进行连接时,运行查询会尝试使用 mongo 复制服务器提供的 ip 连接到副本集。

这表明 pymongo 正在使用从副本集的配置提供的值,而不是使用我定义的 IP 地址。无论如何要禁用此默认行为?

0 投票
1 回答
491 浏览

mongodb - 带有 Docker 1.12 服务的 Mongodb 副本集

我想知道如何使用新的 Docker 1.12 swarm mode 服务模型启动 mongodb 副本集。启动服务允许您指定容器副本的数量,在最小副本集情况下为 3。但是如果 Docker 自己运行单个容器,则如何为副本集主指定参数,所有容器都具有相同的名称服务(用于通过覆盖网络联系容器)?

副本集容器如何以不同的名称相互联系?mongodb1,mongodb2,mongodb3 - 这些必须是不同的服务吗?

直接运行 dockers 'run' 命令非常简单......现在对于状态完整的容器(副本集成员)来说似乎有点混乱,而不是无状态容器,其中服务的所有容器都是相同的...

任何指针或链接都会有所帮助。

0 投票
1 回答
145 浏览

ruby-on-rails - MongoDB:不同的应用程序连接到不同的副本

我们使用 Mongodb 作为我们应用程序的中央数据库;面向消费者的移动应用程序。目前它是一个 7 成员的副本集,其中副本集 1 目前是主副本。连接到 mongo 副本的后端是在 Ruby on Rails 中构建的,我们使用 mongoid 作为 ODM。

主要有 3 个部分连接到 MongoDB 副本集。

  1. 消费者应用
  2. 管理员和客户服务管理应用程序
  3. 数据检索应用程序(用于分析等目的)

到目前为止,所有这 3 个应用程序都连接到同一个副本集。

我想知道的是是否可以将不同的应用程序连接到特定的副本。

我不认为在 mongoid.yml 配置中明确提及特定副本是有效的。尽管我已经在数据检索应用程序的 mongoid hosts 文件中只提到了 replica-set-7,但我确实在 replica-set-2 和 3 的日志文件中看到了某些查询

很明显,MongoDB 决定了在其副本之间分配查询的标准,尽管在客户端 mongoid 端指定了配置。

我真的很想知道使用 MongoDb 和 mongoid 是否可以实现这样的事情,因为它可以帮助我们解决很多负载问题。目前,来自客户服务和数据检索应用程序的大量查询也会影响面向消费者的移动应用程序;因为读取没有分离。所以基本上想把reads分开。

此外,如果这一切都是可能的,我会再次关注任何可能的陷阱;特别是所有 3 个应用程序都可以写入数据库。例如,replica-3 在选举后突然成为主节点,并且在数据检索应用程序的配置中没有明确提及。那里可能发生的事情将成为一个问题。

我完全不确定这是否可能;但只是想知道是否有办法解决这个问题。任何帮助都会非常显着。

0 投票
1 回答
392 浏览

mongodb - MongoDb Ops Manager can't start mongos and shard

I Came by a problem where i have an Ops Manager that suppose to run a MongoDB cluster as an automated cluster.

Suddenly the servers started going down, unexpectedly - while there are no errors in any of the log files indicating on when is the problem.

The Ops Manager gets stuck on the blue label

We are deploying your changes. This might take a few minutes

And it just never goes away.

Because this environment is based on the automation feature, the mms is managing the user on the servers and runs all of the processes from "mongod" which i can't access even as a Root (administrator).

As far as the Ops Manager goes it shows that a shard in a replica set is down although it's live, and thinks that a mongos that is dead is alive.

Has someone got into this situation before and may be able to help ?

Thanks, Eliran.

0 投票
0 回答
81 浏览

php - 为什么 MongoDB PHP 客户端会创建到副本集的每个成员的连接?

我们有一个副本集,连接字符串中有两个服务器,secondaryPreferred。如果辅助服务器停机,我们希望 MongoDB 自动连接到主服务器。这在“正常”停机情况下效果很好,但是MongoClient 似乎总是连接到两个副本集成员。即使它首先连接到第一个辅助节点,它也会连接到主节点,这仅用于更新查询。

问题是当主节点出现连接超时时:网站尝试连接 60 秒,然后继续从辅助节点提供服务。而且这似乎是无用的开销。

我没有测试它,但我认为与primaryPreferred相同。

是否有可能改变这种行为?

配置:

0 投票
0 回答
1071 浏览

c# - 连接到 MongoDB 3.2 的超时

我正在使用 .NET 驱动程序版本 2.2.4(使用 .NET 4.5 的应用程序)连接到 MongoDB 版本 3.2,并且收到一些超时异常。

场景细节:我们有一个带有 2 个服务器的 ReplicaSet,其中一个服务器还有一个运行在 27018 端口的仲裁器。

正在连接的应用程序在装有 Windows Server 2008 R2 的两台服务器(A 和 B)中运行。

在服务器 A 中,所有连接和请求都可以正常工作,但在服务器 B 中,第一个连接会引发超时异常,并显示以下错误消息:

使用
CompositeServerSelector{ Selectors = ReadPreferenceServerSelector{
ReadPreference = { Mode = Primary, TagSets = [] } },
LatencyLimitingServerSelector{ AllowedLatencyRange = 00:00:01 } } 选择服务器 30000 毫秒后发生超时。
集群状态的客户端视图是 { ClusterId : "5", ConnectionMode :
"ReplicaSet", Type : "ReplicaSet", State : "Disconnected", Servers :
[{ ServerId: "{ ClusterId : 5, EndPoint :
"Unspecified/serverA.域:27017“}”,端点:
“未指定/serverA.domain:27017”,状态:“断开连接”,类型:
“未知”},{ ServerId:“{ ClusterId:5,端点:
“未指定/serverB.domain:
“未指定/serverB.domain:27017”,状态:“断开连接”,类型:
“未知”}] }。

在第二次尝试中,连接工作并在应用程序的整个生命周期中保持工作。

有人知道初始连接出了什么问题吗?

0 投票
1 回答
2040 浏览

node.js - 使用 node.js 的 MongoDB Atlas 用户身份验证

我有一个 MongoDB Atlas 实例,并且能够连接到它,但我无法创建帐户并从 node.js 访问数据库。在使用下面的 mongo 命令 & > 'use mytestcollection' 后,我可以从 Mongo Shell 访问数据库。尝试直接从 shell 访问我的 testcollection 返回“错误身份验证失败”。

这是外壳连接字符串..

这是 Node.js 代码

节点代码是......

错误是...

欢迎任何建议。

0 投票
1 回答
1028 浏览

php - mongo副本集的php连接错误

我在 EC2 上有 3 个实例,每个实例都具有弹性 IP,并且每个实例都运行 mongo 版本 3.2。所有都在类型名称的副本集中。mongod.conf 中的 bind_ip 设置配置了 IP 0.0.0.0。

我正在尝试通过 php 连接 mongo。我已经安装了扩展mongodblibrary

所有这些都在同一个端口上,主IP:52.67.34.1

我的连接:

但是要进行查询或插入,则会出现以下错误:

致命错误:未捕获的异常“MongoDB \ Driver \ Exception \ ConnectionTimeoutException”,消息“未找到合适的服务器(serverselectiontryonce设置):[在'52.67.34.1:27017'上调用ismaster的连接错误] [在'52.67.77.2上调用ismaster的连接错误: 27017'] [在'52.67.30.3:27017'上调用ismaster的连接错误] [连接到'172.31.1.1:27017'失败:连接超时] [连接到'172.31.2.2:27017'失败:连接超时] [无法连接到“172.31.3.3:27017”:连接超时]

我该如何解决这个错误?连接到蒙戈?