Raft 基础
目录
- 三个状态
- 什么是任期
- 节点之间的通信
1. 三个状态
Raft 设计了 3 个状态,用于表示节点的状态,分别是跟随者,候选者,领导者。
- 领导者:通常只有一个领导人,并且其他节点都是跟随者。
- 跟随者:跟随者不会发送任何请求,只是简单的响应领导者或者候选人的请求,由领导人处理所有的客户端请求(如果客户端请求了跟随者,那么跟随者会将请求转发给领导者)
- 候选者:选举新的领导人时使用。
3 个角色的转换关系和流程:

可以看到,这张图里的几个概念:
- 初始化:所有服务器启动时,都是跟随者
- 超时:当初始时, 没有收到领导人的心跳,便开始选举。如果候选者选举的时候,也超时了,便重新选举。
- 大多数的选票:成为领导人的关键是 —— 获取大多数服务器的选票,可以看做是鸽笼原理。
2. 什么是任期
目录:
- 2 个阶段
- 任期
- 服务器之间的通信
背景:由于机器的物理时间是不可靠的,所以需要一个逻辑时间。称之为任期(term)。
从 2 个阶段开始说起:
集群节点通常有 2 个节点:
- 选举阶段
- 领导者正常运行
例外:当选举失败,会进行加时赛,即连续有 2 个选举过程。
见下图:

图 2 可见任期 3 选举失败,然后进行了重新选举。
重新选举会继续失败吗?
答:如果不做限制,是会理解失败的。
Raft 使用了一个限制来规避:每台服务器在选举的时候,使用一个随机数(150 -200),即每个服务器在不同的时间发出选举。防止冲突。称之为“加时赛”。
任期号
在上文中说道:由于机器的物理时间是不可靠的,所以需要一个逻辑时间。称之为任期(term)。
有关任期的几个特点:
- 节点有可能观察不到任何一次选举或者任期。
- 任期充当逻辑时钟,服务器节点可以通过任期号查明过期的领导者或过期的信息。
- 每个节点存储当前任期号,单调递增。
- 服务器之间的每次通信,都会交换当前任期号,交换任期号的目的: 4.1 如果一个服务器的当前任期号比其他人小,则更新自己。 4.2 如果一个候选人或者领导人发现自己的任期号过期了,立刻将自己变成跟随者状态。 4.3 如果一个节点收到一个过期的任期号的请求,直接拒绝。
3. 节点之间的通信
服务器之间通过 RPC 通信,即远程方法调用。
在 Raft 中,RPC 分成 3 种:
- 请求投票: RequestVote 由候选人在选举任期发起
- 附加条目 AppendEntries 由领导人发起,用来复制日志和提供心跳。
- 为了传输快照单独增加的 RPC。
备注:当服务没有及时收到 RPC 的响应时,会发起重试。
Summary
- 3 个状态的意义和他们之间切换
- 任期的设计背景,任期在节点通信时的作用,任期在增长策略。
- 节点直接的通信 RPC 类型以及策略。
Raft 基础的更多相关文章
- 分布式一致性算法:Raft 算法(论文翻译)
Raft 算法是可以用来替代 Paxos 算法的分布式一致性算法,而且 raft 算法比 Paxos 算法更易懂且更容易实现.本文对 raft 论文进行翻译,希望能有助于读者更方便地理解 raft 的 ...
- 【转】分布式一致性算法:Raft 算法(Raft 论文翻译)
编者按:这篇文章来自简书的一个位博主Jeffbond,读了好几遍,翻译的质量比较高,原文链接:分布式一致性算法:Raft 算法(Raft 论文翻译),版权一切归原译者. 同时,第6部分的集群成员变更读 ...
- Raft 一致性算法论文译文
本篇博客为著名的 RAFT 一致性算法论文的中文翻译,论文名为<In search of an Understandable Consensus Algorithm (Extended Vers ...
- 从raft论文出发
介绍 Raft是一种为了管理复制日志的一致性算法.为了提升可理解性,Raft 将一致性算法分解成了几个关键模块,例如领导人选举.日志复制和安全性.同时它通过实施一个更强的一致性来减少需要考虑的状态的数 ...
- Raft协议--中文论文介绍
本篇博客为著名的 RAFT 一致性算法论文的中文翻译,论文名为<In search of an Understandable Consensus Algorithm (Extended Vers ...
- 分布式共识算法 (三) Raft算法
系列目录 分布式共识算法 (一) 背景 分布式共识算法 (二) Paxos算法 分布式共识算法 (三) Raft算法 分布式共识算法 (四) BTF算法 一.引子 1.1 介绍 Raft 是一种为了管 ...
- 10分钟弄懂Raft算法
分布式系统在极大提高可用性.容错性的同时,带来了一致性问题(CAP理论).Raft算法能够解决分布式系统环境下的一致性问题. 我们熟悉的ETCD注册中心就采用了这个算法:你现在看的这篇微信公众号文章, ...
- Raft翻译
英文原文:https://web.stanford.edu/~ouster/cgi-bin/papers/raft-atc14 In Search of an Understandable Conse ...
- 30分钟带你理解 Raft 算法
为什么需要 Raft? Raft 是什么? Raft 的目标 前置条件:复制状态机 Raft 基础 Leader 选举(选举安全特性) 日志复制(Leader只附加.日志匹配) 安全 学习资料 使用 ...
随机推荐
- Exception in thread "main" java.lang.UnsupportedClassVersionError : unsupported major.minor version 52.0
新建好springboot项目后,打开application运行main方法报如下错. 1.问题:Exception in thread "main" java.lang.Unsu ...
- Linux 下 ftp的使用
最近需要在Linux上搭建FTP服务,通过网上的一些大神学习了一些新知识,在这个做一个总结: Linux 下FTP 为 vsftp (linux red hat)1.FTP配置路径:/etc/vsft ...
- bootstrap中的dropdown组件扩展hover事件
bootstrap的下拉组件,需要点击click时,方可展示下拉列表.因此对于喜欢简单少操作的大家来说,点击一下多少带来不便,因此,引入hover监听,鼠标经过自动展示下拉框.其实在bootstrap ...
- Educational Codeforces Round 61 Editorial--C. Painting the Fence
https://codeforces.com/contest/1132/problem/C 采用逆向思维,要求最大的覆盖,就先求出总的覆盖,然后减去删除两个人贡献最少的人 #include<io ...
- Android 极光推送造成IM服务绑定失败bug
由于极光推送对8.0的支持问题,升级到了最新版本的极光推送.但是最新版本的极光推送,默认将推送服务设置到了新的进程里面,由此引发 Android 极光推送多进程造成的application运行两次 和 ...
- hbuilder下用plus.barcode.Barcode做二维码扫描,当二维码容器的高度设置过低时,启动扫描会发生闪退
解决办法: 将固定高度改为百分比
- Python之旅Day8 socket网络编程
socket网络编程 Socket是网络编程的一个抽象概念.通常我们用一个Socket表示“打开了一个网络链接”,而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可.soc ...
- IntelliJ IDEA 使用前常用设置
0.设置位置 以下设置基于IntelliJ IDEA 2018.3.2 版本. IDEA 的设置一般都在 File 下的 Settings... 里进行设置的. 1.设置字体字号行间距 2.设置背景图 ...
- python 输入一个字符串,打印出它所有的组合
import itertools str = input('请输入一个字符串:') lst = [] for i in range(1, len(str)+1): lst1 = [''.join(x) ...
- 使用PageHepler分页
首先需要引入依赖 <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>p ...