问题标签 [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.
mongodb - 停止 mongo 上的副本集,主节点进入恢复状态
当我停止副本集的节点并再次启动它们时,主节点进入“正在恢复”状态。
我创建了一个副本集,未经授权运行。为了使用授权,我添加了用户“db.createUser(...)”,并在配置文件中启用了授权:
在停止副本集之前(甚至在不添加安全参数的情况下重新启动集群), rs.status() 显示:
为了开始使用此配置,我已停止每个节点,如下所示:
关闭后,我通过检查ps -ax | grep mongo
.
但是当我再次启动节点并使用我的凭据登录时, rs.status() 现在显示:
为什么?也许关闭不是停止 mongod 的好方法;但是我也使用'kill pid'进行了测试,但重新启动最终处于相同的状态。
在这种状态下,我不知道如何修复集群;我又开始了(删除 dbpath 文件并重新配置副本集);我尝试了“--repair”但没有奏效。
关于我的系统的信息:
- 蒙戈版本:3.2
- 我以root身份启动该过程,也许它应该以“mongod”用户身份启动?
- 这是我的启动命令:
mongod --conf /etc/mongod.conf
- keyFile 配置不起作用;如果我添加“--keyFile /path/to/file”显示:
“即将 fork 子进程,等待服务器准备好连接。 ”该文件具有所有权限,但不能使用 keyFile。 “net.bindIp”配置的示例,来自一台机器上的 mongod.conf:
/li>
mongodb - Parse Server - 无视分片和复制,无法连接到 MongoDB
我们在 AWS 上部署了一个带有 3 个分片的 MongoDB 分片集群。每个分片都有一个包含 3 个成员、1 个配置服务器和 3 个 mongos 的副本集。
以及分片在 3 个 EC2 实例上的分布方式
您可以看到 replicaSet 成员不在同一个实例上。
但是当例如md0
宕机时,我们的 API(Parse Server)与集群的连接松散,尽管md1
仍然md2
存在并且已经选择了一个新的主节点。由于复制,所有 EC2 实例都拥有所有集合的副本,包括分片集合。
连接字符串看起来像这样
您认为这是集群/分片配置的问题,还是与 API 相关的问题,它保持连接而不是尝试连接到其他 mongos?
mongodb - Mongodb 官方镜像 errno:111 Connection refused when trying to create replicaset
我正在尝试使用官方 MongoDB docker 映像在单个容器内创建一个 3 组复制集群。
按照这个官方指南,我创建了以下 dockerfile:
但是当我运行它时,我收到以下错误:
当我运行原始 mongo 图像并尝试运行相同的 CMD 时,我得到的结果不一样。
我尝试添加USER root
到 Dockerfile 中,但这根本没有帮助。
我能做些什么来完成这项工作?
更新
- 还尝试从 开始创建图像
ubuntu
,结果相同 - 好吧,这似乎是某种 docker 文件权限问题。当我将代码移动到 bash 脚本并从那里运行时,一切正常。这不是为什么会发生这种情况的答案,而是您需要的解决方案。
mongodb - Meteor 1.4.1.1 上副本集的正确 MONGO_URL 设置是什么
今天早上我去把我更新的 Meteor 项目部署到 Heroku 上。
我正在从升级1.1.0.3
到1.4.1.1
.
使用Meteor Buildpack Horse一切安装正确,但应用程序因错误而出错;
MongoError:种子列表不包含 mongos 代理,副本集连接需要在 URI 或选项对象中提供参数副本集,mongodb://server:port/db?replicaSet=name
我MONGO_URL
的,mongodb://u:p@url1:port,url2:port/db
所以我把它改成了;
mongodb://u:p@url1:port,url2:port/db?replicaSet=set-name
如果我在 replicaSet 参数上犯了一个错误,我会得到这个错误;
MongoError:在副本集中找不到主节点
这似乎是明智的,因为副本集不存在,但是当我输入正确的值时,我再次收到原始错误,说种子列表不包含代理。
我的副本集名称中有破折号,我不知道这是否相关。
我试过的
我尝试使用在 Mongo 客户端中引发此错误的 URL,它允许我很好地连接到实例,所以我知道所有细节都是正确的。
我也尝试过转义副本集,所以?replicaSet=set\-name
这给了我MongoError: no primary found in replicaset
错误。
我的 MongoDB 提供商有一张未结票,但我怀疑这是 Meteor/me 的问题!
mongodb - MongoDB Primary 无法返回
我有一个在 Windows 上运行的 MongoDB 3 成员副本集。当主服务器(S1)宕机时,辅助服务器被正确选举。当主服务器恢复时,副本成员保持无效状态:
之后,辅助服务器每隔几秒钟就会在主服务器和辅助服务器之间切换,使我的应用程序不稳定。
恢复主服务器的唯一方法是执行 rs.reconfig(c)。
我找不到配置文件有什么问题。
任何帮助将不胜感激。
更新: 这是当前配置:
我应该使用 IP 地址而不是主机名吗?
更新 2:
这是主服务器 (m3.companyName.com - IP 1.1.1.1) 的日志,从它重新启动到我进入另一台服务器 (m2.companyName.com - IP 2.2.2.2) 并进行了手动 rs .reconfig()。
我注意到的最明显的事情是“没有这样的主机是已知的”错误。也许 Mongo 试图在 Windows 解析名称之前启动?
mongodb - 在 Docker 容器中初始化 MongoDB 副本集时出错
我使用以下命令创建了一个带有副本集的 MongoDB docker 容器:
容器开始运行。
然后我尝试使用以下命令启动副本集:
但它给出了错误消息“已经初始化”。
当我使用rs.status()命令检查副本集的运行状况时
它说副本集配置无效。
mongodb - mongo 复制设置存储在哪里?
完全重装了mongo后,还记得之前的副本集配置;它存储在哪里?
我使用我们项目的用户帐户在 linux 服务器上将 mongo 安装到该用户拥有的目录中。我设置了复制并让它正常工作。然后,为了测试一些更好的安装点,我删除了整个 mongo 目录并重新安装。进入mongo,发现replication已经和之前一样设置好了;所以看起来mongo将信息存储在某个地方。
我检查了几个可能保存副本集配置的区域:
- 首先,在 mongo 目录中,但已删除。
- 在一些传统的 linux 结构中,可能由 root 拥有,但项目用户没有 root 访问权限,并且由相同运行的 mongo 也不应该。
- 项目用户的主目录。现在这确实有一个包含命令行历史的 .dbshell 文件,但仅此而已。我没有看到任何其他相关的文件。
- mongo 配置中指定的某个位置。但是我这里只提到了两个路径,一个用于系统日志(
systemLog.path
),另一个用于存储(storage.dbPath
),并且都指向 mongo 目录,该目录已被删除。
有谁知道 mongo 在哪里存储此配置信息?
php - PHP MongoClient 连接 Mongodb 副本集,关于连接字符串
删除主节点后,与 MongoDB 副本集的 PHP 连接失败。
我已经建立了一个有五个节点的 mongodb 副本集;mongo1 是主要的,其他都是次要的。
这是我的连接代码:
我发现每当我停止连接字符串中第一台服务器的服务时(这次是mongo1),php驱动程序要么抛出连接异常错误,要么除了连接的“已连接”属性之外不会抛出任何错误对象将是错误的。
似乎 php 驱动程序无法正确连接到副本集。
我尝试了另一个实验,交换服务器的位置。这次我的连接字符串是:
在这种情况下 mongo1 仍然是主要的;当我停止 mongo3 服务时,错误再次发生。只要我不停止列表中第一台服务器的服务,似乎一切都会好起来的。
mongodb - 我可以使用副本集名称通过 mongo-connector 连接吗
我想知道,有没有一种方法可以通过 mongo-connector 从一个 mongo 副本集复制到另一个?根据 mongo 文档,我们可以使用下面示例中的命令通过 mongo-connector 连接两个 mongo 实例,但我想传递副本集名称或使用配置文件,而不是在命令行中传递server:port名称。
Mongo 连接器可以使用 Mongo DocManager 从一个 MongoDB 副本集或分片集群复制到另一个。最基本的用法如下:
mongo-connector -m localhost:27017 -t localhost:37017 -d mongo_doc_manager
我还通过创建下面的 config.json 文件尝试了 config.json 选项,但它失败了。
node.js - mongodb故障转移连接
我有一个连接到 mongodb 的 nodejs 应用程序。
Mongodb 允许副本集客户端连接提供一定程度的弹性。
例如“ mongodb://localhost:50000,localhost:50001/myproject?replicaSet=foo
”,客户端首先连接到 localhost@50000,如果连接失败,它会切换到 localhost@50001。
这很好,但是如果当应用程序启动并且如果两个 mongo 之一死了,那么应用程序就死了 - 无法连接错误。
我能想到的唯一解决方案是重新格式化 url,使其排除非活动实例,但希望避免这种情况......
有任何想法吗?
谢谢