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

单实例Mongodb副本集-无法执行查询/插入操作,mongodb,replicaset,Mongodb,Replicaset,安装mongodb后,我用 mongod --dbpath <pathtodb> --logpath <pathtolog> --replSet rs0 然后,我尝试将文档插入到集合中,但收到错误: > db.blah.insert({a:1}) WriteResult({ "writeError" : { "code" : undefined, "errmsg" : "not master" } }) 查看rs.status(),我看到状态为已删除: > rs

安装mongodb后,我用

mongod --dbpath <pathtodb> --logpath <pathtolog> --replSet rs0
然后,我尝试将文档插入到集合中,但收到错误:

> db.blah.insert({a:1})
WriteResult({ "writeError" : { "code" : undefined, "errmsg" : "not master" } })
查看
rs.status()
,我看到状态为
已删除

> 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 } >rs.地位() { “国家”:10, “stateStr”:“已删除”, “正常运行时间”:1041, “optime”:时间戳(1429037007,1), “优化”:ISODate(“2015-04-14T18:43:27Z”), “ok”:0, “errmsg”:“我们的副本集配置无效或我们不是它的成员”, “代码”:93 }
我不知道我能做些什么把事情搞砸。我想这应该行得通。我如何克服这个问题?

这里的问题是您运行了
rs.initiate()
。。空荡荡的!你没有告诉什么机器属于那个复制集

所以


我也面临同样的问题,我尝试了以下步骤

注意:如果您已经安装了群集,请按照我的步骤操作

  • 我停止了特定服务器(主机:“address.to.this.machine:27017”)
  • 删除mongod.lock文件
  • 再创建一个数据目录 -(数据目录:/data/db,新数据目录:/data/db\rs0)

  • 更新**配置**文件 -更改dbpath(“/data/db\u rs0”), -选中bindIP(默认值:127.0.0.0到0.0.0.0)

  • 检查主机名和主机

    主机名

    sudo vi/etc/hosts

添加到主机

         127.0.0.0 hostname

         127.0.1.1 hostname

        (add your Public/Private IP)   hostname 
  • 在中启动MONGODB服务器

    sudo/usr/bin/mongod-f/etc/mongod.conf&

初始化({{u-id:“rs0”,成员:[{u-id:0,主机名:“hostname:27017”}]})

rs.地位()

{

“成员”:[

]

“好”:1

}


--------谢谢-------

如上所述,配置设置不正确

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

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"
}
解决方案是
reconf
mongo:

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>

简短回答:

我需要做:

rs.initiate({_id:'rs0', version: 1, members: [{_id: 0, host:'localhost:27017'}]}
而不是
rs.initiate()

长答案:

我几乎和@Madbreaks和@Yihe的评论一样,但我的背景不同,所以我在这里添加我的评论

背景

我使用了mongoDB的docker容器,并通过
rs.initiate()
启动了复制集。(数据卷已装载到主机,但不在本主题范围内)

发生了什么事

当我重新启动mongoDB容器时,出现了错误“MongoError:notmaster and slaveOk=false”。是的,错误消息与@d0c_s4vage的不同,但解决方法与@Yihe的相同

根本原因

根本原因是动态分配的主机名,如下所示:

rs0:PRIMARY> rs.conf()
{
    "_id" : "rs0",
    ...
    "members" : [
        {
            ...
            "host" : "ee4ed99b555e:27017",  # <----- !!!!
rs0:PRIMARY>rs.conf()
{
“_id”:“rs0”,
...
“成员”:[
{
...

“主机”:“ee4ed99b555e:27017”,副本集中只有一个成员。我正试图将其用作副本集,以便跟踪oplog并查看发生的更改。由于这只是一个测试设置,请将其删除并重新开始。我们做了一些事情来搞乱它,但我们无法知道是什么,除非看到rs.conf(),至少是.Hrmm。这似乎起作用了。不知道到底是什么导致了问题。现在起作用了…空的
rs.initiate()
就可以了,您只需要使用
rs.add(“db.example.com”)这样做就可以了
本地主机地址是127.0.0.1,而不是127.0.0.0。您指的是群集,而实际上指的是副本集…;-)非常感谢!遇到了完全相同的问题。在使用本地主机后重新启动/更新容器时应该很好。
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>
rs.initiate({_id:'rs0', version: 1, members: [{_id: 0, host:'localhost:27017'}]}
rs0:PRIMARY> rs.conf()
{
    "_id" : "rs0",
    ...
    "members" : [
        {
            ...
            "host" : "ee4ed99b555e:27017",  # <----- !!!!