文字内容
1. 分布式一致性raft实现原理 - 峰云就她了 - xiaorui.cc
2. 介绍 什么是一致性协议 ? raft有哪些特点 ? raft vs paxos ? raft的构成组件及实现原理 ? 各种所谓奇葩的raft场景 ? 如何实现raft ?
3. 单节点环境 client server 存在数据一致性问题 ?
4. 多节点环境 node 1 node 2 那么如何保证数据的一致性 ? node 3
5. 角色 Follower Candidate Leader
6. KeyWorld 定时器 Term 时间片 Term ID N/2 + 1 Heartbeats
7. KeyWorld 选举成Leader需提供TermID 和 LogIndex Leader 绝对不会删除自己的日志 客户端自己携带ID帮助raft保持幂等性 一条记录提交了,那么它之前的记录一定都是 commited.
8. KeyWorld 节点之间的Term和索引一致, 我们就认为数据是 一致的. 在一个Term里只会有一个Leader 每个Follower只能选一个Leader
9. KeyWorld currentTerm 服务器最后一次知道的任期号(初始化为 0,持续递增) voteFor 在当前获得选票的候选人的 Id log[] 日志条目集( 状态机指令及TermId ) commitIndex 已知最大的索引值 nextIndex[] 每个follower的下一个索引值
10. Vote RPC Term 候选人的任期号 candidateid ID lastLogIndex 候选人的最后日志的索引值 lastLogTerm 候选人最后日志的任期号 Term 当前的任期号, 用于领导人去更新自己 voteGranted True or False
11. most simple election vote for me OK ! OK ! vote for me
12. simple election vote for me F-1 C-1 timer 155 Term 2 NO Timer 183 Term 3 Condition比Follwer的term id小 不影响 “F” 定时器在转 ! C 已得知情况, 故意Vote超时, 等他人选举. F-2 vote for me Timer 170 Term 3
13. simple election C-1 voteGranted=true, term=2 RequestVote(term=2) same term id wait timeout! C-2 NO ! Term not match RequestVote(term=2)
14. hard election -1 vote for me OK ! 都变为一个term id ! term conflict not n/2 + 1 not term match vote for me OK !
15. summery election 过程 定时器触发, followers把current_term_id + 1 改变成candidate状态 发送RequestVoteRPC请求 结果 成功选举 别人被选 重新选
16. Client Works with leader Leader return to response when it commits an entry ! Assign uniquqeID to every command , Leader store latest ID with response.
17. client process 1 2 Hello Raft Only log entry ! 1 2 Hello Raft 1 2 Hello Raft
18. Log Replication 默认心跳为 50 ms 默认心跳超时为 300ms 每次心跳的时候做 Log entry \ commit 超过 n/2+1 就算成功
19. Log RPC Term 领导人的任期号 LeaderID 领导人的 Id,以便于跟随者重定向请求 pervLogIndex 新的日志条目紧随之前的索引值 entries[] LeaderCommit 需要存储当然日志条目(表示心跳时为空;一次性发送多个是为了 提高效率) 领导人已经提交的日志的索引值 Term 当前的任期号, 用于领导人去更新自己 success 跟随者包含了匹配上 prevLogIndex 和 prevLogTerm 的日志时为真
20. log replication - 1 1 Hello 1 Hello Heartbaet & Append Entries Only log entry ! 1 Heartbaet & Append Entries Hello
21. log replication - 2 1 1 Hello Hello OK ! Leader commit ! 1 OK ! Hello
22. log replication - 3 1 Heartbaet & commit Hello 1 F_1 Le_1 Hello Follower commit ! Heartbaet & commit F_2 1 Hello
23. 常见疑难杂症
24. if a node reply timeout ? Heartbaet & commit 1 Hello F_1 1 Hello 1 Hello Le_1 timeout !!! F_2 F_2 如何保持数据一致性 ? Leader会重试 !
25. Leader crash 1 1 F_1 Hello Le_1 Hello Log entry Ack 1 Hello F_2 1 F_3 Leader在本地commit后, 发给follower commit 之前crash ! Hello 还在么? Hello
26. Follower crash 1 2 Hello Raft F_1 Le_1 F_2 1 2 Hello Raft 1 2 Hello Raft 1 2 Hello prevLogIndex F_3 F_3 crash重新启动后如何平衡数据.
27. Network Partition
28. 正常情况 F_1 1 1 Hello 1 Hello 1 Hello Hello Le_1 Heartbaet & commit 1 Hello F_2 F_3 F_4
29. 网络分区 1 Hello 两个人怎么够法定人数 ! ! ! F_1 1 Hello 1 Hello 1 Hello Le_1 F_2 Request Vote 1 Hello F_3 Vote Granted F_4
30. 新集群正常 1 2 Hello Tim 两个人怎么够法定人数 ! ! ! F_1 Hello Ying Hello Tim 1 2 Hello Ying 1 2 Hello Ying Le_1 F_2 1 2 1 2 F_3 Heartbeat & Log entry & commit F_4
31. 网络恢复 1 F_1 Hello Le_1 Hello Ying Le_2 Hello 1 2 Hello Ying 1 2 Hello Ying 网络好了后, 开始抢夺Leader Le_1 term 小于 Le_2 ! F_2 1 2 1 Heartbeart & Append Log Entries F_4
32. 一致性 1 2 Hello Ying F_1 1 2 Hello Ying 1 2 Hello Ying 1 2 Hello Ying F_5 Heartbeat & Log entry & commit F_2 1 2 Hello Ying Le_2 F_4
33. 冲突Split brain 如符合法定人数并产生了N条数据 与 新集群怎么保持数据一致性 覆盖 VS 合并 ? 被分区前有些node没有收到commit ? timer check
34. 预防Split brain 单播制定节点 指定法定人数 , 每次add\reduce都需要更改 加大timeout , retry 统一 client 入口 , But … 监控脑裂情况, 反查各个node的leader是否一致
35. 复杂一致性 Host 1 2 3 4 5 6 7 8 S1 44 44 55 66 77 80 89 90 S2 44 44 55 66 77 80 89 S3 44 44 55 66 77 S4 44 44 55 70 70 85 85 S5 44 44 55 70 70 85 term id 每个方格为Log entry 9 10 index
36. Log compress S1 1 2 3 4 5 6 7 8 44 44 55 66 77 80 89 90 Snapshot Last included index : 6 Last included term : 80 state macheie state: x <— 0 y <— 9 all commited !!! 9 10 index
37. study 动画演示: https://ongardie.github.io/raft-talk-archive/2015/buildstuff/raftscope-replay/ 文档: http://en.youscribe.com/catalogue/tous/professional-resources/it-systems/ raft-in-search-of-an-understandable-consensus-algorithm-2088704 Googole …
38. Q & A