PyMongo - 使用辅助节点作为种子时写入主节点

Posted

技术标签:

【中文标题】PyMongo - 使用辅助节点作为种子时写入主节点【英文标题】:PyMongo - Write to Primary when using Secondary as seed 【发布时间】:2021-01-20 13:04:58 【问题描述】:

我正在尝试连接到我的 MongoDB 并更新文档。 我们使用副本服务器作为种子,然后我们想要编写一个集合(具体来说,更新一个文档)。

无论我做什么,每次我尝试更新给定文档时,都会收到以下错误:NotMasterError: not master, full error: 'ok': 0.0, 'errmsg': 'not master', 'code': 10107, 'codeName': 'NotMaster'

我尝试将读取优先级更改为 Primary,将写入关注点更改为 w: 1,但似乎没有任何效果。

调试的时候可以看到客户端发现了网络中的所有机器,包括实际的master。

使用另一种语言的 Mongo 库(Scala 中的 Reactivemongo),这是自动完成的,但对于 PyMongo,我似乎很挣扎。如何确保将更新转发到主节点?

如果有人能帮忙,那就太好了:)

【问题讨论】:

【参考方案1】:

读取偏好适用于读取。它对写入没有影响。所有写入都必须发送到主节点。

您应该连接到副本集(也称为“发现拓扑”)而不是使用直接连接,然后指定辅助读取的读取首选项。

【讨论】:

谢谢,成功了!【参考方案2】:

感谢@D. SM 的回答,我确保在初始化 MongoClient 时,我通过添加关键字参数连接到特定的副本集: client = MongoClient(uri, replicaset='my-replica-set-name').

要找出副本集名称是什么(如果您不知道),您可以查看您的服务器状态并进入 conf 密钥repl.setName

再次感谢:)

【讨论】:

以上是关于PyMongo - 使用辅助节点作为种子时写入主节点的主要内容,如果未能解决你的问题,请参考以下文章

MySQL半同步复制

从 mongodb atlas 复制到本地?

硬核干货!Redis 分布式集群部署实战

Pymongo 没有修改所有匹配的文档

mysql —复制

Pymongo - 在 mongodb 副本集中查找主/主节点名称