在散布式环境中,分歧性是指数据在多个正本之间能否能够坚持分歧的个性。
比拟经常出现的分歧性算法包括Paxos算法,Raft算法,ZAB算法等
普通用作两种场景: 元数据治理 :比如etcd,特点是数据规模小,关键保障数据分歧性和集群的高可用(raft选主),所以一套raft集群就够了。 散布式数据库 :这种会用partition group,每个group有一个raft集群,当数据变大的时刻会做裁减。
Raft把算法流程分为三个子疑问:指导选举(Leader election)、日志复制(Log replication)、安保性(Safety)。
Raft算法中在恣意时辰最多只要一个Leader,反常上班时期只要Leader和Followers。
形态切换流程:
任期 :可以了解为是节点负责Leader职务的时期期限。
Raft 将时期划分为一个一个的任期(term),每个任期由干燥递增的数字(任期编号)标识,上班期可长可短也或许不存在
中 主机节点之间通讯经过两个 RPC 调用:
初始形态时,每个节点的角色都是 Follower(跟随者),Term任期编号为 1(假定任期编号从1开局)
不过这两种状况会触发选举:
既然有两种状况下会触发选举,一个是首次启动,一个是Leader缺点未发送心跳给Follower,那么我们假定有五个节点,而后区分用图来看下是如何选举的!
首次启动时:
首次启动节点都是反常流程如下:
Leader缺点时:
Node2此时是Leader 节点,结果缺点了,剩下四个节点介入选举。
在一个任期(Term)内只可以投票给一个结点,获取超越半数的投票才可成为 Leader,从而保障了一个任期内只会有一个 Leader 发生。
概括成一句话就是: 保障Leader上日志能齐全相反地复制到多台Follower主机上。
OK!我们看下是如何启动同步的
Raft算法中,每个节点保养着一份日志,其中蕴含了系统中一切形态变卦的记载,每一次性形态变卦被称为一个日志条目。
我们先看日志结构和右侧说明:
图中每个节点存储自己的日志正本(log),每条日志记载蕴含:
•索引 (log index):记载在日志中的位置,是一个延续干燥递增整数
•任期号 (term):日志记载被创立时Leader的任期号,上图中有三个任期
•命令 (command):客户端恳求指定的、形态机须要口头的指令
了解完日志结构后,我们来看日志是如何动员同步的。
日志耐久化存储的条件
Follower节点必定先将记载安保写到磁盘,能力向Leader节点前往写入成功照应。
假设一条日志记载被存储在超越半数的节点上,我们以为该记载已提交(committed)——这是 Raft 十分关键的个性!假设一条记载已提交,象征着形态机可以安保地口头该记载
流程如下图:
Raft算法的目的是保障一切节点的分歧性,即一个日志条目在某个节点被提交,那么这个日志条目也必定在一切节点上被提交。
Raft算法是一种繁复而高效的散布式分歧性算法,经过引入Leader选举和日志复制的机制,确保了散布式系统的共识和分歧性。
本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载联系作者并注明出处:https://duobeib.com/diannaowangluoweixiu/8585.html