Raft 分布式一致性协议

讲述Raft分布式一致性协议的选举过程

1. Raft- 分布式一致性协议
2. 一、什么是一致性协 议? 计算 x f(x) y
3. 一、什么是一致性协议? 存储 x=5 5 success/failure
4. 一、什么是一致性协议? 多节 点计 节节 算 f(x) x f(x) f(x) y
5. 一、什么是一致性协议? 多节点存储 x=5 5 5 success/failure 5 需要一种机制保 证各个存储节点的 数据是一致的
6. 一、什么是一致性协议? 一致性协议允许一组机器像一个整体一样工作 即使其中一些机器出现故障也能节 去 节 工 下作
7. Raft 将一致性问题分解成三个子问题: • 领导选举 • Raft 通过选举一个高贵的领导人,然后给予他全部的管理复制日志的责任来实现一致性 • 日志复制 • 客户端的请求被领导人以指令的形式作为日志条目附加到日志中,并 RPC 给其他节点 • 安全性
8. 二、 Raft- 领导选举 在任何时刻,每一个服务器节点都处于这三个状态之一: 选民 候选人 任期:用连续的整数标记,每一段任期从一次选举开始 领导
9. 二、 Raft- 领导选举
10. 二、 Raft- 领导选举 选民在一段时间内没收到任 何消息,则认为集群中无领 导,开始新一轮选举。这段 时间的阈值即选举超时 领导周期性的向选民 发送心跳包 程序启动时随机生成 选举超时 220ms : 任期: 0 A 心跳超节节 : 连续整数, 每一段任期从一次 选举开始 获得选票的候选人 选票: 节票 数: 选民 选举超时 160ms : 任期: 0 B 心跳超时 : 选民 选票: 获票数: 选举超时 300ms : 任期: 0 C 心跳超时 : 选民 选票: 获票数:
11. 二、 Raft- 领导选举 选举超时 60ms : 任期: A 心跳超时 : “ t: s e qu Re 选举超时 160ms 0ms : B 心跳超时 : 候选人 我 给 票 投 任期:1 选票:B 获票数:1 ” 选票: 获票数: 选民 Request:“ 投票给我” 选举超时 140ms : 任期: C 心跳超时 : 选民 选票: 获票数:
12. 二、 Raft- 领导选举 任期 A <= 任期 B 是 选举超时 220ms 60ms : A 心跳超时 : ” 我 给 ” 票 你 投 选 “ : 我 “ st : e e s qu on Re p s Re 选举超时 160ms : B 心跳超时 : 候选人 任期:1 选票:B 获票数:12 任期: 1 当前任期未 投票 选票: B 获票数: 是 选民 Request:“ 投票给我” 选举超时 140ms : 任期: C 心跳超时 : 选民 选票: 获票数:
13. 二、 Raft- 领导选举 选举超时 220ms : A 心跳超时 : 候选人收到大多数服 务器的选票,那么就 变成领导 选举超时 160ms : “ t: s e qu Re B 心跳超时 : 候选人 领导 我 给 票 投 任期:1 选票:B 获票数:3 2 ” 任期: 1 选票: B 获票数: 选民 Request:“ 投票给我” Response:“ 我选你” 选举超时 140ms 300ms : C 心跳超时 : 选民 任期:1 选票:B 获票数:
14. 二、 Raft- 领导选举 在 2n+1 个节点的集群中 不超过 n 个节点故障时 集群仍能提供服务
15. 二、 Raft- 领导选举 选举超时 220ms : 100ms A 心跳超时 : 选举成领导后, 周期性向所有选民发送 心跳包, 来维持自己的领导身份 t ea b t ar e h 任期:1 选票:B 选举超时 160ms : 100ms 获票数:3 心跳超时 : 领导 任期: 1 选票: B 获票数: 选民 heartbeat 选举超时 300ms : 100ms C 心跳超时 : 选民 任期:1 选票:B 获票数:
16. 三、 Raft- 日志复制 Consensus State Module Machine Log a=1 b=2 c=3 d=4
17. 三、 Raft- 日志复制 Clients d=4 Consensus State Module Machine Consensus State Module Machine d=4 Consensus State Module Machine Servers Log Log Log a=1 b=2 c=3 d=4 a=1 b=2 c=3 d=4 a=1 b=2 c=3 d=4
18. 三、 Raft- 日志复制 Clients b=2 Consensus State Module Machine Consensus State Module Machine b=2 Consensus State Module Machine Servers Log a=1 Log a=1 b=2 Log a=1 b=2
19. 三、 Raft- 日志复制 Clients d=4 Consensus State Module Machine Consensus State Module Machine d=4 Consensus State Module Machine Servers Log a=1 d=4 ! Log Log a=1 b=2 c=3 d=4 a=1 b=2 c=3 d=4 Raft 如何保证日志复制时的一 致性?
20. 三、 Raft- 日志复制 Clients b=2 d=4 c=3 a=1 b=2 c=3 Consensus State Module Machine Consensus State Module Machine d=4 Consensus State Module Machine Servers Log a=1 b=2 c=3 d=4 Log Log a=1 b=2 c=3 d=4 a=1 b=2 c=3 d=4
21. 三、 Raft- 日志复制 Raft 在发送复制日志节求节节, 节节节会把最新日志的 节 节 节 节 节前一条日志包含在请求里。 节 节节 如果选民在日志中匹配不到节条 日志 节节节,那么它就 节 节 节 拒收新的日志条目。 节 领导的复制请求被拒收时,则发送前一条日志,直至被成功复制。
22. 三、一致性协议应用 Paxos Krishna-Scheduler
23. 三、一致性协议应用 Raft
24. 四、节节 实现简单 易于理解 日志排序 并发低效
25. 谢谢!

相关幻灯片