【发布时间】:2022-01-08 21:18:17
【问题描述】:
我们在 mongo 上有一个主节点和两个辅助节点,在自动缩放期间,主节点关闭,辅助节点(以健康者为准)通过选举成为新的主节点。此时不允许写入操作,mongo 简单地拒绝写入查询并出现以下错误。
"errmsg": "not master",
"code": 10107,
"codeName": "NotWritablePrimary",
我们也遇到了错误not master and slaveOk=false,但在连接字符串中设置readPreference=primaryPreferred 后,在主服务器关闭期间允许读取。
自动缩放的原因是高峰时段的负载,这是预期的,因此它会自动缩放到更高的数字。经过探索发现下面的东西
如果主节点发生故障,新的主节点需要 当选。在举行选举的这段时间里,写 操作将失败,因为目前没有主要服务它们。
无法写入 MongoDB 副本集中的辅助节点。
问题:以前有人遇到过这种情况吗?如果这是一种已知行为,我们如何在这段时间内允许写操作?因为它会影响应用程序导致 500 错误。任何建议将不胜感激,在此先感谢!
注意:我们使用的是带有副本的 MongoDB 地图集。我们尝试了 Atlas 的 Test failover 来模拟自动缩放,然后进行了小负载测试以在 DB 上执行读取和写入。 我们正在使用以下
- NodeJs:v12
- NPM:v6
- NestJS: v6
-
@nestjs/mongoose: v6.4
连接字符串选项是
retryWrites=true&w=majority&readPreference=primaryPreferred
【问题讨论】:
标签: node.js mongodb mongoose mongodb-atlas