组队大项目(2)Raft理论| 青训营笔记

108 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第32天

小组对Raft基础理论进行研究,最后整理成文档:

Raft的简单概述: Raft是一种较容易理解的一致性协议。分布式存储系统通常会维护多个副本,这样不仅能提高系统的可用性,因为有多个副本所以性能也有提高。但是多副本带来的代价就是分布式存储系统的核心问题之一:  需要维护多个副本的数据一致性。

raft构建元数据集群的方式

需要启动至少三个NN,一个是leader,另两个是follower

如何发现和解决

  1. leader调用follower的heart beat,定期上报自身信息
  2. follower接收到维护一个计时器,heart beat会重置,超过限时,发起选举,follower变成candidate,向其他NN发投票请求
  3. NN在计时器期间,只投一次票,如果candidate也收到其他服务器的投票请求,而且请求带的candidate轮次更高,则投票给其他服务器,反之拒绝
  4. 选举后在全局变量注册leader

如何实现leader和follower的文件树同步?

每个请求要确保所有leader和follower都写入成功才返回

主从复制,raft保证日志一致性的方式

启动两个NN,一个提供服务,一个备份

如何发现和解决

  1. 在zk注册(简单点是不是起个新server,检测心跳,俗称NN的NN),如果lease到期,则zk会发布消息,备份NN接收到消息,自动成为leader向外提供服务,利用全局锁保证只有一个leader
  2. leader通过日志复制向follower传递数据,需要有版本号,一半及以上返回ok则成功
  3. follower会使用前一个日志的任期号和日志索引来对比自己的数据:
  4. 如果相同,接收复制请求,回复ok;
  5. 否则回拒绝复制当前日志,回复error。