我有一个3节点的MongoDB(2.6.3)副本集,我正在测试各种故障情况。
据我了解,如果大多数副本节点不可用,则副本集将变为只读。但我所经历的是,如果我关闭了我的2个辅助节点,那么剩下的最后一个节点(之前是主节点)就变成了辅助节点,我甚至无法从中读取它。
来自文档:
用户可以基于每个连接配置读取首选项 更喜欢读操作在辅助成员上返回。如果 客户端配置读取首选项以允许二次读取,读取 操作可以从未复制的辅助成员返回 更新的更新或操作。从中学读书时,a 查询可能会返回反映先前状态的数据。
听起来我可以将我的客户端配置为允许从辅助节点读取,但由于它是我离开的主节点,因此它应该是所有数据的最新版本。 MongoDB是否使最后一个节点成为辅助节点,即使它完全被数据捕获了?
答案 0 :(得分:1)
正如您已经注意到的那样,一旦您关闭了这两个辅助服务器,您的主要步骤将成为辅助服务器(一旦主服务器失去与大多数成员的连接,这是正常情况)
副本集的默认读取首选项是从主数据库读取,但由于您以前的主数据库不再是主数据库,因为您遇到过,"我甚至无法从主数据库读取。"
您可以在驱动程序/数据库/集合甚至操作基础上更改read-preference。
因为它是我离开的主要节点,所以它应该是所有数据的最新版本。 MongoDB是否使最后一个节点成为辅助节点,即使它完全被数据捕获了?
如上所述,初级版本在降级时变为次要版本,与其最新版本无关。即使由于默认的读取偏好,它也不会读取,如果您将驱动程序首选项更改为次要的,最接近的,则即使单个节点(以前的主要节点)仍然存在,您也能够继续读取。