互联网技术发展真的快,层出不穷的新技术。最近项目使用到了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. [转帖]一个故事看懂CPU的TLB

    https://www.cnblogs.com/xuanyuan/p/15347054.html Hi,我是CPU一号车间的阿Q,还记得我吗,真是好久不见了- 我所在的CPU是一个八核CPU,就有八个 ...

  2. [转帖]JVM 问题诊断快速入门

    https://zhuanlan.zhihu.com/p/110197145 JVM 全称为 Java Virtual Machine,翻译为中文 "Java 虚拟机".本文中的J ...

  3. Dubbo架构设计与源码解析(一) 架构设计

    作者:黄金 一.架构演变 单应用架构 ----> 垂直架构 ----> 分布式架构 ----> 微服务架构 ----> 云原生架构 二.Dubbo总体架构 1.角色职能 • C ...

  4. Typescript中存取器getters和setters的使用

    1.存取器 存取器可以让我们可以有效的控制对,对象中的中的成员的访问. 可以通过getters和setters来进行操作 在typescript中分别对应 get 和 set 2.如何解决报错 typ ...

  5. dump分析器winbdg

    工具: winbdg WinDBG不是专门用于调试.Net程序的工具,它更偏向于底层,可用于内核和驱动调试.进行普通的.Net程序调试还是使用微软专为.Net开发的调试工具MDBG更方便一些.但是Wi ...

  6. 从Spring源码看Spring如何解决循环引用的问题

    Spring如何解决循环引用的问题 关于循环引用,首先说一个结论: Spring能够解决的情况为:两个对象都是单实例.且通过set方法进行注入. 两个对象都是单实例,通过构造方法进行注入,Spring ...

  7. 年末将至,Java 开发者必须了解的 16 个Java 顶级开源项目!

    年末将至,值得你关注的16个Java 开源项目! 本文已经收录自笔者开源的 JavaGuide: https://github.com/Snailclimb/JavaGuide ([Java学习+面试 ...

  8. PGL图学习项目合集&数据集分享&技术归纳业务落地技巧[系列十]

    PGL图学习项目合集&数据集分享&技术归纳业务落地技巧[系列十] 1.PGL图学习项目合集 1.1 关于图计算&图学习的基础知识概览:前置知识点学习(PGL)[系列一] :ht ...

  9. Linux 配置Quota磁盘配额

    由于Linux是一个多用户管理的操作系统,而Linux默认情况下并不限制每个用户使用磁盘空间的大小,假如某个用户疏忽或者恶意占满磁盘空间,将导致系统磁盘无法写入甚至崩溃,为了保证系统磁盘的有足够的剩余 ...

  10. Pdfium.Net.Free 一个免费的Pdfium的 .net包装器--加载字体

    项目地址: Pdfium.Net:https://github.com/1000374/Pdfium.Net PdfiumViewer:https://github.com/1000374/Pdfiu ...