本文来说下关于Etcd的几个问题

文章目录

  • 概述
  • 架构解析
  • etcd 在 kubernetes 的架构
  • etcd 的特点
  • 概念术语
  • 数据读写顺序
  • leader 选举
  • 判断数据是否写入
  • 服务注册与发现
  • 消息发布与订阅
  • 负载均衡
  • 分部署通知与协调
  • 分布式锁
  • 分布式队列
  • 集群与监控与 Leader 选举
  • 本文小结

概述

etcd 是兼具一致性和高可用性的键值数据库,可用于服务发现以及配置中心。ETCD 采用 raft 一致性算法,基于 Go 语言实现。可以作为保存 Kubernetes 所有集群数据的后台数据库,在整个云原生中发挥极其重要的作用。


架构解析

从 etcd 的架构图中我们可以看到,etcd 主要分为四个部分。

  • HTTP Server:用于处理用户发送的 API 请求以及其它 etcd 节点的同步与心跳信息请求。
  • Store:用于处理 etcd 支持的各类功能的事务,包括数据索引、节点状态变更、监控与反馈、事件处理与执行等等,是 etcd 对用户提供的大多数 API 功能的具体实现。
  • Raft:Raft 强一致性算法的具体实现,是 etcd 的核心。
  • WAL:Write Ahead Log(预写式日志),是 etcd 的数据存储方式。除了在内存中存有所有数据的状态以及节点的索引以外,etcd 就通过 WAL 进行持久化存储。WAL 中,所有的数据提交前都会事先记录日志。

通常,一个用户的请求发送过来,会经由 HTTP Server 转发给 Store 进行具体的事务处理,如果涉及到节点的修改,则交给 Raft 模块进行状态的变更、日志的记录,然后再同步给别的 etcd 节点以确认数据提交,最后进行数据的提交,再次同步。


etcd 在 kubernetes 的架构


etcd 中存储着 k8s 的所有的元数据,至关重要,再次,我们就揭开 etcd 的最佳实践。


etcd 的特点

etcd 的特点

  • 简单:安装配置简单,而且提供了HTTP API进行交互,使用也很简单
  • 安全:支持SSL证书验证
  • 快速:根据官方提供的benchmark数据,单实例支持每秒2k+读操作
  • 可靠:采用raft算法,实现分布式系统数据的可用性和一致性

概念术语

  • 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来定位数据。

数据读写顺序

为了保证数据的强一致性,etcd 集群中所有的数据流向都是一个方向,从 Leader (主节点)流向 Follower,也就是所有 Follower 的数据必须与 Leader 保持一致,如果不一致会被覆盖。

用户对于 etcd 集群所有节点进行读写

  • 读取:由于集群所有节点数据是强一致性的,读取可以从集群中随便哪个节点进行读取数据
  • 写入:etcd 集群有 leader,如果写入往 leader 写入,可以直接写入,然后然后Leader节点会把写入分发给所有 Follower,如果往 follower 写入,然后Leader节点会把写入分发给所有 Follower

leader 选举

假设三个节点的集群,三个节点上均运行 Timer(每个 Timer 持续时间是随机的),Raft算法使用随机 Timer 来初始化 Leader 选举流程,第一个节点率先完成了 Timer,随后它就会向其他两个节点发送成为 Leader 的请求,其他节点接收到请求后会以投票回应然后第一个节点被选举为 Leader。

成为 Leader 后,该节点会以固定时间间隔向其他节点发送通知,确保自己仍是Leader。有些情况下当 Follower 们收不到 Leader 的通知后,比如说 Leader 节点宕机或者失去了连接,其他节点会重复之前选举过程选举出新的 Leader。


判断数据是否写入

etcd 认为写入请求被 Leader 节点处理并分发给了多数节点后,就是一个成功的写入。那么多少节点如何判定呢,假设总结点数是 N,那么多数节点 Quorum=N/2+1。关于如何确定 etcd 集群应该有多少个节点的问题,上图的左侧的图表给出了集群中节点总数(Instances)对应的 Quorum 数量,用 Instances 减去 Quorom 就是集群中容错节点(允许出故障的节点)的数量。

所以在集群中推荐的最少节点数量是3个,因为1和2个节点的容错节点数都是0,一旦有一个节点宕掉整个集群就不能正常工作了。


服务注册与发现

前后端业务注册发现


中间价已经后端服务在 etcd 中注册,前端和中间价可以很轻松的从 etcd 中发现相关服务器然后服务器之间根据调用关系相关绑定调用。

多组后端服务器注册发现


后端多个无状态相同副本的 app 可以同事注册到 etcd 中,前端可以通过 haproxy 从etcd 中获取到后端的 ip 和端口组,然后进行请求转发,可以用来故障转移屏蔽后端端口已经后端多组app实例。


消息发布与订阅

etcd 可以充当消息中间件,生产者可以往 etcd 中注册 topic 并发送消息,消费者从etcd 中订阅 topic,来获取生产者发送至 etcd 中的消息。


负载均衡

后端多组相同的服务提供者可以经自己服务注册到 etcd 中,etcd 并且会与注册的服务进行监控检查,服务请求这首先从 etcd 中获取到可用的服务提供者真正的 ip:port,然后对此多组服务发送请求,etcd 在其中充当了负载均衡的功能。


分部署通知与协调

分部署通知与协调

  • 当 etcd watch 服务发现丢失,会通知服务检查
  • 控制器向 etcd 发送启动服务,etcd通知服务进行相应操作
  • 当服务完成 work 会讲状态更新至 etcd,etcd 对应会通知用户


分布式锁

当有多个竞争者 node 节点,etcd 作为总控,在分布式集群中与一个节点成功分配 lock


分布式队列

有对个 node,etcd 根据每个 node 来创建对应 node 的队列,根据不同的队列可以在etcd 中找到对应的 competitor


集群与监控与 Leader 选举

etcd 可以根据 raft 算法在多个 node 节点来选举出 leader。


本文小结

本文介绍了ETCD相关的知识与内容。

关于Etcd的几个问题相关推荐

  1. 常用的高性能 KV 存储 Redis、Memcached、etcd、Zookeeper 区别

    1. 什么是 KV 存储 KV 是 Key-Value 的缩写,KV 存储也叫键值对存储.简单来说,它是利用 Key 做索引来实现数据的存储.修改.查询和删除功能. 常用的高性能 KV 存储主要有 R ...

  2. etcd 笔记(09)— 基于 etcd 实现微服务的注册与发现

    1. 服务注册与发现基本概念 在单体应用向微服务架构演进的过程中,原本的巨石型应用会按照业务需求被拆分成多个微服务,每个服务提供特定的功能,也可能依赖于其他的微服务.此时,每个微服务实例都可以动态部署 ...

  3. etcd 笔记(08)— 基于 etcd 实现分布式锁

    1. 为什么需要分布式锁? 在分布式环境下,数据一致性问题一直是个难点.分布式与单机环境最大的不同在于它不是多线程而是多进程.由于多线程可以共享堆内存,因此可以简单地采取内存作为标记存储位置.而多进程 ...

  4. etcd 笔记(07)— 键值对读写操作过程

    1. 读写总体概述 etcd 各个模块交互的总览,如下图所示: 总体上的请求流程从上至下依次为客户端 → API 接口层 → etcd Server → etcd raft 算法库. 读请求 客户端通 ...

  5. etcd 笔记(06)— Client 结构定义、客户端(初始化、KV存储Get、Put、事务 Txn、压缩 Compact、Watch、Lease

    1. Client 定义 Client 定义如下: type Client struct {ClusterKVLeaseWatcherAuthMaintenance// 认证的用户名Username ...

  6. etcd 笔记(05)— etcd 代码结构、各模块功能、整体架构、各模块之间的交互、请求和应答流程

    1. etcd 项目结构和功能 etcd 项目代码的目录结构如下: $ tree ├── auth ├── build ├── client ├── clientv3 ├── contrib ├── ...

  7. etcd 笔记(04)— etcd 网关与 gRPC 网关

    1. etcd 网关 etcd 网关是一个简单的 TCP 代理,可将网络数据转发到 etcd 集群.网关是无状态且透明的,它既不会检查客户端请求,也不会干扰集群响应,支持多个 etcd 服务器实例,并 ...

  8. etcd 笔记(03)— etcd 客户端使用(键值的增、删、改、查)、watch监测键、lease使用(创建租约、撤销租约、刷新租期、查询租期)

    1. etcd 客户端 etcdctl 是一个命令行客户端,便于我们进行服务测试或手动修改数据库内容,etcdctl 在两个不同的 etcd 版本(v2 和 v3)下的功能和使用方式也完全不同. 一般 ...

  9. etcd 笔记(02)— etcd 安装(apt 或 yum 安装 、二进制包安装、Docker 安装 etcd、etcd 前端工具etcdkeeper)

    1. 使用 apt 或 yum 安装 etcd 命令如下: sudo apt-get install etcd 或者 sudo yum install etcd 这样安装的缺点是:安装的 etcd 版 ...

  10. etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理

    1. etcd 简介 etcd 官网定义: A highly-available key value store for shared configuration and service discov ...

最新文章

  1. 通过Anaconda在Ubuntu16.04上安装 TensorFlow(GPU版本)
  2. python astype(float)_Python astype(np.float)函数使用方法解析
  3. poj3335 半平面交
  4. TensorFlow自带例子
  5. 折半查找(非递归与递归实现)
  6. linux学习笔记:处理linux目录的常用命令
  7. java8 方法引用好处_Java 8方法引用
  8. SHELL脚本--多命令逻辑执行顺序
  9. gitlab使用SSH无法下载
  10. 基于WEB的自行车租赁管理系统设计与实现
  11. 如何优化MySQL千万级大表,我写了6000字的解读
  12. 计算机ps2定义,PS2通信协议说明及接口定义(键盘及鼠标).doc
  13. 堆叠实验-典型配置H3C IRF
  14. 简单的购物车和购物车结算
  15. jy-12-SPRINGMYBATIS02——云笔记05-刘苍松
  16. 使用pm命令安装或卸载apk,静默安装、卸载方法
  17. 关于技术博客--找工作--这些年--陆续的
  18. 人工智能 ---(01.基础知识)
  19. Rogue Signs: Deceiving Traffic Sign Recognition with Malicious Ads and Logos
  20. 基于ARM开发板的智能家居控制系统设计

热门文章

  1. DOC窗口之cd命令(windows)
  2. mysql 协议的退出命令包及解析
  3. 数据导入时遭遇 ORA-01187 ORA-01110
  4. 新手学信息检索4:向量空间模型与相似度计算
  5. ufw禁止IP访问ubuntu服务器
  6. 证明randomized quicksort的平均running time为nlgn 的数学过程
  7. 应用 memcached 提升站点性能
  8. 卸载gnome3,投奔Xfce
  9. 关于浮点数和字符串转换的函数示例
  10. 存储网络系统的瓶颈分析以及瓶颈的解决之道