commit时机:
在领导⼈将创建的⽇志条⽬复制到⼤多数的服务器上的时候,⽇志条⽬就会被提交。
同时,领导⼈的⽇志中之前的所有⽇志条⽬也都会被提交,包括由其他领导⼈创建的条⽬。⼀旦跟随者知道⼀条⽇志条⽬已经被提交,那么他也会将这个⽇志条⽬应⽤到本地的状态机中(按照⽇志的顺序)。
1,领导⼈在⼀个任期⾥在指定的⼀个⽇志索引位置最多创建⼀条⽇志条⽬,同时⽇志条⽬在⽇志中的位置也从来不会改变
2,在发送附加⽇志 RPC 的时候,领导⼈会把新的⽇志条⽬紧接着之前的条⽬的索引位置和任期号包含在⾥⾯。如果跟随者在它的⽇志中找不到包含相同索引位置和任期号的条⽬,那么他就会拒绝接收新的⽇志条⽬
如果一个节点在term=100时成为领导人后,它一直不宕机,大部分节点的term是不是就不会变,一直保持为100????
不对,当其它节点断开后,不断发出选举,term一直递增,然后重新加入集群,此时,会拒绝当前领导人的appendEntry,并把自己的term返回,当前领导人收到后会更新自己的term,并退化为follower状态,并重新发起选举
心跳检查:
收到心跳发出的AppendEntries时,即使没有携带任何数据,也要做log的检查。这样是为了及时更新不一致的follower。
选举问题:短的,缺失的日志可能最后一个条目的term比长的,完整的日志最后一个条目的term新???或者说:短的,缺失日志条目的节点会选举成功从而覆盖完整的节点?
不可能,见下图。也是一个归纳过程。图中T1>T2>T3
或者说比其它节点的最后一个条目旧。