【问题标题】:What is the default mongod write concern in which version?哪个版本的默认 mongodb 写入关注点是什么?
【发布时间】:2022-02-11 15:38:07
【问题描述】:

我在mongodb's documentation 中找不到默认写入关注点是什么以及如何定义“确认写入”。 似乎这在整个不同的 mongodb 版本中都发生了变化,例如 v3.2 documentation 所示:

在 3.2.6 之前的 3.2 版本中,如果启用了日志,w: "majority" 意味着 j: true。对于早期版本的 MongoDB,w:majority" 并不意味着日志。

或者:

3.0 版更改:在 MongoDB 3.0 之前,w:“majority”指的是副本集的大多数成员。

或者:

在 2.6 版中更改:在主/从部署中,MongoDB 将 w: "majority" 视为等同于 w: 1。在早期版本的 MongoDB 中,w: "majority" 在主/从部署中产生错误。

另外,我想知道“多数”是指v3.2 documentation 中的所有投票节点:

请求确认写入操作已传播到大多数投票节点 [1],包括主节点。

这是否意味着仲裁者也是投票节点?因此,例如,如果我有一个由 2 个数据承载节点和 1 个仲裁器组成的 replSet,即使 1 个数据承载节点因写入已被其余数据承载节点确认而关闭,具有写入关注“多数”的写入操作也会成功和仲裁者,因此是多数?

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    从 2012 年的 MongoDB 2.2 开始,MongoDB 中的默认写入问题就一直是 w:1

    在当前 MongoDB 版本(3.2.6 及更高版本)中,您可以使用三种不同的设置来设置写入关注点:

    • w 设置:在宣布写入成功之前应该有多少节点确认写入。默认为 1,表示主节点的确认就足够了。
    • j 设置:在确认之前是否必须记录写入?默认取决于writeConcernMajorityJournalDefault
    • writeConcernMajorityJournalDefault:如果您为您的写入指定w:majority 写入关注设置而不设置j,那么隐含的j 值是多少?默认为true(写入应在大多数投票节点中被记录在确认之前)。

    还有一个wtimeout setting 来配置MongoDB 在通知客户端写入未被确认之前应该等待写入关注满足多长时间。否则,等待写关注得到满足的写可以永远等待而不是失败。

    这里的特殊设置是w:majority。这意味着写入必须传播到要确认的副本集中的大多数投票节点(以及它们的日志)。在提供良好性能的同时,这可以说是最安全的设置,因为:

    • 它可以防止在发生故障时回滚已确认的写入。
    • 它调节应用程序的吞吐量,使其发送写入的速度不会超过副本集可以处理的速度(由于硬件限制、网络状况等)。

    如您所想,投票节点确实包括仲裁者。因此,在具有主次仲裁器设置的副本集中,w:majority 可能会在以下情况下失败:

    • 某个数据承载节点由于某种原因离线。
    • 副本集仍然在线,具有可写的主节点,因为拓扑现在是主仲裁器离线。
    • w:1 的写入将照常成功,但这些写入可能会被回滚(因为它没有写入大多数承载投票数据的节点)。
    • 由于仲裁器不携带数据,w:majority 写入将失败(或无限期等待),因为仲裁器被计为投票节点。

    因此,如果您计划在应用程序中使用w:majority,则不建议使用仲裁器。

    请注意,也不建议在分片集群中形成分片的 3 节点副本集中使用仲裁器,因为块移动需要w:majority。一个分片中的数据承载节点故障将不利于块迁移操作。

    【讨论】:

    • 感谢您的详细解答!很高兴知道 w:1 是自 mongodb v2.2 以来的默认写入关注点。我错误地认为它在任何版本都更改为w:majority。知道仲裁者永远不会承认写入并且他们被包括在法定人数中也很好。由此产生的影响是如此重要,以至于 mongodb 的文档应该非常清楚。不幸的是,事实并非如此。
    【解决方案2】:

    来自 mongoDB 5.0,w: majority is the default write concern for most MongoDB configurations。这大部分是因为implicit default write concern 的值取决于您的配置。

    例如,在PSA 副本集中,它是1。但在 PSS(推荐)副本集中,它的值将是 ma​​jority

    【讨论】:

      【解决方案3】:

      在 MongoDB v5.0 中,默认的 writeConcern 是 w:majority。

      在之前的版本

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-22
        • 2015-01-13
        • 1970-01-01
        • 1970-01-01
        • 2016-09-09
        • 2012-09-11
        • 2017-12-04
        • 1970-01-01
        相关资源
        最近更新 更多