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

huageyiyangdewo huageyiyangdewo     2023-05-03     381

关键词:

互联网技术发展真的快,层出不穷的新技术。最近项目使用到了etcd,自己之前在部署k8s集群的时候玩过,但是并没有系统的学习。正好趁这个机会,系统性的学习下。文章中的内容有些是来自官方文档,有些是来自网上的资料,有些是自己的思考。如果有不错的地方,请不吝赐教,大家有好的教程,也欢迎评论区留言,学习学习。感谢感谢!

这一系列文章是etcd的入门教程,并不是深入的教程,适合像我这种对 etcd 了解不深入或者完全不了解的同学,大牛请绕道。

1、什么是etcd

etcd官网

etcd-github地址

对于 etcd 的定义,我们来看一看官方是如何描述的。描述如下:A distributed, reliable key-value store for the most critical data of a distributed system。翻译过来就是:一个分布式、可靠的键值存储系统,用于存储分布式系统中最关键的数据。

对于上面这句话,我们可以提取出来几个关键词,分布式、可靠的、键值存储系统、最关键的数据。对于在互联网行业待过一段时间的同学,应该对前面三个词比较熟悉,最后一个最关键的数据如何理解呢?我说说自己的理解。

etcd 中存储的是这个分布式系统中最重要的数据,例如配置信息、元数据等,这些数据对于整个分布式系统而言是至关重要的,一旦出现问题,就可能导致系统出现故障或者问题。

通过上面,我们知道了 etcd 是分布式系统中的基础设施,为分布式系统提供了可靠的数据存储和管理能力。它是由CoreOS开发的,k8s 中的信息就是存储在 etcd 中,是 k8s 集群管理工具的核心组件之一。

etcd采用 Raft一致性算法来保证数据的一致性和可靠性,支持多节点部署,可以容忍节点故障和网络分区等故障情况。etcd的使用非常广泛,除了作为 k8s 的核心组件之一,还可以用于服务发现、配置管理、分布式锁等场景。etcd提供了简单易用的API,支持多种语言的客户端,可以方便地集成到各种应用中。

2、etcd的应用场景

通过上面的了解,感觉 etcd 还是挺牛逼的,那 etcd的应用场景一般在那些地方呢?

  • 服务发现:etcd可以存储服务的地址和端口信息,例如Web服务、数据库服务等。客户端可以通过etcd API查询服务的地址和端口信息,从而实现服务发现和负载均衡。

  • 分布式锁:etcd可以实现分布式锁,多个进程可以通过etcd API竞争锁资源,从而实现分布式同步和协调。

  • 集群管理:etcd可以存储集群的状态信息,例如节点状态、领导者选举结果等。应用程序可以通过etcd API查询集群状态信息,从而实现集群管理和监控。

  • 分布式任务调度:etcd可以存储任务的状态信息,例如任务的执行状态、执行结果等。应用程序可以通过etcd API查询任务状态信息,从而实现分布式任务调度和监控。

  • 配置管理:etcd可以存储应用程序的配置信息,例如数据库连接信息、日志级别、缓存大小等。应用程序可以通过etcd API读取这些配置信息,从而实现动态配置管理。

  • 容器编排:k8s中集群管理的核心组件之一就是etcd。

上面是 etcd 的一些常用的场景,等大家熟悉 etcd 后,可以根据自己的实际需求,来选择是否需要使用到 etcd 这个组件。

3、为什么使用etcd

下面再来说说 etcd 的优点,这样跟同事吹牛的时候或者面试的时候,可以吹一吹,哈哈!

  • 可靠性:etcd采用Raft算法实现分布式一致性,保证数据的可靠性和一致性。
  • 高可用性:etcd支持多节点部署,节点之间通过Raft协议进行数据同步和选举,保证系统的高可用性。
  • 灵活性:etcd提供了RESTful API和gRPC API,可以方便地与各种编程语言进行交互。
  • 安全性:etcd支持TLS加密和访问控制,可以保证数据的安全性。
  • 可扩展性:etcd支持水平扩展,可以通过添加更多的节点来提高系统的性能和容量。

4、etcd架构图

上图是 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则保存了集群元数据和用户写入数据。

参考资料:

bilibili视频教程

面向对象基础-初步介绍(代码片段)

面向对象中的基础介绍:一:在面向对象的方法中:一切事物皆对象,只要是对象就会分类别;只要是对象就会有属性。二:面向对象的三个属性:封装、继承、多态;封装含义:把一些功能的实现细节不对外暴露;继承含义:... 查看详情

浅谈网络请求基础(理论篇)(代码片段)

网络请求基础目录网络请求基础1.网络请求过程URL介绍1.1网络请求过程2.请求涉及的基础2.1请求2.2请求方法2.4请求体3.响应涉及的基础3.1响应介绍:3.2响应状态码3.3响应头介绍:3.4响应体介绍4.网页基础4.1网页组成1.网络请求过程UR... 查看详情

react-native入门基础介绍(代码片段)

...novel模块相关参考一个简单的demo,用于介绍react-native相关基础信息,主要是针对有兴趣的同学参考;以下内容及代码在2018-08测试有效。完整项目代码:https://github.com/NameHewei/react-native安装npminstall-gcreate-react-native-appcr 查看详情

python基础:数据类型介绍和转换(代码片段)

...转换14天学习训练营导师课程:杨鑫《Python自学编程基础》杨鑫《Python网络爬虫基础》杨鑫《Scrapy爬虫框架实战和项目管理》一、认识数据类型在Python⾥为了应对不同的业务需求,也把数据分为不同的类型。检测数据类型... 查看详情

elasticsearch-基础介绍及索引原理分析(代码片段)

...时搜索和分析引擎,一个建立在全文搜索引擎ApacheLucene(TM)基础上的搜索引擎.当然Elasticsearch并不仅仅是Lucene那么简单,它不仅包括了全文搜索功能,还可以进行以下工作:分布式实时文件存储,并将每一个字段都 查看详情

小程序基础介绍(代码片段)

1.app.json小程序的全局配置,包括了小程序的所有页面路径、界面表现、网络超时时间、底部tab等@1、pages字段——用于描述当前小程序所有页面路径,这是为了让微信客户端知道当前你的小程序页面定义在哪个目录。必填@2... 查看详情

推荐系统基础之介绍入门篇(代码片段)

大家好,我是辣条。今天给大家带来推荐系统介绍入门。目录一、推荐系统简介二、推荐系统设计2.1推荐系统要素2.2推荐系统架构三、推荐算法一推荐模型构建流程二最经典的推荐算法:协同过滤推荐算法(Collaborativ... 查看详情

elasticsearch-基础介绍及索引原理分析(代码片段)

...统计查询的方案设计工作,花了些时间学习Elasticsearch的基础理论知识,整理了一下,希望能对Elasticsearch感兴趣/想了解的同学有所帮助。同时也希望有发现内容不正确或者有疑问的地方,望指明,一起探讨,学习,进步。介绍Ela... 查看详情

ospf基础知识介绍(代码片段)

OSPF(OpenShortestPathFirst开放式最短路径优先)是一个内部网关协议(InteriorGatewayProtocol,简称IGP),用于在单一自治系统(autonomoussystem,AS)内决策路由。是对链路状态路由协议的一种实现,隶属内部网关协议(IGP),故运作于自治系... 查看详情

spring基础:代理模式介绍(代码片段)

...是通过代理对象访问目标对象,这样可以在目标对象基础上增强额外的功能,如添加权限,访问控制和审计等功能。例如:房产中介代替业主卖房一、静态代理静态代理中代理类与被代理类都需要实现同一个接口&... 查看详情

c++标准库stl--stl体系结构基础介绍(代码片段)

STL体系结构基础介绍文章内容为侯捷老师的《C++标准库与泛型编程》的学习笔记文章目录STL体系结构基础介绍代码示例容器分类vector关于vector的动态扩充deque红黑树multisetmultimaphashTableunordered_multisetallocator组成:容器ÿ... 查看详情

[go语言]基础介绍(代码片段)

Go语言编程环境Windows下直接下载安装包,这里在https://studygolang.com/dl下载到的go1.17.windows-amd64.msi。安装完成之后可以通过goversion查看:PSF:\\Gitee\\go\\Code\\Basic>goversiongoversiongo1.17windows/amd64还可以查看go的基本使用方 查看详情

jetpackcompose基础介绍(代码片段)

7.Compose的渲染7.1Compose渲染过程对于任意一个composable的渲染主要分为三个阶段:Composition,在这一阶段决定哪些composable会被渲染并显示出来。Layout,在这一阶段会进行测量和布局,也就是确认composable的大小和摆放... 查看详情

jetpackcompose基础介绍(代码片段)

7.Compose的渲染7.1Compose渲染过程对于任意一个composable的渲染主要分为三个阶段:Composition,在这一阶段决定哪些composable会被渲染并显示出来。Layout,在这一阶段会进行测量和布局,也就是确认composable的大小和摆放... 查看详情

jetpackcompose基础介绍(代码片段)

7.Compose的渲染7.1Compose渲染过程对于任意一个composable的渲染主要分为三个阶段:Composition,在这一阶段决定哪些composable会被渲染并显示出来。Layout,在这一阶段会进行测量和布局,也就是确认composable的大小和摆放... 查看详情

python的入门基础介绍(安装,基础语法和三大流程)(代码片段)

Python的入门基础介绍(安装,基础语法和三大流程)学习Python所需的工具1.什么是编程语言2.基础语法2.1认识变量2.2认识运算符2.3数据的输入和输出2.4常用的函数3.三大流程控制语句3.1顺序3.2分支3.3循环3.4跳出循... 查看详情

mysql介绍——基础加强(代码片段)

数据约束数据约束就是对用户操作表的数据进行约束。默认值作用:当用户对使用默认值的字段不插入值的时候,就使用默认值。注意:对默认值字段插入null是可以的,对默认值字段可以插入非null。CREATETABLEstuden... 查看详情

nmap-基础介绍与使用(代码片段)

NMAP介绍Nmap(“NetworkMapper”)是一个用于网络发现和安全审计的免费开源实用程序。许多系统和网络管理员还发现它对于诸如网络资源清册、管理服务升级计划、监视主机或服务正常运行时间等任务非常有用。Nmap以新颖的... 查看详情