我们已经部署了 mongodb 副本集:
mongod --port 27017 --dbpath /opt/eltropy/mongodb/data/rs0-1 --replSet rs0 --smallfiles --oplogSize 128
mongod --port 27018 --dbpath /opt/eltropy/mongodb/data/rs0-1 --replSet rs0 --smallfiles --oplogSize 128
mongod --port 27019 --dbpath /opt/eltropy/mongodb/data/rs0-1 --replSet rs0 --smallfiles --oplogSize 128
我从 mongdb 文档中了解到的内容;即使您的两个节点出现故障,我们仍然应该能够从剩余的工作节点(在这种情况下为单个工作节点)读取数据。但是,写入是不可能的。
但即使是读取也无法在可用节点上工作。我也尝试添加一个仲裁器,但仍然没有运气。其余节点仍处于二级阶段。
我正在使用 mongodb 3.0。
原因
答案很简单:当三个投票节点中的两个出现故障时,剩下的一个将恢复为次要节点,根据定义,不能向其写入。默认的读取首选项是仅读取和写入副本集的主节点。因此,当副本集中只有一个辅助副本时,您无法读取。
tl;博士
您必须至少将读取首选项更改为primaryPreferred,以允许从辅助读取。
MongoDB 节点将投票选出谁可以成为下一个 Primary,并获得多数选票。
解决方案:
(MongoDB 有一些免费的大学/课程,他们通过练习解释如何处理所有这些情况。)