学习
实践
活动
专区
工具
TVP
写文章
专栏首页sunsky彻底搞懂etcd raft选举、数据同步

彻底搞懂etcd raft选举、数据同步

etcd raft选举机制

etcd 是一个分布式的k/V存储系统。核心使用了RAFT分布式一致性协议。一致性这个概念,它是指多个服务器在状态达成一致,但是在一个分布式系统中,因为各种意外可能,有的服务器可能会崩溃或变得不可靠,它就不能和其他服务器达成一致状态。这样就需要一种Consensus协议,一致性协议是为了确保容错性,也就是即使系统中有一两个服务器当机,也不会影响其处理过程。

为了以容错方式达成一致,我们不可能要求所有服务器100%都达成一致状态,只要超过半数的大多数服务器达成一致就可以了,假设有N台服务器,N/2 +1 就超过半数,代表大多数了。

raft协议核心要点:

  • Leader选举(Leader Election)
  • 日志同步 (Log Replication)
    • leader收到client的更新请求后,会讲更新的内容同步给所有follower。
  • 集群状态的正确性 (Safety)
    • 保证日志的一致性
    • 保证选举的正确性

服务器状态:

  • leader 处理所有客户端交互,日志复制等,一个任期只有一个。
  • follower 完全被动的选民,是只读的。
  • candidate 候选人,可以被选举为新领导。

状态之间的转换:

任期(terms)

如上图,蓝色代表 Election 模式,绿色代表 Operation 模式

  • 在每个任期内最多一个leader
  • 有些可能没有leader
  • 每一个服务会维护当前的任期值
    • 每一个rpc请求中都会携带term值
    • 如果一个peer实例拥有老的term值,则更新为最新的term值并状态变为follower
  • 一旦一个服务选举为leader,就会进入 operation 模式

Leader选举

etcd服务启动后,会进入 follower 状态,leader 心跳超时后会进入选举状态。 选举总体流程图如下:

选举流程分解

  • 初始状态都是Follower
  • S1 超时, 变为Candidate,开始选举, 发起投票请求
  • S1 变为Leader
    • S2 和 S3 同意投票给S1
  • Leader S1开始接受客户端写请求
    • Leader接受到客户端写请求后,会将数据更新写入到log中
    • 如果S2和S3收到客户端写请求,会将请求转发到Leader S1
    • Leader会异步的将更新的log同步到Follower S2和S3
    • 超过多数的Follower将数据成功同步到log后,Leader会将该条数据更新为Committed状态,Committed index会随着增长。

选举的正确性

  1. 在每一任期内,最多允许一个服务被选举为leader
    • 在一个任期内,一个服务只能投一票
    • 只有获得大多数投票才能作为leader
  2. 如果有多个candidate,最终一定会有一个被选举为leader
    • 如果多个candidate同时发起了选举,导致都没有获得大多数选票时,每一个candidate会随机等待一段时间后重新发起新一轮投票(一般是随机等待150-300ms)

日志的一致性

  1. 客户端写入数据到 leader:
    • leader 将数据写入到 log
    • leader将更新的数据广播到所有的followers
    • 多数follower成功写入log后,leader会将该数据提交到状态机
      • leader 把数据提交后,返回给client结果
      • 在下一个心跳中,leader 通知follower更新已经提交的数据
  2. Crashed/slow followers ?
    • leader会一直重试同步数据到follower,直到成功

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客:https://www.cnblogs.com/sunsky303/复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • 浅入深出ETCD之【raft原理】

    这次我们来说说,有关于etcd原理的一些事情。之前我们已经了解到了etcd是一个分布式的k-v存储,那么它究竟是如何保证数据是如何复制到每个节点上面去的呢?又是...

    LinkinStar
  • etcd-raft 模块如何实现分布式一致性?

    你好,我是 aoho,大家周末快乐。今天我和你分享的主题是:etcd-raft 模块如何实现分布式一致性?

    aoho求索
  • 让我们一起揭开Etcd背后Raft算法的面纱

    最近在使用K8S过程中,一直用到了一个Key-Value数据库Etcd,每当看到有介绍Etcd的教程时,介绍不多,大多都是独立于K8S集群之外,保存状态数据。再...

    用户5166556
  • k8s etcd 的实现原理

    etcd 的官方将它定位成一个可信赖的分布式键值存储服务,它能够为整个分布式集群存储一些关键数据,协助分布式集群的正常运转。

    AlbertZhang
  • 分布式系统 Etcd 解析

    随着移动互联网技术的快速发展,在新业务、新领域、新场景的驱动下,基于传统大型机的服务部署方式,不仅难以适应快速增长的业务需求,而且持续耗费高昂的成...

    李 傑
  • 彻底搞懂 etcd 系列文章(七):etcd gRPC 服务 API

    etcd 是云原生架构中重要的基础组件,由 CNCF 孵化托管。etcd 在微服务和 Kubernates 集群中不仅可以作为服务注册与发现,还可以作为 key...

    aoho求索
  • 看图轻松了解etcd

    用一些图示结合场景和文字轻松了解etcd,文章是针对etcd初学者的,目的是让大家了解etcd是什么、主要在什么场景下使用、etcd集群是怎么工作的以及创建集群...

    KevinYan
  • 【重识云原生】第六章容器6.3.4节——etcd组件

            Etcd是CoreOS基于Raft协议开发的分布式key-value存储系统,可用于服务发现、共享配置以及一致性保障(如数据库选主、分布式锁等)...

    江中散人_Jun
  • 用 etcd/raft 组建能够选举的最简集群 demo

    https://cloud.tencent.com/developer/article/1644111当今互联网行业中,对于分布式一致性算法,个人觉得实用性最高...

    amc
  • 深入浅出etcd之raft实现

    etcd是coreOS使用golang开发的分布式,一致性的kv存储系统,因其易用性和高可靠性被广泛运用于服务发现、消息发布和订阅、分布式锁和共享配置等方面,也...

    evin
  • 彻底搞懂 etcd 系列文章(一):初识 etcd

    etcd 是云原生架构中重要的基础组件,由 CNCF 孵化托管。etcd 在微服务和 Kubernates 集群中不仅可以作为服务注册与发现,还可以作为 key...

    aoho求索
  • kubernetes 核心组件之 etcd

    Etcd是CoreOS基于Raft协议开发的分布式key-value存储,可用于服务发现、共享配置以及一致性保障(如数据库选主、分布式锁等)。

    看、未来
  • 分布式环境Raft一致性共识算法解读

    Raft是分布式环境下的一致性算法,它通过少数服从多数的选举来维持集群内数据的一致性。它与RBFT算法名称有点像,然而Raft算法里不能存在拜占庭节点,而RBF...

    陶辉
  • 彻底搞懂 etcd 系列文章(二):etcd 的多种安装姿势

    etcd 是云原生架构中重要的基础组件,由 CNCF 孵化托管。etcd 在微服务和 Kubernates 集群中不仅可以作为服务注册与发现,还可以作为 key...

    aoho求索
  • TiDB 5.0 跨中心部署能力初探 | Joint Consensus 助力 TiDB 5.0 无畏调度

    TiDB 5.0 已于上周正式发布,在这个大版本更新中提升 TiDB 集群的跨中心部署能力是一个重要的着力点,在共识算法这一层,最激动人心莫过于 Joint C...

    PingCAP
  • etcd 集群大小迷思

    etcd 使用 raft 协议保证各个节点之间的状态一致。根据 raft 算法原理,节点数目越多,会降低集群的写性能。这是因为每一次写操作,需要集群中大多数节点...

    米开朗基杨
  • Paxos和Raft的前世今生

    前言 在保证数据安全的基础上,保持服务的持续可用,是核心业务对底层数据存储系统的基本要求。业界常见的1主N备的方案面临的问题是“最大可用(Maximum Ava...

    腾讯技术工程官方号
  • 金融级分布式数据库架构设计要点

    银行业从最初的手工记账到会计电算化,到金融电子化,再到现在的金融科技,可以看到金融与科技的结合越来越紧密,人工智能、大数据、物联网、区块链等新兴技术改变了金融的...

    数据库架构之美
  • 分布式|Paxos和Raft复习

    保持服务的持续可用,是核心业务对底层数据存储系统的要求。常见的1主N备的方案问题是“最大可用(Maximum Availability)”和“最大保护(Maxi...

    heidsoft

扫码关注腾讯云开发者

领取腾讯云代金券