首页 > 解决方案 > 将新节点添加到 MongoDB 副本集时更改流反应

问题描述

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

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

标签: mongodbmongodb-.net-driverreplicasetchangestream

解决方案


变更流对副本集选举具有弹性,并且将继续进行,就好像什么都没发生一样。从变更流手册

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

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

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

对于您的第二个问题,这是可以预期的,因为您的阅读偏好是明确的secondary。如果辅助不可用,要从主读取,您需要使用辅助首选设置。


推荐阅读