从技术上讲,有两种类型的多数。正如我所说,他们是“选举多数”和“数据多数”。
仲裁者应该帮助“选举多数”,如果 S 出现故障,它有助于维持 PSA 架构中的主要可用性。但是,它们不是“数据多数”的一部分。
相比之下,“数据多数”既用于投票也用于确认多数读取和多数写入。
根据设计,变更流将返回提交给投票节点“数据多数”的文档。这是因为传播给他们的写入不会被回滚。如果变更流声明文档已写入,然后回滚,然后必须发出“不等待,从头开始,写入没有发生”,这将是令人困惑的。
因此,就其本质而言,仲裁器与多数读取和多数写入场景(例如变更流或事务)不兼容。但是,只要您知道对它们有什么期望,仲裁器仍然在副本集中占有一席之地。
请参阅哪个版本的默认 mongod 写入关注点是什么?更完整地解释写问题和仲裁的影响。
次要输入STARTUP2
还不是次要的。它可能会在选举中投票,但它不会承认多数写入,因为它仍在启动中。
就变更流而言,由于在 PSA 架构中,“数据多数”实际上只是 PSA 的 PS 部分,因此没有一个数据承载节点可以离线以维护多数读写。
最好的解决方案是用一个实际的数据承载节点替换仲裁器。这样,您可以进行多数写入、多数读取,并且可以在一个节点关闭的情况下仍保持多数。