首页 > 编程语言 >Etcd选主源码分析

Etcd选主源码分析

时间:2023-05-03 12:33:43浏览次数:54  
标签:选主 Candidate Term 节点 Follower 源码 Etcd raft Leader

Etcd v3.4.0

Raft角色

Raft集群中节点分为3种状态:领导者Leader、追随者Follower、候选者Candidate。
正常情况下,集群中的节点只存在Leader与Follower这2种状态。

Leader:负责日志的同步管理,处理写请求,与Follower保持心跳。
Follower:响应Leader的日志同步请求和Candidate的投票请求,把客户端请求转发到Leader。
Candidate:Follower节点转为Candidate后发起选举,获得超半数投票后转为Leader。

选举的3个阶段

阶段1:所有节点都是Follower

Raft集群在启动时,所有节点都是Follower,初始任期Term为0。每个节点启动选举定时器,超时时间不一致,避免所有Follower同时转为Candidate并同时发起选举。

raft/raft.go
newRaft函数

阶段2:Follower转为Candidate并发起投票

Follower启动后在一个选举定时器周期内未收到Leader心跳和Candidate投票请求,转为Candidate且Term自增,并向集群中其他节点发送投票请求并且重置选举定时器。

raft/raft.go
tickElection函数

Step函数

campaign函数

阶段3:Follower投票

在未投票情况下,Follower收到投票请求后处理方式:
请求节点的Term大于自己的Term,把票投给它;
请求节点的Term小于自己的Term,把票投给自己。

raft/raft.go
Step函数

阶段4:Candidate转为Leader

一轮选举过后,一般会有一个Candidate收到超过半数节点的投票,转为Leader,定时发送心跳给其它节点,其它节点转为Follower并与Leader保持同步。

raft/raft.go
stepCandidate函数

VoteWon:支持者数量超过半数,如果是预选那么开始正选,如果是正选就成为Leader。
VoteLost:支持者数量不可能超过半数,不管是预选还是正选都切换成Follower。

raft/quorum/majority.go
VoteResult函数

参考资料

09 分布式一致性算法 Raft 和 Etcd 原理解析

etcd教程(十五)---leader选取源码分析

 

标签:选主,Candidate,Term,节点,Follower,源码,Etcd,raft,Leader
From: https://www.cnblogs.com/WJQ2017/p/17368915.html

相关文章

  • 分布式kv存储系统之etcd集群管理
    etcd简介etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法,etcd基于Go语言实现。 官方网站:https://etcd.io/;github地址:https://github.com/etcd-io/etcd;官方硬件......
  • TiCDC 源码解读(5)-- TiCDC DDL 事件处理逻辑 与 Filter 实现介绍
    作者:asddongmen内容概要本文是TiCDC源码解读的第五篇,本文将会介绍TiCDC对DDL的处理方式和Filter功能的实现(基于TiCDCv6.5.0版本代码),文章将会围绕以下4个问题展开。为什么TiCDC只用Owner节点来同步DDL?DDL事件会对同步任务的进度有什么影响?TiCDC是怎么在内......
  • java基于springboot+vue前后端分离的超市进销存系统管理系统、超市管理系统,附源码+数
    1、项目介绍超市进销存系统,通过这个系统能够满足超市进销存系统的管理及员工的超市进销存管理功能。系统的主要功能包括:首页、个人中心、员工管理、客户管理、供应商管理、承运商管理、仓库信息管理、商品类别管理、商品信息管理、采购信息管理、入库信息管理、出库信息管理、销......
  • Spring源码:Bean的生命周期(二)
    前言让我们继续讲解Spring的Bean实例化过程。在上一节中,我们已经讲解了Spring是如何将Bean定义加入到IoC容器中,并使用合并的Bean定义来包装原始的Bean定义。接下来,我们将继续讲解Spring的getBean()方法,特别是针对FactoryBean的解析。在getBean()方法中,Spring还支持......
  • Go-net源码解析
    学习一门语言,那么我们必然要涉及到网络通信,而谈到网络通信却又离不开tcp,这里我们利用go标准库net来模拟一个服务端、客户端的流程,从而深入学习其中的代码流程(深入其中解析本质)funcmain(){ server,err:=net.Listen("tcp","127.0.0.1:8080")//开启服务端 iferr!=nil......
  • android DragLayer源码
    Android_launcher的源码详细分析/**Copyright(C)2008TheAndroidOpenSourceProject**LicensedundertheApacheLicense,Version2.0(the"License");*youmaynotusethisfileexceptincompliancewiththeLicense.*......
  • Spring源码:bean的生命周期(一)
    前言本节将正式介绍Spring源码细节,将讲解Bean生命周期。请注意,虽然我们不希望过于繁琐地理解Spring源码,但也不要认为Spring源码很简单。在本节中,我们将主要讲解Spring5.3.10版本的源代码。如果您看到的代码与我讲解的不同,也没有关系,因为其中的原理和业务逻辑基本相同。为了更好......
  • java基于springboot的毕业生信息招聘平台、高校学生招聘管理系统、招聘管理系统,附源码
    1、项目介绍毕业生信息招聘平台的功能如下:管理管理员;首页、个人中心、企业管理、空中宣讲会管理、招聘岗位管理、毕业生管理、个人简历管理、求职信息管理、信息咨询管理、岗位应聘管理、线上面试管理、面试回复管理、试卷管理、试题管理、管理员管理、论坛管理、系统管理、考试......
  • java基于ssm的超市管理系统、超市销售管理系统,附源码+数据库+文档,适合课设设计、毕业
    1、项目介绍java基于ssm的超市管理系统、超市销售管理系统。本系统的设计是两种用户,一种是普通用户,一种是管理员用户。权限都不一样。主要功能有:添加商品、库存查询、订单管理、商品删除管理、退货管理、销售统计、供应商管理、用户管理、角色管理。项目获取,看这里2、技术框......
  • java基于ssm的房屋租赁管理系统、房屋出租管理系统、租房管理系统,附源码+数据库,免费安
    1、项目介绍java基于ssm的房屋租赁管理系统、房屋出租管理系统、租房管理系统,​系统分为前台用户界面和后台系统管理。项目获取,看这里1.1前台用户界面用户注册、用户登录、用户中心、浏览房源、房源搜索查看房源明细、发布房源、提交合同、新闻公告、留言交流1.2后台系统......