我正在阅读有关筏的信息,但是在进行网络分区后达成共识时,我有些困惑。
因此,考虑一个由2个节点组成的集群,即1个领导者,1个跟随者。
在进行分区之前,先写入X条消息,然后成功复制它们,然后再想象是由网络问题引起的分区,所以有2个分区,A(前领导者)和B(前关注者)现在都是领导者(接收写入):
main
在发生分区事件之后,我们已经弄清楚了,会发生什么?
a)我们选出1位新领导人并考虑其履历吗? (删除新关注者的消息? 例如:
before partition | Messages |x| Partition | Messages
Leader | 0 1 2 3 4 |x| Partition A | 5 6 7 8 9
Follower | 0 1 2 3 4 |x| Partition B | 5' 6' 7' 8' 9'
甚至:
0 1 2 3 4 5 6 7 8 9 (total of 10 messages, 5 dropped)
(取决于要成为领导者的节点)
b)我们选出一位新领导人,并找到一种使所有信息达成共识的方法吗?
0 1 2 3 4 5' 6' 7' 8' 9' (total of 10 messages, 5 dropped)
如果是b,有什么具体方法吗?还是取决于客户端的实现? (例如:邮件时间戳...)
答案 0 :(得分:0)
当领导者当选并成功写出该词的初始日志条目时,领导者日志将被视为“日志”。但是,根据您的情况,起始前提是不正确的。在由2个节点组成的集群中,一个节点需要2个投票才能成为领导者,而不是1。因此,在网络分区中,任何一个节点都不会成为领导者。