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 - 使用辅助节点作为种子时写入主节点的主要内容,如果未能解决你的问题,请参考以下文章