etcd 目标是构建一个高可用的分布式键值数据库,具有以下特点:
- 简单
安装,使用和配置都比较简单 - 键值对存储
将数据存储在分层组织的目录中 - 监测变更
监测特定的键或目录以进行更改 - 安全
支持SSL证书验证 - 快速
根据官方提供的 Benchmark 数据,单实例支持两千次以上的读操作 - 可靠
采用raft算法,实现分布式系统数据的可用性和一致性
etcd v3
etcd 是一个分布式且可靠的KV存储数据库,用于将关键数据存储在分布式系统中,etcd v2 和 etcd v3 在底层使用同一套Raft算法的两个独立应用,相互之间接口和存储不一样,且数据相互隔离。如果从 etcd v2 升级到 v3,那么原来的数据还是只能用的v2的接口访问。

etcd 集群一般由奇数个节点组成,多个节点通过raft算法相互协作,raft 算法会选择一个主节点作为leader,负责数据同步和分发。当leader发生故障时,系统会自动选择另一个节点作为Leader,以再次完成系统数据同步。
etcd 使用场景
-
键值对存储
etcd 是一个键值存储的组件,存储是etcd的最基本的功能,etcd 基于raft算法能够有力保证各个场景中键值的一致性。其他应用场景也是建立在etcd的可靠存储上。 -
服务注册与发现
分布式环境中,业务多实例部署,涉及服务之间的调用,服务注册与发现就是解决如何找到分布式集群中的某一个服务,并与之建立联系。
image.png
服务提供者启动时,在服务注册中心进行注册自己的服务名,主机地址,端口等信息;服务请求者需要调用对应的服务时,一般通过服务名请求服务注册中心地址,服务注册中心返回对应的实例地址和端口。
-
配置管理与发布
应用中的一些配置信息放到etcd上进行节点管理,应用在启动时主动从 etcd 获取一次配置信息,同时在etcd节点上注册一个 Watcher 进行等待,以后每次配置有更新时,etcd 都会实时通知订阅者,以此达到获取最新配置的目的。 -
分布式锁
代码模块介绍
包名 | 用途 |
---|---|
auth | 访问权限 |
client | Go 客户端SDK |
contrib | raft example 实现 |
embed | 主要是etcd的 config |
etcdmain | 入口程序 |
etcdctl | 命令行客户端 |
etcdserver | server 主要的包 |
functional/hack | CMD,DockerFile 之类的杂项 |
integration | 和etcd集群相关 |
lease | 租约相关 |
mvcc | etcd 的底层存储,包含Watch实现 |
pkg | etcd 使用的工具集合 |
proxy | etcd 使用的工具集合 |
raft | raft 算法模块 |
wal | 日志模块 |
使用分层的方式来描述etcd架构,如图所示:

-
客户端层
包括clientv3 和 etcdcltl 等客户端,用户通过命令行或者客户端调用提供了RESTful 风格的API,降低了etcd使用复杂度。 -
API网关接口层
API 接口层提供了客户端访问服务端通信协议和接口定义,以及服务端节点之间相互通信的协议,etcd有V3和V2两个版本 -
etcd raft 层
负责Leader 选举和日志复制等功能,除了与本节点的 etcd Server 通信外,还与集群中的其他etcd节点进行交互,实现分布式一致性数据同步的关键工作。 -
逻辑层
etcd 业务逻辑层,包括鉴权,租约,KVServer,MVCC 和 Compactor 压缩等核心功能。 -
etcd 存储
实现了快照,预写式日志WAL。
网友评论