【问题标题】:"This node was not started with the replSet option"“此节点未使用 replSet 选项启动”
【发布时间】:2016-11-21 02:14:50
【问题描述】:

我正在学习MongoDBUniversityM101P:MongoDB for Developers 课程。

我在 MongoDB 3.2 上使用 WiredTiger

我目前正在讨论副本集

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

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

但我使用的是不支持 fork 的 Windows,因此使用 this gist(由课程管理员推荐)在创建目录后,我在 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

似乎一切正常;我可以看到目录已被填满,并且日志文件都显示“等待连接”以及相关的端口号。

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

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 名称。

我查看了有关此主题的其他问题,但很少,而且我找不到可以为我解决和解决此问题的问题。 This 一个声明从错误中看起来很明显:我的配置文件应该包含 --replSet=rs1,但从阅读 documentation 后,我的印象是我定义的配置的 _id 服务于这个目的:

_id
类型:字符串

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

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

此外,在课程材料视频演示中清楚地显示了它的功能,这正是我尝试使用它的方式。

我无能为力,非常感谢帮助。
杰克

【问题讨论】:

    标签: mongodb replicaset


    【解决方案1】:

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

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

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

    mongo --port 27020 < init_replica.js 
    

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

    杰克

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-16
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多