【问题标题】:Change stream reaction in adding new node to MongoDB replica set将新节点添加到 MongoDB 副本集时更改流反应
【发布时间】:2020-01-07 20:07:06
【问题描述】:

我使用 MongoDB 4.0 作为 3 节点副本集。 2 个数据节点和 1 个仲裁器。我的应用程序(ASP.NET Core 2.2)使用更改流。考虑这种情况,我的主节点关闭,我的辅助节点成为主节点,我在我的副本集中用一个新节点替换关闭的节点并开始同步。在这种情况下,我的变更流会发生什么?

我的第二个问题是,在我的应用程序中,readPreferencesecondary,当我的辅助节点出现故障时,我希望 MongoDB 自动从 primary 读取,但它没有发生,我的应用程序在读取时出现问题.正常吗?

【问题讨论】:

    标签: mongodb mongodb-.net-driver replicaset changestream


    【解决方案1】:

    变更流对副本集选举具有弹性,并且会继续进行,就像什么都没发生一样。来自changestream manual

    更改流游标保持打开状态,直到发生以下情况之一:

    • 游标已显式关闭。
    • 发生无效事件;例如,集合删除或重命名。
    • 与 MongoDB 部署的连接已关闭。
    • 如果部署是分片集群,分片移除可能会导致打开的更改流游标关闭,而关闭的更改流游标可能无法完全恢复。

    副本集选举等所有其他事件都不会影响变更流。

    对于您的第二个问题,这是意料之中的,因为您的阅读偏好明确为 secondary。如果辅助节点不可用,要从主节点读取,您需要使用secondaryPreferred 设置。

    【讨论】:

    • 感谢您的帮助。但是我遇到了一个问题,当我添加一个新节点时,在将新节点与主节点同步期间,当新节点处于STARTUP2 状态时,我的更改流在变为secondary 之前不起作用。
    • Changestreams 将仅返回由大多数副本集持久保存的文档。由于您有一个主次仲裁者,如果次要尚未复制写入,则更改流不会返回它。一旦它具有辅助状态,它就可以复制写入,并且更改流可以返回文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 2017-05-21
    • 2022-01-22
    相关资源
    最近更新 更多