让我们考虑一个由三个节点(节点1为主节点,节点2和3为次节点)组成的MongoDB副本集,并且发生了一个网络分区,因此节点1失去了与2和3的连接(但2和3是相互连接的)。
因此,在最后,Node2和Node3将选择一个新的主节点(因为它们的分区中有大多数节点)。因此,其中一个(取决于优先级、投票和oplog时间)将以“主要”结束,另一个以“次要”结束。
然而,当旧的主节点(节点1)意识到它不再是主节点时,它将转换到哪个状态?我不是指国家 从某种角度来看 节点2或3的状态(我想节点1会被视为DOWN),但节点1看到的是它自己的状态。
我已经看过了 replica set states in MongoDB official documentation 但我还没有找到一个明确的答案。
谢谢!
每个节点都通过心跳跟踪其他副本集成员的当前状态。当节点2和3意识到节点1没有对其做出响应时,节点1会意识到节点2和节点3没有对其作出响应,因此它应该按照以下方式记录一些内容
can't see a majority of the set, relinquishing primary
然后它将过渡到次要。
节点1应成为次要节点。
您可以通过对部署进行分区来测试这一点(通过 kill -9 启动进程或在防火墙处丢弃流量),连接到节点1并运行 ismaster ismaster响应场的含义是 here .
kill -9
ismaster