【发布时间】:2016-11-21 02:14:50
【问题描述】:
我正在学习MongoDBUniversity 的M101P: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