"此节点未使用replSet选项启动"

Jak*_*kes 2 mongodb replicaset

我正在研究MongoDBUniversityM101P:MongoDB for Developers课程.

我在MongoDB 3.2上使用WiredTiger.

我目前正在讨论副本集的主题.

该课程要求我使用以下代码创建副本集:

mongod --replSet rs1 --logpath "1.log" --dbpath /data/rs1 --port 27017 --fork
Run Code Online (Sandbox Code Playgroud)

但是我使用的是Windows,它不支持fork,所以使用这个要点(按照课程管理员的建议)我在创建目录后运行了3个不同的控制台同时运行这些行(运行mongod):

mongod --replSet rs1 --logpath "1.log" --dbpath rs1 --port 27018 --smallfiles --oplogSize64  
mongod --replSet rs1 --logpath "2.log" --dbpath rs2 --port 27019 --smallfiles --oplogSize64  
mongod --replSet rs1 --logpath "3.log" --dbpath rs3 --port 27020 --smallfiles --oplogSize64
Run Code Online (Sandbox Code Playgroud)

一切似乎都很好; 我可以看到目录已经填满,日志文件都显示"等待连接"与相关的端口号.

最后,我运行以下代码将服务器统一为副本集:

config = {_id: "rs1", members: [
           { _id: 0, host: "localhost:27018"},
           { _id: 1, host: "localhost:27019"},
           { _id: 2, host: "localhost:27020"}
                                ]
         }

rs.initiate(config)
rs.status()
Run Code Online (Sandbox Code Playgroud)

扔的是:

"errmsg" : "This node was not started with the replSet option",
"code" : 76
Run Code Online (Sandbox Code Playgroud)

我无法理解,因为我已明确使用--replSet每个服务器的选项,并且确实提供了配置文件中使用的相同replSet名称.

我已经看过关于这个主题的其他问题了,但是很少,我找不到任何问题并为我解决这个问题.这个说明错误看起来很明显:我的配置文件应该包括--replSet=rs1,但是从阅读文档我得到的印象是_id我定义的配置服务于此目的:

_id
类型:字符串

副本集的名称.设置后,您无法更改副本集的名称.

_id 必须与replication.replSetName或命令行中指定给mongod的-replSet的值相同.

此外,这显然在课程材料视频演示中正确地以我试图使用它的方式正常运行.

我在我的智慧结束,非常感谢帮助.
可靠的人

Jak*_*kes 8

所以当我写完这个问题时,答案就像一个灯泡一样来到我身边,这似乎经常发生......但是这次我想我会在这里留下答案给其他任何挣扎过这个的人,考虑到有点缺乏论坛上有关此主题的问题/答案.

这是运行配置文件时使用的默认端口的简单情况.
mongo < init_replica.js用来运行我的配置并统一服务器来创建副本集.

只需添加一个有效服务器使用的端口,它就可以正确运行:

mongo --port 27020 < init_replica.js 
Run Code Online (Sandbox Code Playgroud)

那个人有祸了,但是我希望这对那些也发现自己被困在某个类似地方的课程有所帮助.

可靠的人