2019-06-09
概述
Raft是一种共识算法,用于多个分布式的系统,如zookeeper,谷歌chubby。用于保持数据的一致性。可替代paxos共识算法。其核心思想是由一个leader作为入口,由他来对数据进行接受和分发处理。该唯一leader必须得到多数节点的选票。所以即使集群分裂,最终还是会有多数节点会达成一致。
适用于彼此可信的节点环境。
角色
- leader 1个
- candidate 临时角色,没有leader时由follower转成
- follower
- client数据产生和请求者
leader选举过程
初始状态
每个节点都是follower状态
候选人状态
没有leader和他们通信时,随机等待150-300s超时时间 ,然后转为候选人状态。此时,有人比较快变成候选人,先发选举请求。如果同时成为候选人并且都不能得到多数票,则重新等待随机时间。 follower收到选举请求后回复同意或拒绝。
leader
- 多数人回复同意后,候选人成为leader。
- leader 定期和个follower进行心跳通信,确认自己活着,发送数据。
数据复制过程
- client 发送数据
- leader接到数据后变成准提交状态
- leader将数据发送给follower
- 多数人回复确认后成为确定版。
- leader给client发送确认。
- 新加入节点leader会从时间线开始复制数据
分裂过程
- 如果分裂为两组,各自选举了leader。
- 第一组得不到多数follower节点确认,所以一直是未确认数据。
- 第二组得到多数节点确认,是确认数据。
- 合并后,未确认数据会回滚。
优点:
- 分布式一致性得到较好的保持
缺点
- 节点要可信
- leader只有一个,容易成为瓶颈。
reference
如非注明转载, 均为原创. 本站遵循知识共享CC协议,转载请注明来源
FEATURED TAGS
css
vc6
http
automake
linux
make
makefile
voip
乱码
awk
flash
vista
vi
vim
javascript
pietty
putty
ssh
posix
subversion
svn
windows
删除
编译
多线程
wxwidgets
ie
ubuntu
开源
c
python
bash
备份
性能
scp
汉字
log
ruby
中文
bug
msn
nginx
php
shell
wordpress
mqueue
android
eclipse
java
mac
ios
html5
js
mysql
protobuf
apache
hadoop
install
iocp
twisted
centos
mapreduce
hbase
thrift
tutorial
hive
erlang
lucene
hdfs
sqoop
utf8
filter
草原
yarn
ganglia
恢复
scrapy
django
fsimage
flume
tail
flume-ng
mining
scala
go
kafka
gradle
cassandra
baas
spring
postgres
maven
mybatis
mongodb
https
nodejs
镜像
心理学
机器学习
Keras
theano
anaconda
docker
spark
akka-http
json
群论
区块链
加密
抽象代数
离散对数
同余
欧拉函数
扩展欧几里德算法
ES6
node-inspect
debug
win10
vscode
挖矿