MongoDB 如何检测 PSA 架构中的多数?
How MongoDB detects majority in PSA architecture?
假设我有一个包含 3 个节点(2 个数据节点和一个仲裁器 (PSA))的副本集。当由于某种原因我的一个数据节点出现故障并且我将其恢复时,在与主节点同步期间,它处于状态 STARTUP2
。在他的时候我会失去我的 change stream
因为我的副本集有 2 个数据节点但我没有大多数节点要读取。
我该如何处理这个问题?
我也看了this MongoDB doc。是否可以将主节点 priority
值设置为高于辅助节点(即与主节点同步)?即使我的辅助节点处于 STARTUP2
状态,我也可以通过这样做获得多数吗?
技术上有两种类型的多数。正如我所说,它们是 "election majority" 和 "data majority".
Arbiters 应该帮助 "election majority",如果 S 出现故障,它有助于在 PSA 架构中维持主要可用性。但是,它们不是 "data majority".
的一部分
"Data majority",相比之下,既是投票又是认可majority-read and majority-write。
Changestreams 按照设计将 return 提交给 "data majority" 投票节点的文档。这是因为传播给它们的写入不会是 rolled back。如果 changestream 声明文档已写入,然后回滚,然后将不得不发出 "no wait, scratch that, the write didn't happen".
,这将令人困惑
因此,就其本质而言,仲裁器与多数读取和多数写入场景不兼容,例如变更流或事务。 但是 仲裁者在副本集中仍然占有一席之地,前提是您知道对他们的期望。
请参阅 以更完整地解释写入问题和仲裁器的影响。
STARTUP2
中的一个辅助还不是辅助。它可能会在选举中投票,但它不会承认多数写入,因为它仍在启动中。
在 changestream 方面,因为在 PSA 架构中 "data majority" 实际上只是 PSA 的 PS 部分,none数据承载节点可以脱机以保持大多数读写。
最好的解决方案是用实际的数据承载节点替换仲裁器。这样,你可以拥有多数写入,多数读取,并且可以在一个节点宕机的情况下仍然保持多数。
假设我有一个包含 3 个节点(2 个数据节点和一个仲裁器 (PSA))的副本集。当由于某种原因我的一个数据节点出现故障并且我将其恢复时,在与主节点同步期间,它处于状态 STARTUP2
。在他的时候我会失去我的 change stream
因为我的副本集有 2 个数据节点但我没有大多数节点要读取。
我该如何处理这个问题?
我也看了this MongoDB doc。是否可以将主节点 priority
值设置为高于辅助节点(即与主节点同步)?即使我的辅助节点处于 STARTUP2
状态,我也可以通过这样做获得多数吗?
技术上有两种类型的多数。正如我所说,它们是 "election majority" 和 "data majority".
Arbiters 应该帮助 "election majority",如果 S 出现故障,它有助于在 PSA 架构中维持主要可用性。但是,它们不是 "data majority".
的一部分"Data majority",相比之下,既是投票又是认可majority-read and majority-write。
Changestreams 按照设计将 return 提交给 "data majority" 投票节点的文档。这是因为传播给它们的写入不会是 rolled back。如果 changestream 声明文档已写入,然后回滚,然后将不得不发出 "no wait, scratch that, the write didn't happen".
,这将令人困惑因此,就其本质而言,仲裁器与多数读取和多数写入场景不兼容,例如变更流或事务。 但是 仲裁者在副本集中仍然占有一席之地,前提是您知道对他们的期望。
请参阅
STARTUP2
中的一个辅助还不是辅助。它可能会在选举中投票,但它不会承认多数写入,因为它仍在启动中。
在 changestream 方面,因为在 PSA 架构中 "data majority" 实际上只是 PSA 的 PS 部分,none数据承载节点可以脱机以保持大多数读写。
最好的解决方案是用实际的数据承载节点替换仲裁器。这样,你可以拥有多数写入,多数读取,并且可以在一个节点宕机的情况下仍然保持多数。