互联网技术发展真的快,层出不穷的新技术。最近项目使用到了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视频教程

01、etcd基础介绍的更多相关文章

  1. 【01】emmet系列之基础介绍

    [01]emmet系列之基础介绍 [02]emmet系列之HTML语法 [03]emmet系列之CSS语法 [04]emmet系列之编辑器 [05]emmet系列之各种缩写 相关网址 官网:http: ...

  2. 043 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 05 do-while循环介绍及应用

    043 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 05 do-while循环介绍及应用 本文知识点:do-while循环介绍及应用 do-while循 ...

  3. 011 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 05 变量的三个元素的详细介绍之三—— 变量值——即Java中的“字面值”

    011 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 05 变量的三个元素的详细介绍之三-- 变量值--即Java中的"字面值" 变量值可以是 ...

  4. 010 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 04 变量的三个元素的详细介绍之二——变量类型——即Java中的数据类型

    010 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 04 变量的三个元素的详细介绍之二--变量类型--即Java中的数据类型 Java中变量的三要素 变量名 变 ...

  5. Web3D编程入门总结——WebGL与Three.js基础介绍

    /*在这里对这段时间学习的3D编程知识做个总结,以备再次出发.计划分成“webgl与three.js基础介绍”.“面向对象的基础3D场景框架编写”.“模型导入与简单3D游戏编写”三个部分,其他零散知识 ...

  6. OSPF基础介绍

    OSPF基础介绍 一.RIP的缺陷 1.以跳数评估的路由并非最优路径 2.最大跳数16导致网络尺度小 3.收敛速度慢 4.更新发送全部路由表浪费网络资源 二.OSPF基本原理 1.什么是OSPF a& ...

  7. shell脚本编程基础介绍

    Linux系统——shell脚本编程基础介绍 1.什么是shell 它是一个命令解释器,在linux/unix操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种操作输出的结果 ...

  8. 黑马_13 Spring Boot:01.spring boot 介绍&&02.spring boot 入门

    13 Spring Boot: 01.spring boot 介绍&&02.spring boot 入门 04.spring boot 配置文件 SpringBoot基础 1.1 原有 ...

  9. 058 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 05 案例:求数组元素的最大值

    058 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 05 案例:求数组元素的最大值 本文知识点:求数组元素的最大值 案例:求数组元素的最大值 程序代码及其执行过程 ...

  10. 051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试——debug入门1

    051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试--debug入门1 本文知识点: 程序调试--debug入门1 程序 ...

随机推荐

  1. [转帖]Cgroups资源限制

    https://cloud.tencent.com/developer/article/2108816?areaSource=105001.13&traceId=QzVtWN5jGl8zeYZ ...

  2. [转帖]linux的硬链接和软连接的区别

    Linux中有两种链接文件: 1)软链接(符号链接symbol),等同于Windows中快捷方式 ln -s 源文件名 符号链接文件名,源文件名和符号链接文件名是主从关系,源被删了,符号链接也就失效了 ...

  3. [转帖]linux,wget 的证书不可信,证书使用不安全的算法签名

    centos wget 的证书不可信,证书使用不安全的算法签名 wget wget https://www.php.net/distributions/php-7.4.28.tar.gz 出现错误: ...

  4. [转贴]Kubernetes之修改NodePort对外映射端口范围

    https://www.cnblogs.com/minseo/p/12606326.html k8s默认使用NodePort对外映射端口范围是30000-50000可以通过修改kube-apiserv ...

  5. Ant Design Vue表单验证失败

    表单验证遇见的坑 01 如果你受控数据是这样写的话 const formState= reactive({ youForm:{ youNaNe:'', useSlectValue: '001', da ...

  6. flutter项目目录介绍

    1 flutter项目目录介绍 android 安卓平台的的相关代理 build 编译后的 ios ios 平台的的相关代理 lib 自己写代码的目录 包好自己的代码 资源 test 放测试文件的 p ...

  7. 【K哥爬虫普法】你很会写爬虫吗?10秒抢票、10秒入狱,了解一下?

    我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识, ...

  8. 微信对话平台API开发

    接入官方文档接入文档 下面我们开始使用前端来进行接入 <!DOCTYPE html> <html> <head> <meta charset="UT ...

  9. 强化学习从基础到进阶-常见问题和面试必知必答[5]::梯度策略、添加基线(baseline)、优势函数、动作分配合适的分数(credit)

    强化学习从基础到进阶-常见问题和面试必知必答[5]::梯度策略.添加基线(baseline).优势函数.动作分配合适的分数(credit) 1.核心词汇 策略(policy):在每一个演员中会有对应的 ...

  10. 2.8 CE修改器:寻找共享代码

    本关我们将学习共享代码,在C语言中角色属性都是以结构体的方式进行存储的,而结构体所存储的信息都是连续性的,这一关我们将会解释如何处理游戏中的共用代码,这种代码是通用在除了自己以外的其他同类型对像上的常 ...