单实例Mongodb副本集 - 无法执行查询/插入操作

d0c*_*age 8 mongodb replicaset

安装mongodb后,我跑mongod

mongod --dbpath <pathtodb> --logpath <pathtolog> --replSet rs0
Run Code Online (Sandbox Code Playgroud)

然后我与mongo shell连接并运行

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

然后我尝试将文档插入到集合中,但收到错误:

> db.blah.insert({a:1})
WriteResult({ "writeError" : { "code" : undefined, "errmsg" : "not master" } })
Run Code Online (Sandbox Code Playgroud)

rs.status(),我看到的状态是REMOVED:

> rs.status()
{
        "state" : 10,
        "stateStr" : "REMOVED",
        "uptime" : 1041,
        "optime" : Timestamp(1429037007, 1),
        "optimeDate" : ISODate("2015-04-14T18:43:27Z"),
        "ok" : 0,
        "errmsg" : "Our replica set config is invalid or we are not a member of it",
        "code" : 93
}

我不知道我可以做些什么来搞砸这个.这应该是我认为的.我如何通过这个?

小智 7

这里的问题是你跑了rs.initiate()......作为空!您没有告诉哪些机器属于该副本集.

所以..

rs.initiate({
      _id: "rs0",
      version: 1,
      members: [
         { _id: 0, host : "address.to.this.machine:27017" }
      ]
   }
)
Run Code Online (Sandbox Code Playgroud)

  • 空的`rs.initiate()`很好,您只需要遵循`rs.add(“ db.example.com”)` (2认同)

liu*_*ihe 6

如上述答案所述,配置未正确设置。

我试图重新初始化副本,但收到错误消息:

singleNodeRepl:OTHER> rs.initiate({ _id: "rs0", members: [ { _id: 0, host : "localhost:27017" } ] } )
{
    "info" : "try querying local.system.replset to see current configuration",
    "ok" : 0,
    "errmsg" : "already initialized",
    "code" : 23,
    "codeName" : "AlreadyInitialized"
}
Run Code Online (Sandbox Code Playgroud)

解决方案是对reconfmongo:

singleNodeRepl:OTHER> rsconf = rs.conf()
singleNodeRepl:OTHER> rsconf.members = [{_id: 0, host: "localhost:27017"}]
[ { "_id" : 0, "host" : "localhost:27017" } ]
singleNodeRepl:OTHER> rs.reconfig(rsconf, {force: true})
{ "ok" : 1 }
singleNodeRepl:OTHER>
singleNodeRepl:SECONDARY>
singleNodeRepl:PRIMARY>
Run Code Online (Sandbox Code Playgroud)