当前位置: 首页 > news >正文

Raft 算法

Raft 算法Raft 算法是一种分布式共识算法官方动画演示复制状态机相同的初始状态 相同的输入 相同的结束状态Raft 中 leader 将请求封装到 logEntry 中并将 logEntry 复制到所有的 follower 节点每个 follower 节点按照相同顺序执行 logEntry 中的指令从而保证每个节点的状态是一致的状态转化raft 中只有三个状态每个节点都必定处于三个状态中的一种分别是follower跟随主节点的从节点candidate参与选举的节点leader主节点任期每一任期都是从选举开始如果一次选举没有选出主节点不久便会开始新的任期raft 保证每一任期里最多只会选出一个主节点节点之间每次通信都会携带任期号如果某个节点的当前任期号小于其他节点该节点会更新自己的任期号candidate 和 leader 发现自己的任期号过期了会退回到 follower如果一个节点收到了过期任期的请求该节点会拒绝这个请求通信Raft 算法中每个服务器节点都通过 RPC 进行通信节点之间一般只有两种 RPC请求投票由 candidate 节点在选举期间发起追加条目由 leader 节点发起用于复制日志以及发送心跳领导者选举选举开始leader 会定期给所有 follower 发送心跳请求如下图中的 S5如果 follower 中有一段时间没有收到 leader 心跳会认为 leader 宕机然后开始重新选举选举开始follower 首先会增加本机的任期并转换为 candidate 状态然后投票给自己并向其他节点发送投票请求没有转换为 candidate 的 follower 对于同一个任期会按照先来先得的原则将票投给第一个发起请求的节点其他的投票请求将会不投票选举结果candidate 节点获得了超半数的票数成为 leader 并开始发送心跳candidate 收到了来自其他节点的心跳并且任期大于本机节点的任期candidate 退回 follower 状态没有选举出新 leader每个节点都会在选举时间超时后增加任期然后开始新一轮选举日志复制过程leader 接收到客户端指令后会把指令作为一个新条目追加到日志当中并将日志内容发送给所有节点让他们复制该条日志当超过半数的节点复制后leader 就会在本地执行该指令并将结果返回给客户端日志构成一条日志信息会包含三个信息日志号唯一标识一条日志任期号状态机指令表示要执行的操作故障转移leader 和 follower 在日志复制过程中随时都有宕机风险raft 必须在有宕机的情况下支持日志复制并且每个副本日志顺序的一致如果 follower 没有回应 leader 的日志复制请求leader 会不停的重发即使 leader 已经执行了本次操作如果有 follower 崩溃后恢复这时 raft 的追加条目一致性检查会生效保证 follower 能按顺序恢复崩溃后缺失的日志如果 leader 崩溃崩溃的 leader 可能已经复制了日志到部分 follower 但还没有执行操作选出的新 leader 又没有这部分日志这就导致 follower 与新 leader 的日志不一致这种情况下新 leader 会强制 follower 同步新 leader 的日志raft 的一致性检查leader 在每一个发往 follower 的追加请求中都会携带前一个日志的日志号与任期如果 follwer 找不到前一个日志则会拒绝该请求leader 收到拒绝后会发送前一个日志条目从而逐渐向前定位到 follower 缺失的日志安全性选举限制leader 宕机后参与选举的 candidate 必须同步了之前所有任期的已提交日志条目避免选举出的新 leader 缺少日志从而造成节点之间的状态不一致发起投票请求时candidate 会携带自己最后一条日志的日志号与任期收到请求的 follower 会进行比较如果 candidate 的日志号与任期小于自己则拒绝投票follower 执行操作限制leader 在执行客户端操作完成后宕机此时其他 follower 还只是将日志复制到了本机并没有执行对应操作选举出新 leader 后 follower 怎么判断老 leader 宕机前的最后一次操作应不应该执行leader 每次发送心跳/日志复制请求时会携带 leader 已提交的最大日志号follower 通过这个参数判断是否应该执行leader 执行操作限制只有 leader 当前任期内的日志条目才通过计算副本数目的方式提交新 leader 当选后不会立即执行之前 leader 已经执行过的操作而是要等到下一次请求到来后将新请求与之前 leader 的请求一起执行
http://www.zskr.cn/news/1383020.html

相关文章:

  • OpenClaw(小龙虾)Windows 11 一键部署实操教程
  • 武汉名包回收哪家强?我的亲身经历告诉你答案 - 奢侈品回收测评
  • 七张图看懂 Web 登录全过程:HTTP、Cookie、Session、JWT、RBAC 全串起来了
  • 3步解锁B站缓存视频:m4s-converter让离线播放变得如此简单
  • 【限时解密】Midjourney未公开霓虹增强协议:通过--iw 2.5+自定义LUT映射表触发次表面散射模拟(附Python自动Prompt生成器)
  • Matlab 与 Python 互通超简单教程,几分钟轻松搞定
  • 别再手动输密码了!用LightDM在麒麟KYLINOS上为多个用户配置自动登录切换
  • libvirt/qemu内存快照的实现原理分析记录
  • 我仓库内cad python 有哪些应用到聚类的方法
  • taotoken token plan套餐在实际开发中的成本节省感受
  • 拒绝API依赖!为什么“看懂屏幕”才是AI数字员工的终极形态?
  • SQLMap入门笔记:从漏洞原理到自动化数据提取的保姆级教程
  • 一份来自 Karpathy 的 AI 编程 skill
  • Pytest运行方式扫盲:从‘右键运行’到‘命令行高手’的避坑指南(附常见报错解决)
  • 从零开始:Icarus Verilog 开源硬件仿真器完全指南 [特殊字符]
  • 短视频矩阵系统的技术演进:当AI Agent重新定义全域内容运营
  • BiliBiliCCSubtitle深度解析:高效自动化B站字幕下载与转换的专业解决方案
  • 团队协作中如何使用 Taotoken CLI 工具一键统一所有成员的开发环境配置
  • 一些SVG小图标去哪里找
  • 投资者网:2026年GEO服务商五强:领航者的制胜逻辑与实战分析 - 罗兰艺境GEO
  • DyberPet桌面宠物框架:打造属于你的数字伙伴,让桌面互动更有温度
  • 气体涡轮流量计厂家排行榜 - 仪表品牌榜
  • 告别鼠标点击,微博图片批量下载的轻松方案
  • 如何快速将B站缓存视频转为MP4:3步实现永久保存的终极免费工具
  • 泰拉瑞亚地图编辑器终极指南:如何用免费开源工具重塑你的游戏世界
  • Windows服务器风扇狂转的挖矿病毒排查指南
  • 户外热潮来袭——AI赋能冲锋衣设计新潮流
  • 终极解决方案:5步实现WeMod完整功能解锁与远程控制
  • WSL2图形化不止一种玩法:除了VcXsrv,试试这些更轻量的远程桌面方案(含RDP/Wayland)
  • 突破性架构革命:RPFM如何用Rust+Qt6重塑Total War模组开发范式