MongoDB,复制和错误:{“$err”:“Notmaster andslveOk=false”,“code”:13435}

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (45)

我在EC2上使用ubuntu,并启动了三个实例。我使用了每个实例的私有IP地址。我选的是主要的,下面是代码。

mongo --host Private IP Address
rs.initiate()
rs.add(“Private IP Address”)
rs.addArb(“Private IP Address”)

在主创建数据库上,下面的代码是:

use tt
db.tt.save( { a : 123 } )

然后,在第二步中,我执行此操作并获得以下错误:

db.tt.find()
error: { "$err" : "not master and slaveOk=false", "code" : 13435 }

我对MongoDB非常陌生,并且复制,但我认为如果我在其中一个做了什么,它就会去另一个。那么,如果我在一个文件中添加了一个记录,那么我需要做什么才能在机器之间复制呢?

提问于
用户回答回答于

避免打字rs.slaveOk()每次都这样做:

创建一个名为replStart.js,包含一行:rs.slaveOk()

然后包括--shell replStart.js当你发射蒙戈炮弹的时候。当然,如果在本地连接到单个实例,这不会节省任何类型。

用户回答回答于

rs.slaveOk()

之后,可以正常地从第二次查询。

关于“最终一致性”的注意事项:在正常情况下,复制集二级在一秒钟或更短的时间内拥有所有与主数据相同的数据。在非常高的负载下,写入主服务器的数据可能需要一段时间才能复制到次要文件。这就是所谓的“复制延迟”,从滞后的二级读取被称为“最终一致”读取,因为,虽然新写入的数据会在某个点显示(除非网络故障,等等),但它可能无法立即获得。

编辑:只需要在从第二次查询时设置slveok,并且每个会话只需设置一次。

扫码关注云+社区