3

假设一个 3 成员 raft 集群 a[master],b,c

客户端将日志发送到 a,a 将其复制到 b 和 c,a 将日志应用到状态机并响应客户端。然后 a 在 b 和 c 有机会将提交的状态复制到 b 和 c 之前崩溃。

b 替换 a 作为集群领导者。当日志已经响应客户端时,未提交的日志会发生什么?

它会被 b 再次复制还是被丢弃?

然后假设一个 4 成员 raft 集群 a[master],b,c,d

客户端将日志发送到 a,a 将其复制到 b 和 c(而不是 d),a 将日志应用到状态机并响应客户端,然后 a 在将提交的状态复制到 b、c 和 d 之前崩溃。

d 替换 a 成为集群领导者。那么在日志已经响应客户端的情况下,未提交的日志会发生什么?它会被丢弃吗?

4

2 回答 2

3

我认为您将“承诺”与“应用”混淆了。该条目被视为已提交,因为它已保存在大多数服务器中,尽管尚未应用。B 之所以成为领导者,是因为它的日志是最新的,并且当它设法应用自己任期内的一个条目时,也将应用来自 A 的那个条目。

在您的第二种情况下,D 不能成为领导者,因为它的日志不是最新的,并且 B 和 C 不会授予他们的投票。

于 2016-01-09T03:17:28.410 回答
1
于 2016-03-12T09:36:34.407 回答