无法从副本集中的最后一个剩余节点读取

时间:2014-08-12 15:44:53

标签: mongodb

我有一个3节点的MongoDB(2.6.3)副本集,我正在测试各种故障情况。

据我了解,如果大多数副本节点不可用,则副本集将变为只读。但我所经历的是,如果我关闭了我的2个辅助节点,那么剩下的最后一个节点(之前是主节点)就变成了辅助节点,我甚至无法从中读取它。

来自文档:

  

用户可以基于每个连接配置读取首选项   更喜欢读操作在辅助成员上返回。如果   客户端配置读取首选项以允许二次读取,读取   操作可以从未复制的辅助成员返回   更新的更新或操作。从中学读书时,a   查询可能会返回反映先前状态的数据。

听起来我可以将我的客户端配置为允许从辅助节点读取,但由于它是我离开的主节点,因此它应该是所有数据的最新版本。 MongoDB是否使最后一个节点成为辅助节点,即使它完全被数据捕获了?

1 个答案:

答案 0 :(得分:1)

正如您已经注意到的那样,一旦您关闭了这两个辅助服务器,您的主要步骤将成为辅助服务器(一旦主服务器失去与大多数成员的连接,这是正常情况)

副本集的默认读取首选项是从主数据库读取,但由于您以前的主数据库不再是主数据库,因为您遇到过,"我甚至无法从主数据库读取。"

您可以在驱动程序/数据库/集合甚至操作基础上更改read-preference

  

因为它是我离开的主要节点,所以它应该是所有数据的最新版本。 MongoDB是否使最后一个节点成为辅助节点,即使它完全被数据捕获了?

如上所述,初级版本在降级时变为次要版本,与其最新版本无关。即使由于默认的读取偏好,它也不会读取,如果您将驱动程序首选项更改为次要的,最接近的,则即使单个节点(以前的主要节点)仍然存在,您也能够继续读取。