首页 > 其他分享 >Etcd 概述

Etcd 概述

时间:2023-06-18 23:45:52浏览次数:45  
标签:Etcd Kubernetes -- 模块 API 概述 etcd Raft

Etcd 概述

什么是 Etcd ?

Etcd 是 CoreOS 团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法,Etcd基于 Go 语言实现。

名字由来,它源于两个方面,unix的“/etc”文件夹和分布式系统(“D”istribute system)的D,组合在一起表示etcd是用于存储分布式配置的信息存储服务。

 

Kubernetes 为什么用 Etcd ?

2014年6月,Google的Kubernetes项目诞生了,我们前面所讨论到Go语言编写、etcd高可用、Watch机制、CAS、TTL等特性正是Kubernetes所需要的,它早期的0.4版本,使用的正是etcd v0.2版本。

Kubernetes是如何使用etcd v2这些特性的呢?举几个简单小例子。

当你使用Kubernetes声明式API部署服务的时候,Kubernetes的控制器通过etcd Watch机制,会实时监听资源变化事件,对比实际状态与期望状态是否一致,并采取协调动作使其一致。Kubernetes更新数据的时候,通过CAS机制保证并发场景下的原子更新,并通过对key设置TTL来存储Event事件,提升Kubernetes集群的可观测性,基于TTL特性,Event事件key到期后可自动删除。

Kubernetes项目使用etcd,除了技术因素也与当时的商业竞争有关。CoreOS是Kubernetes容器生态圈的核心成员之一。

 

Etcd 版本变化

时间轴图,总结一下etcd v1/v2关键特性

 

然而随着Kubernetes项目不断发展,v2版本的瓶颈和缺陷逐渐暴露,遇到了若干性能和稳定性问题,Kubernetes社区呼吁支持新的存储、批评etcd不可靠的声音开始不断出现。

问题如下

 

2016年6月,etcd 3.0诞生,随后Kubernetes 1.6发布,默认启用etcd v3,助力Kubernetes支撑5000节点集群规模。

时间轴及重要特性

发展到今天,在 GitHub 上 star 数超过43K。在 Kubernetes 的业务场景磨炼下它不断成长,走向稳定和成熟,成为技术圈众所周知的开源产品,而 v3方案的发布,也标志着 etcd 进入了技术成熟期,成为云原生时代的首选元数据存储产品。

基础架构

你可以看到,按照分层模型,etcd可分为Client层、API网络层、Raft算法层、逻辑层和存储层。这些层的功能如下:

  • Client层:Client层包括client v2和v3两个大版本API客户端库,提供了简洁易用的API,同时支持负载均衡、节点间故障自动转移,可极大降低业务使用etcd复杂度,提升开发效率、服务可用性。

  • API网络层:API网络层主要包括client访问server和server节点之间的通信协议。一方面,client访问etcd server的API分为v2和v3两个大版本。v2 API使用HTTP/1.x协议,v3 API使用gRPC协议。同时v3通过etcd grpc-gateway组件也支持HTTP/1.x协议,便于各种语言的服务调用。另一方面,server之间通信协议,是指节点间通过Raft算法实现数据复制和Leader选举等功能时使用的HTTP协议。

  • Raft算法层:Raft算法层实现了Leader选举、日志复制、ReadIndex等核心算法特性,用于保障etcd多个节点间的数据一致性、提升服务可用性等,是etcd的基石和亮点。

  • 功能逻辑层:etcd核心特性实现层,如典型的KVServer模块、MVCC模块、Auth鉴权模块、Lease租约模块、Compactor压缩模块等,其中MVCC模块主要由treeIndex模块和boltdb模块组成。

  • 存储层:存储层包含预写日志(WAL)模块、快照(Snapshot)模块、boltdb模块。其中WAL可保障etcd crash后数据不丢失,boltdb则保存了集群元数据和用户写入的数据。

概念术语

  • Raft:etcd所采用的保证分布式系统强一致性的算法。

  • Node:一个Raft状态机实例。

  • Member: 一个etcd实例。它管理着一个Node,并且可以为客户端请求提供服务。

  • Cluster:由多个Member构成可以协同工作的etcd集群。

  • Peer:对同一个etcd集群中另外一个Member的称呼。

  • Client: 向etcd集群发送HTTP请求的客户端。

  • WAL:预写式日志,etcd用于持久化存储的日志格式。

  • snapshot:etcd防止WAL文件过多而设置的快照,存储etcd数据状态。

  • Proxy:etcd的一种模式,为etcd集群提供反向代理服务。

  • Leader:Raft算法中通过竞选而产生的处理所有数据提交的节点。

  • Follower:竞选失败的节点作为Raft中的从属节点,为算法提供强一致性保证。

  • Candidate:当Follower超过一定时间接收不到Leader的心跳时转变为Candidate开始竞选。

  • Term:某个节点成为Leader到下一次竞选时间,称为一个Term。

  • Index:数据项编号。Raft中通过Term和Index来定位数据。

etcdctl 常用命令

全局参数

ETCD_CA_CERT="/etc/kubernetes/pki/etcd/ca.crt"
ETCD_CERT="/etc/kubernetes/pki/etcd/server.crt"
ETCD_KEY="/etc/kubernetes/pki/etcd/server.key"
HOST_1=https://xxx.xxx.xxx.xxx:2379

使用示例

ETCDCTL_API=3 etcdctl --cacert="${ETCD_CA_CERT}" --cert="${ETCD_CERT}" --key="${ETCD_KEY}" \
 --endpoints="${HOST_1}" endpoint status --write-out=table

常用命令

  • 键值命令

    # 增 & 改
    put foo bar
    # 查
    get foo
    # 根据前缀查询
    get --prefix "/demo"
    # 查询所有 keys
    get --prefix "" --keys-only
    # 删
    del foo
    # 事务,多个操作合并为一个事务
    txn <<<'mod("key1") > "0"

    put key1 "overwrote-key1"

    put key1 "created-key1"
    put key2 "some extra key"

    '
    # 压缩
    compaction 1234
    # 监听
    watch foo
  • 集群维护命令

    # 列出成员
    member list
    # 端点健康情况
    endpoint health
    # 端点状态
    endpoint status
    # 告警列表
    alarm list
    # 解除所有告警
    alarm disarm
    # 碎片整理
    defrag
    # 创建快照进行备份
    snapshot save snapshot.db
    # 快照恢复
    snapshot restore
    # 快照状态
    snapshot status

     

参考链接:

etcd 实战课 | 极客时间 唐聪

一文入门ETCD

github etcdctl doc

标签:Etcd,Kubernetes,--,模块,API,概述,etcd,Raft
From: https://www.cnblogs.com/clay-wangzhi/p/17490029.html

相关文章

  • 串行通信协议 - 概述
    参考https://blog.csdn.net/Rocher_22/article/details/1165906291.串行通信&并行通信串行通信:利用一条传输线将数据位一位一位的传送。并行通信:利用多条传输线将一个数据的多bit同时传送。串行和并行哪个更快?在时钟频率较低时,因为并行可以同时传输多个bit,所以速......
  • 预训练和微调(Pre-training and Fine-tuning)概述
    预训练和微调(Pre-trainingandFine-tuning)是深度学习领域中常用的技术,特别是在自然语言处理(NLP)领域中取得了巨大成功。本文将介绍预训练和微调的概念、流程和应用,并探讨它们在NLP领域的重要性。预训练预训练是指在大规模无标签数据上训练模型的过程。在NLP领域,预训练的目标是通......
  • 数据集选择和清理概述
    数据集是机器学习和深度学习中至关重要的组成部分。数据集的选择和清理对于模型的性能和结果至关重要。本文将介绍数据集选择和清理的重要性,并提供一些关键步骤和注意事项,帮助您进行有效的数据集处理。数据集选择选择适合任务的数据集是构建有效模型的关键步骤。以下是一些数据集......
  • PostgreSQL技术大讲堂 - 第19讲:冻结TXIDS概述
     PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUGPG技术大讲堂。第19讲:冻结TXIDS内容1:PostgreSQLTXID介绍内容2:PostgreSQLTX......
  • Maven概述
         ......
  • Kafka概述
    定义Kafka传统定义:Kafka是一个分布式的基于发布/订阅模式的消息队列(MessageQueue),主要应用于大数据实时处理领域。发布/订阅:消息的发布者不会将消息直接发送给特定的订阅者,而是将发布的消息分为不同的类别,订阅者只接收感兴趣的消息。Kafka最新定义:Kafka是一个开源的分布式事件......
  • IO流的概述和分类
    1.IO流的概述IO:Input和Output的简写,是输入、输出的意思(即读、写)流:是一种抽象的概念,对数据传输的总称。数据在设备之间传输称之为流,流的本质是数据传输。2.分类传输类型分类:输入、和输出数据类型分类:字节流:字节输入流和字节输出流,简称字节IO流......
  • 概述 .NET 6 ThreadPool 实现
     目录前言任务的调度基本调度单元IThreadPoolWorkItem实现类的实例。Task全局队列本地队列偷窃机制WorkerThread的生命周期管理线程注入实验.NET5实验一默认线程池配置.NET5实验二调整ThreadPool设置.NET5实验三tcs.Task.Wait()改为Thr......
  • 计算机网络概述
    1.计算机网络概述1.1.计算机网络的定义1.2.计算机网络的基本功能1.3.计算机网络的演进1.4.计算机网络的中的基本概念1.4.1.局域网,城域网,广域网1.4.2.网络的拓扑结构1.4.3.电交换与分组管理1.5.衡量计算机网络的主要指标1.6.网络标准化组织2.OSI参考......
  • 机器学习算法实现解析——libFM之libFM的训练过程概述
    本节主要介绍的是libFM源码分析的第四部分——libFM的训练。FM模型的训练是FM模型的核心的部分。4.1、libFM中训练过程的实现在FM模型的训练过程中,libFM源码中共提供了四种训练的方法,分别为:StochasticGradientDescent(SGD),AdaptiveSGD(ASGD),AlternatingLeastSquares(ALS)和MarkovCh......