【星海出品】分布式存储数据库etcd

etcd 数据库由 CoreOS 公司创建。

https://github.com/etcd-io/etcd

api信息
https://etcd.io/docs/v3.5/dev-guide/api_reference_v3/
etcdctl --help

etcd 最初由 CoreOS 公司开发,作为其核心项目之一。
CoreOS 成立于 2013 年,专注于容器化技术(如 Linux 容器、rkt 容器运行时)和分布式系统基础设施。

2018 年,CoreOS 被 Red Hat 收购(后 Red Hat 又并入 IBM)

轻量级、高可用的键值存储,用于存储分布式系统的关键元数据(如服务发现、配置管理)。

具有强一致性、高可靠性和易用性。

ETCD 是一个高可用的分布式键值key-value数据库,可用于服务发现。

etcd 存储了 K8s 集群的所有状态(如 Pod 定义、Service 配置、节点信息),是控制平面的“大脑”。
基于 Raft 共识算法,提供强一致性、高可用性,支持 watch 机制实现实时数据同步。

K8S API 服务器接收到请求后,会验证请求格式和内容。通过验证的请求会被存储到 etcd(Kubernetes 的分布式数据库)中。
对象创建:一旦存储在 etcd 中,Pod 就被正式创建,标记为 Pending 状态。

Raft 算法

https://www.youtube.com/watch?v=YbZ3zDzDnrw&feature=youtu.be

角色
Leader选举(Leader election)
日志复制(Log replication)
安全性(Safety)
日志压缩(Log compaction)

Raft将系统中的角色分为领导者(Leader)、跟从者(Follower)和候选者(Candidate)

Leader:接受客户端请求,并向Follower同步请求日志,当日志同步到大多数节点上后告诉Follower提交日志。
Follower:接受并持久化Leader同步的日志,在Leader告之日志可以提交之后,提交日志。
Candidate:Leader选举过程中的临时角色。

Raft 任意时刻最多只有一个Leader,正常工作期间只有Leader和Followers。
Raft算法将时间分为一个个的周期(term)
选举Leader之后,Leader会在整个周期内管理整个集群
如果Leader选举失败,该term就会因为没有Leader而结束。
没有服务器赢得多数的选票,Leader选举失败,等待选举时间超时后发起下一次选举。

leader会定期发送心跳,根据唯一Term标识进行通信
选举超时随机化:节点在超时时间内未收到leader心跳会发起选举,但超时时间随机化(如150ms-300ms),确保大多数情况下只有一个节点率先发起选举。

Follower将其当前term加一然后转换为Candidate。
它首先给自己投票并且给集群中的其他服务器发送 RequestVote RPC。

当旧leader恢复时,它会发现当前Term已超过自己的Term,立即切换为Follower状态,并接受新leader的日志。
如果旧leader在失联期间提交了部分日志,新leader会通过日志复制机制(AppendEntries RPC)强制旧leader回退冲突日志,确保全局一致性。

日志冲突处理:如果旧leader在失联期间提交了部分日志,新leader会通过日志复制机制(AppendEntries RPC)强制旧leader回退冲突日志,确保全局一致性。

Raft要求leader必须获得超过半数的节点确认(quorum)才能提交日志。即使网络分区导致部分节点隔离,只有拥有多数节点的分区能选举新leader,另一分区无法形成有效选举。

Raft保证新leader一定包含所有已提交的日志(通过RequestVote阶段的日志完整性检查),避免日志分叉。

如果leader突然崩溃导致缺少了一条followers的条目,则Leader为了使Followers的日志同自己的一致,Leader需要找到Followers同它的日志一致的地方,然后覆盖Followers在该位置之后的条目。
当 leader 和 follower 日志冲突的时候,leader 将校验 follower 最后一条日志是否和 leader 匹配,如果不匹配,将递减查询,直到匹配,匹配后,删除冲突的日志。这样就实现了主从日志的一致性。
Leader会通过RPC向follower发出日志复制,等待所有的follower复制完成,这个过程是阻塞的。
老的leader里面没提交的数据会回滚,然后同步新leader的数据。

持久化

etcd 通过 WAL + Snapshot 的组合
日志会定期压缩,带有快照功能
Leader 节点会保留所有未提交的日志条目,但已提交的日志会在以下条件触发压缩

已接收10000条日志条目,或者超过5分钟

日志保留策略:快照生成后,所有早于该快照的日志会被标记为可删除。

每个节点上的kubelet定期向API Server上报节点状态(如CPU、内存、磁盘使用情况),API Server将这些信息写入etcd。
当创建Pod时,API Server将Pod的元数据(如名称、标签、容器镜像等)写入etcd。

调度器从etcd读取节点状态和Pod元数据,基于算法(如资源匹配、亲和性规则)选择最佳节点,并将调度结果写回etcd。

etcd使用Raft算法保证强一致性,确保所有节点看到的数据视图一致。这对调度器的决策至关重要,避免“裂脑”问题。

etcd通过多版本控制系统(MVCC)保存键值的所有历史变更
默认保留最近1000个版本,旧版本会被合并到历史文件。
MVCC版本号递增:每次修改操作(如 PUT、DELETE)均触发全局版本号加1,支持数据追溯和并发控制。
启动参数作用:

建议通过 etcdctl endpoint status 或监控工具(如 Prometheus)观察版本号和存储使用情况,结合业务需求调整参数配置。

空间问题

–auto-compaction-retention
作用:设置自动压缩(Auto-Compaction)的保留策略,控制旧版本数据的保留时间。
原理:ETCD会定期清理低于指定保留时间的旧版本数据,释放存储空间。
配置示例:
–auto-compaction-retention=1h:保留最近1小时内的数据,自动压缩更早的版本。
若未配置此参数,默认禁用自动压缩(需手动执行 compact 命令)。
–auto-compaction-mode:定义压缩模式,可选 periodic(基于时间)或 revision(基于版本号)。
示例:–auto-compaction-mode=periodic --auto-compaction-retention=5m 表示每5分钟压缩一次旧数据。

–quota-backend-bytes
作用:设置后端存储(Backend Storage)的配额,限制数据库的最大大小。
原理:当数据库大小超过配额时,ETCD会触发警报或自动压缩操作。
配置示例:
–quota-backend-bytes=8589934592:限制数据库大小为8GB(默认值通常为2GB)。
若未配置此参数,使用默认配额(可能因版本不同而有所差异)。

参考文档:https://cloud.tencent.com/developer/article/2182442?areaSource=102001.19&traceId=NJua_dMWh91JYgM2Cm7jT
在这里插入图片描述

RPC

Raft 算法中服务器节点之间通信使用远程过程调用(RPC)

RequestVote RPC:候选人在选举期间发起。

AppendEntries RPC:领导人发起的一种心跳机制,复制日志也在该命令中完成。

InstallSnapshot RPC: 领导者使用该RPC来发送快照给太落后的追随者。

外部etcd关联

在 kubeadm 配置中指定外部 etcd
kubeadm init --config kubeadm-config.yaml

# kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
etcd:external:endpoints:- https://etcd-node1:2379- https://etcd-node2:2379- https://etcd-node3:2379caFile: /etc/ssl/etcd/ca.crtcertFile: /etc/ssl/etcd/client.crtkeyFile: /etc/ssl/etcd/client.key
静态pod
# etcd-pod.yaml
apiVersion: v1
kind: Pod
metadata:name: etcdnamespace: kube-system
spec:containers:- name: etcdimage: quay.io/coreos/etcd:v3.5.9command:- etcd- --advertise-client-urls=http://0.0.0.0:2379- --listen-client-urls=http://0.0.0.0:2379hostNetwork: truevolumes:- name: etcd-datahostPath:path: /var/lib/etcd
kubectl apply -f etcd-pod.yaml

网络相关

Calico Source Code
https://github.com/projectcalico/calico

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/903051.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025新版修复蛇年运势测试风水起名系统源码

2025新版修复蛇年运势测试风水起名系统源码 通过网盘分享的文件:2025xbfsysweb.rar 链接: https://pan.baidu.com/s/1r1MOkJJJMj9s9nQX_GzI3Q 提取码: 9weh 备用下载地址:http://pan.1234f.com:5212/s/JK1uw

Vue3 Pinia

一、Pinia 核心概念 Pinia 是 Vue3 官方推荐的状态管理库,相比 Vuex 4,具有以下优势: 更简洁的 API(移除 mutations) 完整的 TypeScript 支持 支持组合式 API 自动代码分割 轻量级(仅 1KB)…

音视频小白系统入门课-4

本系列笔记为博主学习李超老师课程的课堂笔记,仅供参阅 往期课程笔记传送门: 音视频小白系统入门笔记-0音视频小白系统入门笔记-1音视频小白系统入门笔记-2音视频小白系统入门笔记-3 将mp4文件转换为yuv文件 ffmpeg -i demo.mp4 # 输入文件-an …

6.2 内容生成与营销:个性化内容创作与营销策略优化

随着消费者对个性化体验的需求日益增长,传统的内容创作与营销方式已难以满足市场竞争的需要。基于大语言模型(LLM)与智能代理(Agent)的技术为企业提供了全新的解决方案,能够实现高效、精准、规模化的内容生…

kafka课后总结

Kafka是由LinkedIn开发的分布式发布 - 订阅消息系统,具备高吞吐量、低延迟、可扩展性、持久性、可靠性、容错性和高并发等特性。其主要角色包括Broker、Topic、Partition、Producer、Consumer、Consumer Group、replica、leader、follower和controller。消息系统中存…

DataStreamAPI实践原理——计算模型

引入 通过前面我们对于Flink的理解,我们知道它吸收了 Dataflow 的理念,以及此前已有的流处理系统(如 S4、Storm、MillWheel)的经验,实现了批流一体化的高效数据处理,并且通过灵活的窗口机制、事件时间与水…

项目笔记1:通用 Service的常见方法

通用 Service 通常封装了常见的业务逻辑操作,以提高代码的复用性和可维护性。不同的框架和业务场景下,通用 Service 的方法会有所差异,但一般都会包含一些基本的增删改查(CRUD)操作,以下为你详细介绍&#…

阿里云99机器总是宕机,实测还是磁盘性能差

阿里云99计划总是宕机,经过反复排查,最终确认还是磁盘性能差。 阿里云99机器使用的磁盘类型是Entry云盘40GiB (2120 IOPS) 按照官方的一些数据,这个磁盘最小iops是1800最大是6000,实际使用中发现,这个6000值很虚,这个…

Fedora 43 计划移除所有 GNOME X11 相关软件包

Fedora 43 计划移除所有 GNOME X11 相关软件包,这是 Fedora 项目团队为全面拥抱 Wayland 所做的重要决策。以下是关于此计划的详细介绍: 提案内容:4 月 23 日,Neal Gompa 提交提案,建议从 Fedora 软件仓库中移除所有 G…

魔幻预言手游》:职业介绍!

在《魔幻预言》手游中,共有武玄、魔魅、剑仙三大核心职业,各具特色且定位鲜明,以下为具体介绍: 一、武玄(战士) 核心定位:近战物理输出与团队增益担当,兼具控制与防御能力。 战斗风…

精益数据分析(27/126):剖析用户价值与商业模式拼图

精益数据分析(27/126):剖析用户价值与商业模式拼图 在创业和数据分析的领域中,每一次深入学习都是一次成长的契机。今天,我们继续秉持共同进步的理念,深入研读《精益数据分析》,剖析用户价值的…

【SwitchyOmega安装教程】

目录 一、插件安装 1. 下载安装文件 2. 打开浏览器扩展安装页面 3. 安装插件 二、界面详情 三、配置信息 3.1 设置IP 1、查看IP地址信息 2、批量测试IP是否有效 3、点击扩展程序,选择 Proxy SwitchyOmega 4、 点击选项进行配置 5、配置页面 一、插件安装 1…

矫平机终极指南:特殊材料处理、工艺链协同与全球供应链管理

一、特殊材料矫平:挑战与创新解决方案 1. 高温合金(如Inconel 718)处理 技术难点: 屈服强度高达1100 MPa,传统矫平力不足 高温下易氧化,需惰性气体保护环境 解决方案: 采用双伺服电机驱动&a…

反事实——AI与思维模型【82】

一、定义 反事实思维模型是一种心理认知模型,它指的是人们在头脑中对已经发生的事件进行否定,然后构建出一种可能性假设的思维活动。简单来说,就是思考“如果当时……,那么就会……”的情景。这种思维方式让我们能够超越现实的限制,设想不同的可能性和结果,从而对过去的…

Nginx:支持 HTTPS

文章目录 Nginx 开启 ssl 以支持 HTTPS1 生成本地证书2 开启 ssl 以支持 HTTPS3 将 https 的请求转发给 http 最终的 nginx.conf 如下 Nginx 开启 ssl 以支持 HTTPS [!IMPORTANT] 在下文中,将采用如下定义。 HTTP端口: 80 HTTPS端口: 443 服务…

[计算机科学#2]:从继电器到晶体管的电子计算机发展史(庞然大物的进化)

【核知坊】:释放青春想象,码动全新视野。 我们希望使用精简的信息传达知识的骨架,启发创造者开启创造之路!!! 内容摘要:本文讲述了20世纪初至1950年代计算机技术的发展历程…

【ESP32S3】Cache 框图和操作

ESP32-S3 采用双核共享 ICache (指令缓存) 和 DCache (数据缓存) 结构,如下图所示。以便当 CPU 的指令总线和数据总线同时发起请求时,也可以迅速响应: Cache 的存储空间与内部存储空间可以复用。具体为 Internal SRAM0…

wireshark从HEX转储导入使用方法

官方资料: https://www.wireshark.org/docs/wsug_html_chunked/ChIOImportSection.html 方法1: 文本文件,纯内容导入: ff ff ff ff ff ff 00 00 00 00 5f 0f 08 06 00 01 08 00 06 04 00 01 00 00 00 00 5f 0f 64 01 60 10 00 00 00 00 00 00 64 01 01…

【Android】四大组件之Activity

目录 一、什么是Activity 二、如何创建和配置Activity 三、Activity 跳转与数据传递 四、数据保存与恢复 五、Activity 启动模式 六、自定义返回行为 七、复杂界面布局 你可以把Activity想象成手机屏幕上的一个“页面”。比如,当你打开一个App时,…

uml类关系(实现、继承,聚合、组合,依赖、关联)

drawio和EA是架构设计时经常使用的画图工具。 drawio学习门槛低,使用灵活,但是功能仅仅限于画图。 EA学习门槛高,但是功能更加的丰富: ①在画图方面,EA严格满足UML标准,EA中的图和类是关联的&#xff0c…