我正在学习MongoDB大学's M101P:面向开发人员的 MongoDB课程。
我在用连线虎 on MongoDB 3.2.
我目前的主题是副本集.
该课程要求我使用以下代码创建一个副本集:
mongod --replSet rs1 --logpath "1.log" --dbpath /data/rs1 --port 27017 --fork
但我用的是Windows,不支持fork
,所以使用this要点(根据课程管理员的建议)在创建目录(运行 mongod )后,我在 3 个不同的控制台中同时运行了这些行:
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
,但是从阅读文档我给人的印象是_id
我定义的配置用于此目的:
_id
Type: string
副本集的名称。一旦设置,您将无法更改名称
副本集。
_id must与在命令行上指定给 mongod 的replication.replSetName 或 –replSet 值相同。
此外,在课程材料视频演示中清楚地显示了它的功能正确,与我尝试使用它的方式完全相同。
我已无计可施,非常感谢您的帮助。
Jake