raft 是一个 副本一致性协议
1, 我们可以类比的是 zookeper 的副本一致性机制
2, kafka 的 ISR 机制
3, 常用的主从复制机制。
首先可以总结一下,分布式复制常常遇到的case:
假设有3台机器A-B-C,Client 写入 A(leader),然后复制到B-C
1)写入A成功,没有开始复制,然后A挂了
2)写入A成功,复制到了B,B恢复已经完成写入,B的ack 到达A, C未开始,A挂了
3)写入A成功,复制到了B,B恢复已经完成写入,B的ack 到达A, C完成写入,ack未达到,A挂了
4)写入A成功,复制到了B,B恢复已经完成写入,B的ack 到达A, C完成写入,ack达到,A挂了
5)写入A成功,复制到了B,B恢复已经完成写入,B的ack 未到达A, C未开始,A挂了
6)写入A成功,复制到了B,B恢复已经完成写入,B的ack 未到达A, C开始写,ack未达到,A挂了
7)写入A成功,复制到了B,B恢复已经完成写入,B的ack 到达A, C开始写,ack达到,A知道所有状态,写回Client的时候,Ack丢失
zookeper解决上述问题的方法:
raft 解决上述问题的方法:
refer: https://my.oschina.net/pingpangkuangmo/blog/782702
refer:raft论文:https://docs.qq.com/doc/DY0VxSkVGWHFYSlZJ
使用raft实现一个集群(hugegraph 例子):
【待续】









网友评论