go-etcd阅读笔记

etcd 概念及源码阅读(二) 本篇为 /etcd/contrib/raftexample 目录下的代码阅读,raftexample 是 etcd 的 raft 库的使用案例,是一个基于 raft 共识算法的 键值存储系统,同时提供了REST API进行交互。raftexample 由以下模块组成。 阅读详情

简介

etcd是CoreOS团队于2013年6月发起的开源项目,是一个分布式、可靠 key-value 存储的分布式系统。当然,它不仅仅用于存储,还提供共享配置及服务发现。

向etcd 注册 该服务(其实就是 存一个值)然后向etcd 发送心跳,当etcd 没有检测到心跳就会 把这个键值对 删了(这整个动作是etcd里的租约模式),网关那边 就只需要 watch 这个 key ,就能够知道 所有服务的所有动态了

etcd现在用于制作服务发现是比较常见的。用一篇文章记录一下如何安装、配置、使用。以及介绍一些etcd的工作原理,术语。

etcd术语

术语说明
Term选举任期,每次选举之后递增
Vote选举时一张投票
EntryRaft算法的日志的一个条目
Candidate候选人,参与竞选的节点
Leader领导,负责主动处理写入请求的节点
Follower跟随着,不负责主动写入,仅仅从Leader同步数据
Commit提交,序列化数据写入到日志中
Propose提议,请求大部分节点同意数据写入
Consensus一致性

安装

因为etcd是go语言编写的,安装只需要下载对应的二进制文件,并放到合适的路径就行。

解压后是一些文档和两个二进制文件etcd和etcdctl。etcd是server端,etcdctl是客户端。

github地址

配置

etcd的配置文件时使用的yaml文件格式。

单机启动

name: 'single-etcd'
listen-peer-urls: http://0.0.0.0:2381 # 用于指定etcd和客户端的连接端口
listen-client-urls: http://0.0.0.0:2382 # 用于指定etcd服务器之间通讯的端口
auto-compaction-retention: '2' # 防止跑得太久了之后无法出现碎片太多的问题

启动命令行:

./etcd --config-file etcd-single.yml
@REM 设置连接地址直接查看当前的etcd的情况
etcdctl --endpoints=127.0.0.1:2381 endpoint status
127.0.0.1:2381, 8e9e05c52164694d, 3.5.0, 25 kB, true, false, 2, 4, 4,

我们可以通过使用指令来查询里面的信息。

PS C:\Users\abel> etcdctl --endpoints=127.0.0.1:2381 put /test/key "test kubernetes"
OK
PS C:\Users\abel> etcdctl --endpoints=127.0.0.1:2381 get /test/key
/test/key
test kubernetes

/all/server

集群启动

基本用法

服务发现:服务器将会往etcd中的key里面写入自己的服务器连接信息,并且将
        写入的时候,使用租赁的方式,意味着如果租赁结束了,这个数据将会
        被删除掉。客户端将会在启动的时候获取一次etcd里面信息,并且使用
        watch操作,监听这个etcd中的key里面的信息的变换。当某个服务器
        挂掉了,或者开始工作了,就能读取到数据。

数据共享:类似于redis的用法,直接将数据写入到黑板上,连接上的服务器可以
        在里面查询到存储从信息。

raft算法

一致性算法是在复制状态机的背景中被提出来的。指的是在一组服务器中产生同样状态的副本,因此即使一些机器发生故障之后仍然能正常工作。复制状态机被用于解决分布式系统中的容错处理。zookeeper 中就使用了复制状态机。在这之前还有一种叫做Paxos算法。复制状态机是通过复制日志来实现的。每一台服务器保存着一份日志,日志中包含一系列的命令,状态机会按顺序执行这些命令。因为每一台计算机的状态机都是确定的,所以每个状态机的状态都是相同的,执行的命令是相同的,最后的执行结果也就是一样的了。如何保证复制日志的一致就是一致性算法的工作内容。

一致性算法共性:

确保安全性(从来不会返回错误的结果)在所有的非拜占庭问题的条件下,包括网络延迟、分区、丢包、乱序等情况
可用性 只要集群中大多数节点能够彼此通信,也能和客户端保持通信、
不依赖定时去确保日志的一致性
通常情况下,只要集群中大多数节点对一轮 RPC 调用做出了相应,一条命令即可被视为已经完成。集群中少部分慢的节点不会影响整个系统的性能。

Raft和现有算法的特性:

Strong leader: raft 和其他一致性算法相比, 采用了一种更强力的领导策略。 比如, 日志条目只允许从领导到服务器。 这样简化了对于重复日志的管理,并让 raft 更加容易理解。
Leader election: raft 采用随机定时器来选举领导。 这样只需要在心跳中加入少量的随机策略,就能简单迅速的解决冲突问题
Membership changes:: raft 在调整聚群成员的时候采用了一种联合一致性( joint consensus)的机制。这样当配置改变的时候,集群可以继续运行

工作原理,先看演示动画。有时间再看别人的笔记。最后看论文。

报错信息etcdserver: mvcc: database space exceeded

  1. 将启动语句增加auto-compaction-retention参数。

nohup etcd --auto-compaction-retention=1 --config-file etcd1.yml >> /root/lib/etcd-v3.5.0-linux-amd64/etcd1.log &

  1. 重新启动etcd之后,使用命令将etcd空间清理掉
#使用API3
export ETCDCTL_API=3
# 查看告警信息,告警信息一般 memberID:8630161756594109333 alarm:NOSPACE
etcdctl --endpoints=http://0.0.0.0:2382 alarm list

# 获取当前版本
rev=$(etcdctl --endpoints=http://0.0.0.0:2382 endpoint status --write-out="json" | egrep -o '"revision":[0-9]*' | egrep -o '[0-9].*')
# 压缩掉所有旧版本
etcdctl --endpoints=http://0.0.0.0:2382 compact $rev
# 整理多余的空间
etcdctl --endpoints=http://0.0.0.0:2382 defrag
# 取消告警信息
etcdctl --endpoints=http://0.0.0.0:2382 alarm disarm

➜  etcd-v3.5.0-linux-amd64 etcdctl --endpoints=http://0.0.0.0:2382 endpoint status
http://0.0.0.0:2382, 7d5020cb43815ca4, 3.5.0, 488 MB, false, false, 9, 23114017, 23114017, 
➜  etcd-v3.5.0-linux-amd64 etcdctl --endpoints=http://0.0.0.0:2381 endpoint status
http://0.0.0.0:2381, b49ab97cd90e450b, 3.5.0, 704 MB, true, false, 9, 23116118, 23116118, 
➜  etcd-v3.5.0-linux-amd64 etcdctl --endpoints=http://0.0.0.0:2379 endpoint status
http://0.0.0.0:2379, 3d9c87710817443b, 3.5.0, 2.1 GB, false, false, 9, 23116138, 23116138,
空间还是占了2.1GB

尝试使用etcd制作服务发现

源码下载地址
测试代码地址

服务器启动的时候开启一个租赁obj
将服务器的信息捆绑租赁写入到etcd
客户端watch服务器写入的数据key,当服务器关闭或者更新数据的时候将会有通知。

引用

ETCD使用中需要注意的问题--自动压缩--最大字节数--存储数据大小 我们在实际生产中使用ETCD存储元数据, 起初集群规模不大的时候元数据信息不多没有发现什么问题。随着集群规模越来越大问题逐渐暴露了有些实际的配置还是需要在初始化的时候就研究确定。 阅读详情

相关推荐

Kubernetes Etcd不可用日志:NOSPACE 的问题修复

两套k8s集群同一天同时出现etcd集群空间超过配额,时发现所有的均返回503报错,查看etcd的告警发现有的信息且 中的DB SIZE大于2GiB。 版本信息kubernetes版本:v1.17.0etcd版本:3.3.10,运行方式为docker容器 1、将API版本调整为3 2、声明变量ETCD_ENDPOINT 如果不清楚etcd证书存放的位置可以使用命令查看,当然endpoint也可以用这种方法 3、备份etc

专注基础架构领域 1844

etcdv3.6源码流程---compact

因为treeIndex中包含所有的elemkey,所以压缩的思路就是先遍历整个treeIndex来进行压缩:没有被删除的elemkey就用最后一次写入的值来覆盖,然后把该elemkey对应的(revision,version)作为key保存到一个map keep中,被删除的key则不会保存到该map keep中,然后遍历数据库中所有key,如果该key即(revision,version)不在map keep中,那么就从数据库中删除该key,如果在,则跳过,然后就完成了整个压缩操作。

cser的博客 825

本地部署DeepSeek-Coder-6.7B 离线版的完整指南:打造适配当前系统的AI助手

《DeepSeek-Coder-6.7B本地部署指南》详细介绍了如何离线部署这款专注于代码生成的AI模型。文章涵盖硬件要求(推荐8核CPU、32GB内存、NVIDIA RTX3080显卡)、软件依赖(Python3.8+、CUDA11.0+、PyTorch1.9+)以及具体安装步骤,包括模型下载、路径配置和GPU加速设置。重点说明如何通过输入系统配置文档和使用说明书,让模型生成适配特定系统的代码,并提供了参数调优和模型微调的方法。该指南旨在帮助开发者在本地安全高效地使用AI助手,实现代码自动生成与优化,提升

欢迎来到我的优快云博客!我专注于技术创新和数字化转型,特别是在低代码平台、人工智能和大数据分析领域的探索与应用。通过深入分析各种行业案例,帮助企业加速数字化进程,提升运营效率与创新能力。在这里,您将找到关于低代码平台、AI技术、数据分析与 1492

etcd 性能测试与调优

原文链接:https://www.jianshu.com/p/f31ef5e7bdd0etcd 是一个分布式一致性键值存储。其主要功能有服务注册与发现、消息发布与订阅、负...

云原生实验室 1万+

快速修改Petalinux编译生成的rootfs.cpio.gz文件:无需重新编译的实用技巧

本文详细介绍了如何在不重新编译的情况下快速修改Petalinux生成的rootfs.cpio.gz文件,适用于Zynq平台开发。通过解包image.ub、修改rootfs内容并重新打包的完整流程,可显著提升调试效率,特别适合频繁修改配置文件的场景。文章还提供了自动化脚本和进阶应用技巧,帮助开发者优化工作流程。

weixin_28285943的博客 239

[USACO2023-JAN-Bronze] T2 Air Cownditioning II 题解

[USACO2023-JAN-Bronze] T2 Air Cownditioning II题解

1652

ETCD 压缩调优配置

应用场景: etcd有默认的存储空间。官方推荐2个g,可以配置到8个g。这个空间用来存储etcd的key-value。 etcd的存储方式: etcd对一个key的操作是 append,对一个key的操作,是一个增加版本号的操作,存储起来。然后对这些key根据版本号压缩。 一个trick,etcd可以访问历史数据(在被压缩之前) etcd的压缩: 压缩有两种方式: 按时间段来(配置开启,periodic): 每1/10个配置的时间段,执行一次压缩,压缩的数据是1/10个小时计算的。 按

su_ren的博客 3346

在Redroid容器中构建Frida RPC服务:自动化生成淘宝X-Sign签名参数

本文详细介绍了在Redroid容器中构建Frida RPC服务,实现自动化生成淘宝X-Sign等签名参数的完整方案。通过逆向分析定位关键方法,定制Redroid系统使Frida-Server常驻运行,并编写Frida脚本将签名方法暴露为RPC接口,最终封装为可远程调用的微服务,解决了签名生成的可移植性与工程化难题。

ice55的博客 643

etcd 源码阅读环境搭建

最近一个项目用了 etcd,想研读一下 etcd 源码。既然是源码阅读,第一步就是搭建源码阅读环境,好像网上没有类似的文章;官网也没有提供文档。在下不算特别熟悉 go 语言,有一年没认真写 go 了,所以倒腾了很久。总算还是倒腾出来了,遂写文章记录一下,好记性不如烂键盘。 注:本文暂时基于 etcd 的 master 分支,对于 release-3.3 分支,还没有详细研究过,详细研究过之后...

Clockworkai's Blog 1050

数据结构课程设计C/C++版--美团餐馆预定信息的管理与分析 5 6

第5关:注销个人信息。

m0_62222486的博客 2119

【即插即用模块】注意力篇 | TGRS 2025 | CDFIM:通道+空间多尺度注意力,双模态特征融合增强,性能翻倍!

C2DFF-Net提出了一种轻量级跨模态特征融合模块CDFIM,通过模态差异感知和多尺度深度滤波增强双模态互补信息。该模块采用通道-空间注意力协同机制,以极低计算成本(仅增加0.26M参数)提升多模态目标检测性能,在三个遥感数据集上平均提升mAP约1.7%。适用于无人机等边缘设备的实时检测任务,为跨模态融合提供高效解决方案。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 624

【ETCD】【源码阅读】ETCD启动流程源码解读

函数,该函数负责实际启动 ETCD 实例或代理模式。实例,封装了 ETCD 服务的所有组件,包括 Raft 节点、存储引擎、gRPC 和 HTTP 接口。如果服务未成功启动,则关闭所有资源和监听器。如果当前节点是新成员,则生成初始集群信息,包括节点 URL 和集群令牌。:这是实际启动 ETCD 服务的函数,负责初始化和启动所有必要组件。:根据配置和参数,决定是启动标准 ETCD 节点还是运行代理模式。启动 Raft 节点,监听节点间和客户端的请求。,这是 ETCD 的实际启动逻辑。ETCD 启动的入口在。

zhangshenglu1的博客 1567

SAP RAP 校验全流程:从 EML 读取到消息上屏与阻止落库

本文系统梳理了 SAP ABAP RAP 中的校验流程(The Validation Process),结合 Airline/Connection 案例,详细讲解了三类核心校验:语义键唯一性、外键有效性和字段间一致性。文章覆盖了 EML 的 READ ENTITIES 操作、reported-* 与 failed-* 结构的使用方法、消息创建与字段绑定技巧,以及处理草稿数据时的 UNION 查询策略。通过代码示例演示了如何实现校验逻辑、生成错误消息并阻止无效数据持久化,同时提供了常见问题的排查建议。全文注重

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 332

Go 学习笔记整合

go语言学习笔记,一套搞定go语言。

追求幸福,探索未知的博客 2329

如何使用Agent框架来模拟群体智能?

Agent 框架作为人工智能领域的重要工具,可以模拟复杂的群体智能行为,广泛应用于社会科学、经济学和行为学等领域。

335

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Go学习笔记---Go中有关环境变量的操作

今天在阅读Go开源分布式 key-value 存储软件etcd的时候,在main函数中遇到了一个有关于系统平台判断的代码如下: func checkSupportArch() { // TODO qualify arm64 if runtime.GOARCH == "amd64" || runtime.GOARCH == "ppc64le" { return } // unsupp...

爱拍凯特的专栏 1211

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

ETCD命令大全

ETCD命令大全 - OrcHome运行etcd执行命令etcd,即可启动server$ etcd2018-10-2311:29:12.8722173.3.72018-10-2311:29:12.87234456536de552018-10-2311:29:12.872400.9.62018-10-2311:29:12.8724372018-10-2311:29:12.872484ofto56https://www.orchome.com/620执行命令etcd,即可启动server Copy最新的AP

大叶子不小的博客 7138

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

从etcd到Apollo:Go微服务配置中心实战指南

配置中心是微服务架构的核心组件,负责动态管理服务配置。在Go生态中,etcd以其分布式一致性优势成为轻量级首选,而Apollo则凭借全功能界面和多环境管理占据企业级市场。本文将通过Go夜读社区的实践案例,对比两种方案的技术选型与落地经验,帮助你构建可靠的配置管理体系。 ## 配置中心演进:从硬编码到分布式管理 传统配置管理面临三大痛点:静态配置修改需重启服务、多环境配置混乱、配置变更缺乏审计追...

gitblog_00052的博客 889

etcd 启动分析_如何阅读 etcd 源码

在前面的几篇文章中,我们已经学习了 Raft 协议、raftexample 和 etcd 常用命令。Raft 和 raftexample 主要对 Raft 协议的认识和实践,etcd 常用命令只能算是揭开 etcd 使用的面纱。此时解读源码,从哪里开始呢?有的同学可能会说:“从 etcdctl 命令开始,从 etcd server 开始 或 从 raft 模块开始“。如果对于一个项目没有整体的认识...

weixin_33312000的博客 197

etcd 概念及源码阅读(一)

etcd 是一个高可用、分布式、键值对存储系统,设计用于存储配置数据、服务发现信息以及协调分布式系统。它最早由 CoreOS 开发,现在由 Cloud Native Computing Foundation (CNCF) 维护和支持。etcd 被广泛用于需要一致性和高可用性的场景,尤其是在容器编排平台 Kubernetes 中扮演着核心角色。

weixin_44613720的博客 898

Go爬虫学习笔记

etcd 这个名字是 etc distributed 的缩写。我们知道,在 Linux 中 etc 目录存储了系统的配置文件,所以 etcd 代表了分布式的配置中心系统。然而,它能够实现的功能远不是同步配置文件这么简单。etcd 可以作为分布式协调的组件帮助我们实现分布式系统。etcd 完整的读写流程。在整个复杂的流程中,核心模块无外乎是 GRPC 请求、权限和参数的检查、WAL 日志的存储、Raft 节点的网络协调以及执行操作更新状态机的状态等。

成长之路 5805

Etcd源码阅读笔记1

type Client struct { Cluster KV //KV存储 Lease Watcher Auth Maintenance conn *grpc.ClientConn cfg Config creds grpccredentials.TransportCredentials resolverGroup *endpoint.ResolverGroup mu *sync.RWMutex ctx c

每天学习一点点的博客 268

内嵌的etcd

注: 原文讲述的是在 Go 语言中如何内嵌etcd服务器,并使用配置文件来启动这个内嵌的etcd服务器。

mohen_777的博客 884

ETCD实现技术总结

https://www.jianshu.com/p/d63265949e52 ETCD实现技术总结  Jay_Guo 关注 2017.09.14 12:39* 字数 5425 阅读 8398评论 1喜欢 27   因为工作需求,公司需要使用ETCD来做gRPC服务的负载均衡,以及集群管理,所以对etcd做了一些研究,希望能给大家带来帮助。   ETCD 1 ETCD 介绍 ...

jfkidear的专栏 819

使用Docker容器来源码编译etcd

背景   etcd是CoreOS公司开发的分布式键值对存储库。在Kubernetes中,我们需要使用etcd作为所有REST API对象的持久化存储。   不幸的是,在github的release中,CoreOS将etcd的二进制可执行文件都放在了亚马逊的S3存储上,在国内访问非常慢。因此,我们只能通过源码编译etcd。 过程   1. 下载etcd源码。 $ git clone htt

cloudinyachao的博客 385

etcd Raft 源码剖析

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

凌桓丶的博客 1592
上一篇: gperftools使用
下一篇: 2021-11-05-golang内存分配
erlang_hell
博客等级 码龄14年 57粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值