我正在使用MongoDB 4.0作为3个节点副本集。 2个数据节点和1个仲裁器。我的应用程序(ASP.NET Core 2.2)使用更改流。考虑这种情况,我的主节点出现故障,我的辅助节点成为主要节点,我在副本集中用新节点替换了发生故障的节点,并开始进行同步。在这种情况下,我的变更流程会怎样?
[我的第二个问题是,在我的应用程序中,readPreference
为secondary
,当我的辅助节点出现故障时,我希望MongoDB自动从primary
中读取,但是没有发生,并且我的应用程序存在读取问题。正常吗?
变更流可以抵抗副本集选举,并且将继续进行,好像什么也没有发生。从changestream manual:
更改流游标保持打开状态,直到发生以下情况之一:
- 游标已明确关闭。
- 发生无效事件;例如,收藏集放置或重命名。
- 与MongoDB部署的连接已关闭。
- 如果部署是分片群集,则分片删除可能会导致打开的更改流游标关闭,并且关闭的更改流游标可能无法完全恢复。
[所有其他事件,例如副本集选举将不会影响变更流。
对于您的第二个问题,这是可以预期的,因为您的读取首选项明确为secondary
。要从初级读取,如果次级不可用,则要使用secondaryPreferred设置。