课程名称:课程版本 301 3.9.1 Data Replicas
学习时长:40min
课程收获:
理解 Raft 协议的基本概念,了解 TiDB 中副本操作流程
课程内容:
raft 协议
Raft是一个一致性协议.raft具有以下特性:
- Leader 选举。
- 成员变更 添加副本,删除副本,转移leader。
- 日志复制 将命令作为日志条目传递到其他节点。
Raft 运行过程中有强Leader,全权接收客户端的请求,并将命令作为日志条目传递到其他节点,在确认安全的时候将命令提交。出现故障时,会选举新的leader。
tikv 与 raft
TiKV基于Raft协议进行数据复制,每次数据变更都会记录到Raft日志中,由leader 节点对外提供读写请求,leader 将命令请求以Raft日志形式分发到follower节点,follower进行处理,当数据都安全且准确的同步至Raft group中的多个节点时,让后leader向客户端反馈已经完成。可以确保数据的安全性和一致性。如果某个节点长时间落后,leader 会发送snapshot给该节点,提高系统运行效率。
添加新的节点
现有4个TiKV节点,向该集群中添加一个新的节点E
初始化集群
增加节点E,系统发现新的节点E之后会调度一些region到其他节点,将整个集群的存储均匀化。
1 节点A迁移 的region1之前会进行leader选举,将region1的leader迁移到节点B的region1。然后在节点E上添加region1.
2 在节点E上添加region1之后,节点A 会删除region1,数据始终保持三个region 。
当发生节点缺失时比如宕机、网络中断等情况。在上面的案例中,如果节点E发生异常,超过默认30分钟无法正常加入集群,leader 会将从现有的节点中寻找一个合适的节点,重建节点E上的region副本。如果后来节点E重新加入到集群中,系统会自动判断副本的状态,并作出相对应的操作。