首页 > 其他分享 >etcd-v3.5.9源代码分析

etcd-v3.5.9源代码分析

时间:2024-06-05 11:12:16浏览次数:29  
标签:boltdb v3.5 etcd go 源代码 数据 leader

Github上下载etcdv3.5.9源代码,包含server和client两部分。
先放ETCDv3 读写流程图镇楼

读流程

写流程

Etcd Server

server->etcdmain->main.go:Main():startEtcdOrProxyV2() ->etcd.go:startEtcd()->StartEtcd()->etcdserver目录下server.go:NewServer() 初始化该节点为follow,创建管理lease(小顶堆)的lessor,WAL,MVCC,authStore,KV等等.

raft协议主要体现在etcd/raft/raft.go文件中,每个节点初始化为follower, 随机事件进入参选状态candidate并给自己投票,当获得多数票数后成为leader,并定时发送心跳。当其他follower收不到心跳时,该follower再次进入candidate.那这个leader发现了新的 Leader 任期号,那么它就需要转换到 Follower。etcd3.4引入PreVote预投票机制,防止原leader A Crash时,选出新leader,而当老leader A 恢复后再次触发新一轮 Leader 选举,影响服务的可用性。在这种情况下,因 A 节点数据落后较多,预投票请求无法获得多数节点认可,因此它就不会进入 Candidate 状态,导致集群重新选举。

存储数据库boltdb

etcd 数据存储在 boltdb, boltdb 基于 B+ tree、各类 page 实现查找、更新、事务提交. 核心数据结构包括page、node、bucket 等。
boltdb 文件指的是你 etcd 数据目录下的 member/snap/db 的文件, etcd 的 key-value、lease、meta、member、cluster、auth 等所有数据存储在其中。etcd 启动的时候,会通过 mmap 机制将 db 文件映射到内存,后续可从内存中快速读取文件中的数据。写请求通过 fwrite 和 fdatasync 来写入、持久化数据到磁盘。

boltdb 结构图
boltdb 提供了非常简单的 API 给上层业务使用,当我们执行一个 put hello 为 world 命令时,boltdb 实际写入的 key 是版本号,value 为 mvccpb.KeyValue 结构体。

Debug

  1. 在 etcd 3.4 中,logger 默认为 capnslog,trace 特性只有在当 logger 为 zap 时才开启,因此你需要设置 --logger=zap. 打开之后可以看到 range/put/txn 等操作的耗时。
  2. etcd 默认参数并不会采集各个接口的延时数据,我们可以通过设置 etcd 的启动参数 --metrics 为 extensive 来开启,获得每个 gRPC 接口的延时数据。同时可结合各个 gRPC 接口的请求数,获得 QPS。

标签:boltdb,v3.5,etcd,go,源代码,数据,leader
From: https://www.cnblogs.com/janeysj/p/17401891.html

相关文章

  • 二进制部署etcd-三个集群方案
    etcd的二进制部署还有什么问题,想咨询的,加群:582337768。这个群不是我的,但是我在里面,但是还是那句话,我也不懂。三个节点信息node01ip=192.168.1.11node02ip=192.168.1.12node03ip=192.168.1.13创建证书#下载制作证书的二进制文件wget--no-check-certificatehttps://p......
  • 基于Java+Vue的园区智能化管理系统:综合管控,推进数字化转型(源代码分享)
       前言:智慧园区管理平台是一个集成了多种功能的综合性系统,旨在通过信息化、智能化手段提升园区的管理效率和服务质量。以下是针对系统的各个功能模块的简要描述:一、楼栋管理会务管理:管理园区内的会议预约、会议室使用等。园区信息:展示园区的基本信息,如位置、面积、规划......
  • VeraCrypt源代码学习--架构介绍
      VeraCrypt的简介我就不在多啰嗦了,大家可以直接到官方网站上去查看。如何使用我也不做过多的介绍,网上的教程太多太多,能够进入看本博客的童鞋,绝对有足够的能力去搞定这方面的知识。  需要的基础知识:VeraCrypt主要用C/C++语言编写,为了提高软件的运行效率,源码中也夹杂着少许......
  • .Net 中间件 - 新开源代码生成器 -ReZero
    ReZeroAPReZero是一款.NET中间件:全网唯一界面操作就能生成API, 可以集成到任何.NET6+API项目,无破坏性,也可让非.NET用户使用exe文件ReZero生成器功能简介1、表文档导出:支持目录导航2、在线创建表、在线建库3、一键导入现有表4、模版在线调试 5、自研模版引擎比Razo......
  • 带交互的卡尔曼滤滤波|一维滤波|源代码
    背景一维卡尔曼滤波的MATLAB例程,​背景为温度估计。代码介绍运行程序后,可以自己输入温度真实值:以20℃为例,得到如下的估计值​:滤波前的值和滤波后的值分别于期望值(真实值)作差,可以得到​误差​曲线图:​误差统计特性源代码程序源码下载:https://download.csdn.net/......
  • Vb户籍管理系统设计(论文+源代码+开题报告+答辩PPT)
    户籍管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。经过分析,我们使用MICROSOFT公司的VISUALBAS......
  • VeraCrypt源代码学习-序
    本人在计算机科学与技术专业度过两年光阴,尘世间一个迷途小书童,干过几天码农,十年前机缘巧合下转到别的行业从事项目管理工作,但一直关心着IT产业的发展,最近由于工作需要,亟需一款加密软件对工作中的资料进行保护,网上搜索了很多的相关软件,总体来说都不太满意,并不是因为他们做得不够好,......
  • 开源代码分享(32)-基于改进多目标灰狼算法的冷热电联供型微电网运行优化
    参考文献:[1]戚艳,尚学军,聂靖宇,等.基于改进多目标灰狼算法的冷热电联供型微电网运行优化[J].电测与仪表,2022,59(06):12-19+52.DOI:10.19753/j.issn1001-1390.2022.06.002.1.问题背景        针对冷热电联供型微电网运行调度的优化问题,为实现节能减排的目标,以微电......
  • Java毕业设计-基于springboot开发的企业oa管理系统-毕业论文(附毕设源代码)
    文章目录前言一、毕设成果演示(源代码在文末)二、毕设摘要展示1、开发说明2、需求/流程分析3、系统功能结构三、系统实现展示1、管理员模块的实现1.1用户信息管理1.2公告信息管理1.3客户关系管理1.4通讯录管理2、用户模块的实现2.1客户关系添加2.2通讯录添加2.3......
  • Java毕业设计-基于springboot开发的企业级工位管理系统-毕业论文(附毕设源代码)
    文章目录前言一、毕设成果演示(源代码在文末)二、毕设摘要展示1、开发说明2、需求/流程分析3、系统功能结构三、系统实现展示1、管理员模块的实现1.1员工信息管理1.2部门信息管理1.3工位信息管理1.4使用情况管理2、员工模块的实现2.1部门信息2.2工位分配管理四、......