"This node was not started with the replSet option"

"This node was not started with the replSet option"

我正在学习 MongoDBUniversityM101P:MongoDB 开发人员 课程。

我在 MongoDB 3.2 上使用 WiredTiger

我目前的话题是副本集

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

mongod --replSet rs1 --logpath "1.log" --dbpath /data/rs1 --port 27017 --fork

但我正在使用 Windows,它不支持 fork,所以使用 this 要点(根据课程管理员的建议)我 运行 这些行在我创建目录后同时在 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

似乎一切正常;我可以看到目录已被填充,日志文件都显示 "waiting for connection" 和相关的端口号。

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

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

rs.initiate(config)
rs.status()

哪个是投掷:

"errmsg" : "This node was not started with the replSet option",
"code" : 76

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

我查看了关于此主题的其他问题,但很少 none 我可以找到地址并为我解决此问题。 This one states what looks obvious from the error: my config file should include --replSet=rs1, but from reading the documentation 给我的印象是我定义的配置的 _id 用于此目的:

_id
Type: string

The name of the replica set. Once set, you cannot change the name of a replica set.

_id must be identical to the replication.replSetName or the value of –replSet specified to mongod on the command line.

此外,在课程 material 视频演示中清楚地显示了它以我尝试使用它的方式正确运行。

我无计可施,非常感谢您的帮助。
杰克

所以当我写完这个问题时,答案就像一个灯泡一样出现在我的脑海中,这似乎经常发生......但是这次我想我会把答案留给其他任何为此而苦苦挣扎的人, 考虑到论坛上关于此主题的 questions/answers 有点缺乏。

这是在 运行 设置我的配置文件时使用默认端口的简单案例。
我正在使用 mongo < init_replica.js 到 运行 我的配置并统一服务器以创建副本集。

通过简单地添加一个有效服务器使用的端口,运行 正确:

mongo --port 27020 < init_replica.js 

我很遗憾,但我希望这能帮助那些也在学习这门课程但发现自己陷入类似困境的人。

杰克