gpt4 book ai didi

mongodb,复制和错误 : { "$err" : "not master and slaveOk=false", "code":13435 }

转载 作者:IT老高 更新时间:2023-10-28 11:11:42 26 4
gpt4 key购买 nike

我第一次尝试了 mongo 副本集。

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

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

此时一切都很好。当我去 http://ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com:28017/_replSet我看到我有一个主要、次要和仲裁者。

好的,现在开始测试。

在主上创建一个数据库是这样的代码:

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

在二级上,然后我这样做并得到以下错误:

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

我对 mongodb 和复制非常陌生,但我认为如果我在一个中做某事,它会转到另一个。那么,如果我在一个记录中添加一条记录,我需要做什么才能跨机器复制?

最佳答案

您必须设置“辅助正常”模式以让 mongo shell 知道您允许从辅助读取。这是为了保护您和您的应用程序不会意外执行最终一致的读取。您可以在 shell 中执行此操作:

rs.secondaryOk()

之后就可以正常从secondary查询了。

关于“最终一致性”的说明:在正常情况下,副本集辅助节点在一秒或更短的时间内拥有与主节点相同的所有数据。在非常高的负载下,您写入主服务器的数据可能需要一段时间才能复制到辅助服务器。这被称为“副本滞后”,从滞后的辅助读取被称为“最终一致”读取,因为虽然新写入的数据会在某个时候出现(除非网络故障等),但它可能不会立即可用。

编辑:你只需要在从辅助节点查询时设置secondaryOk,每个 session 只需要设置一次。

关于mongodb,复制和错误 : { "$err" : "not master and slaveOk=false", "code":13435 },我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8990158/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com