etcd——基础原理

author author     2023-04-19     133

关键词:

参考技术A

一个ETCD集群一般由3个或者5个节点组成,两个quorum一定存在交集,则

即:3个节点容忍1个节点故障,5个节点容忍2个节点故障,以此类推。

首先,所有的数据都保存在B+树(灰色),当我们指定了版本信息之后,会直接到灰色B+树中去获取相关的数据;同时,还有另外一个B+树,它维护了key和revions的映射关系,查询key的数据时候,会根据key查询到revision,再通过revision查询到相应的key。

etcd 使用 raft 协议来维护集群内各个节点状态的一致性。简单说,etcd 集群是一个分布式系统,由多个节点相互通信构成整体对外服务,每个节点都存储了完整的数据,并且通过 Raft 协议保证每个节点维护的数据是一致的。

每个 etcd 节点都维护了一个状态机,并且,任意时刻至多存在一个有效的主节点。主节点处理所有来自客户端写操作,通过 Raft 协议保证写操作对状态机的改动会可靠的同步到其他节点。

etcd 的设计目标是用来存放非频繁更新的数据,提供可靠的 Watch插件,它暴露了键值对的历史版本,以支持低成本的快照、监控历史事件。这些设计目标要求它使用一个持久化的、多版本的、支持并发的数据数据模型。

当 etcd 键值对的新版本保存后,先前的版本依然存在。从效果上来说,键值对是不可变的,etcd 不会对其进行 in-place 的更新操作,而总是生成一个新的数据结构。为了防止历史版本无限增加,etcd 的存储支持压缩(Compact)以及删除老旧版本。

逻辑视图

从逻辑角度看,etcd 的存储是一个扁平的二进制键空间,键空间有一个针对键(字节字符串)的词典序索引,因此范围查询的成本较低。

键空间维护了多个修订版本(Revisions),每一个原子变动操作(一个事务可由多个子操作组成)都会产生一个新的修订版本。在集群的整个生命周期中,修订版都是单调递增的。修订版同样支持索引,因此基于修订版的范围扫描也是高效的。压缩操作需要指定一个修订版本号,小于它的修订版会被移除。

一个键的一次生命周期(从创建到删除)叫做 “代 (Generation)”,每个键可以有多个代。创建一个键时会增加键的版本(version),如果在当前修订版中键不存在则版本设置为1。删除一个键会创建一个墓碑(Tombstone),将版本设置为0,结束当前代。每次对键的值进行修改都会增加其版本号 — 在同一代中版本号是单调递增的。

当压缩时,任何在压缩修订版之前结束的代,都会被移除。值在修订版之前的修改记录(仅仅保留最后一个)都会被移除。

物理视图

etcd 将数据存放在一个持久化的 B+ 树中,处于效率的考虑,每个修订版仅仅存储相对前一个修订版的数据状态变化(Delta)。单个修订版中可能包含了 B+ 树中的多个键。

键值对的键,是三元组(major,sub,type)

键值对的值,包含从上一个修订版的 Delta。B+ 树 —— 键的词法字节序排列,基于修订版的范围扫描速度快,可以方便的从一个修改版到另外一个的值变更情况查找。

etcd 同时在内存中维护了一个 B 树索引,用于加速针对键的范围扫描。索引的键是物理存储的键面向用户的映射,索引的值则是指向 B+ 树修该点的指针。

元数据存储——Kubernetes

Service Discovery(Name Service)

Distributed Coordination: Leader Election

浅入深出etcd之raft原理

前言这次我们来说说,有关于etcd原理的一些事情。之前我们已经了解到了etcd是一个分布式的k-v存储,那么它究竟是如何保证数据是如何复制到每个节点上面去的呢?又是如何保证在网络分区的情况下能正常工作下去?raft协议到... 查看详情

etcd工作原理和部署指南

参考技术A​etcd是由CoreOS团队发的一个分布式一致性的KV存储系统,可用于服务注册发现和共享配置,随着CoreOS和Kubernetes等项目在开源社区日益火热,它们项目中都用到的etcd组件作为一个高可用强一致性的服务发现存储仓库... 查看详情

etcd基础维护

参考技术A本文所有命令均在TLS环境下运行,如需参考,请自行更改为您的环境(节点IP,证书路径),无证书环境请删除证书相关指令本文所有命令均在etcdctl默认api,即etcdapiv2下操作,v3指令略有改动可能不匹配,详情请查阅官... 查看详情

云原生k8s精选的分布式可靠的键值存储etcd原理和实践(代码片段)

...其整体架构和常用术语,进一步研究其读写和日志复制的原理,最后完整部署单示例和多实例集群和介绍一些常见命令。@目录概述定义应用场景特性为何使用etcd术语架构原理读操作写操作日志复制部署单示例快速部署多实例集... 查看详情

1etcd基础介绍(代码片段)

...或者问题。通过上面,我们知道了etcd是分布式系统中的基础设施,为 查看详情

从0实现分布式任务调度系统--etcd基础操作(代码片段)

下载:etcd-v3.3.18-linux-amd64.tar.gz ;解压:tar-zxvfetcd-v3.3.18-linux-amd64.tar.gz解压后的情况如下:其中etcd是服务端程序,etcdctl是客户端程序。   2.启动etcd服务(后台启动,并监听公网IP,默认只监听localhost):n 查看详情

技术分享|基于etcd的分布式锁实现原理及方案(代码片段)

1.为什么选择Etcd据官网介绍,Etcd是一个分布式,可靠的Key-Value存储系统,主要用于存储分布式系统中的关键数据。初见之下,Etcd与NoSQL数据库系统有几分相似,但作为数据库绝非Etcd所长,其读写性能远不... 查看详情

etcd-etcd快速入门及promql查询etcd指标

...了etcd项目。etcd使用Go语言实现,是分布式系统中重要的基础组件,目前最新版本为V3.4.9。etcd可以用来构建高可用的分布式键值数据库,根据官网介绍,总结来说有如下的特点:简单:etcd的安装简单,且为用户提供了HTTPAPI,用... 查看详情

etcd简要使用

...支持范围查找。本文总结etcd的简要使用,下篇再对底层原理进行解析。 查看详情

k8setcd与持久化存储

参考技术A1、是什么2、etcd架构及工作原理(1)数据流程一个用户的请求发送过来,会经过HTTPServer转发给store进行具体事务处理,如果涉及到节点的修改,则需要交给raft模块进行状态的变更,日志的记录,然后再同步给别的etcd节点... 查看详情

kubernetes进阶训练营pod基础(代码片段)

Pod基础K8s架构图组件kube-apiserverkube-controller-managerkube-controller-manageerkube-schedulerkubeletkube-proxykubectl核心资源对象PodLabelDeploymentService集群部署环境准备使用kubeadm部署Kubernetes初始化集群添加节点清理资源清单Pod原理Pod的生命周期Pod状... 查看详情

简单实用kubernetes的etcd备份与恢复实现恢复集群配置(代码片段)

...cluster/configure-upgrade-etcd/#backing-up-an-etcd-cluster一.etcd的工作原理可将其分成两层次:Http层请求、接收消息;剩下的构成一部分,负责对数据及事务的处理 查看详情

云原生第三周--kubernetes组件详解(代码片段)

...速度可靠:使用Raft算法实现了存储的合理分布Etcd的工作原理etcd配置文件root@192:~#cat/etc/systemd/system/etcd.service[Unit]Description=EtcdServerAfter=network.targetAfter=network-online.targetWants=network-online.targetDocumentation=https://github.com/coreos[Service]Type=not... 查看详情

etcdbackend存储引擎实现原理(代码片段)

文章目录etcdKV存储层原理Backend存储引擎读事务ReadTX并发读事务ConcurrentReadTx读事务的range查询读写事务batchTxbatchTx的批量提交MVCC索引与存储实现Revision概念keyIndex和treeIndexkeyIndextreeIndex索引的恢复store存储的实现etcdKV存储层原理要理... 查看详情

2etcd单机部署和集群部署(代码片段)

上一章我们认识了etcd,简单的介绍了etcd的基础概念,但是理解起来还是比较抽象的。这一章我们就一起来部署下etcd。这样可以让我们对etcd有更加确切的认识。1、etcd单实例部署对于平常的学习,其实搭建一个单机节点是够了的... 查看详情

etcdv3clientwatcher原理分析

Etcdv3clientwatcher原理分析背景etcdv3clientwatcher整体架构源码分析背景最近在实现高可用流控防护组件sentinel的golang版本,扩展数据源这一块,在golang生态里面是etcd是非常重要的一个角色。需求是这样,每个集成sentinel的ap... 查看详情

go语言开发分布式任务调度轻松搞定高性能crontab

...一下本课程的基本内容,包括:我们要做什么、要求什么基础、将学会哪些工具、收获哪些独家干货,以及课程具体安排。1-1导学视频第2章如何执行shell命令执行"定时任务"其实就是执行"shell命令"。在本章中,将首先带大家区分... 查看详情

使用etcd实现master的选举功能(代码片段)

...写是核心。所以造就了etcd可以用于master的选举的场景。原理etcdclientv3concurrency对选举进行了封装importgithub.com/coreos/etcd/clientv3/concurrency上篇文章介绍了etcd使用txn实现分布式锁,而节点选举也要依靠Txn进行创建key的CAS操作zookeeper是... 查看详情