etcd基础架构
介绍
etcd是一个高可用的 Key/Value 存储系统,主要用于分享配置和服务发现。它是一款云原生时代的首选元数据存储产品,已经成为云原生和分布式系统的存储基石。
简要基础架构图
Client层
-
组成
-
client v2 API 客户端库
-
client v3 API 客户端库
-
-
作用
-
提供了简洁易用的 API
-
支持负载均衡、节点间故障自动转移
-
极大降低业务使用 etcd 复杂度,提升开发效率、服务可用性
-
API 网络层
-
client 访问 server的通信协议
-
v2API
- HTTP/1.x 协议
-
v3API
-
gRPC 协议
-
HTTP/1.x 协议(通过 etcd grpc-gateway 组件支持)
-
-
-
server 节点之间的通信协议
- 节点间通过 Raft 算法实现数据复制和 Leader 选举等功能时使用的 HTTP 协议
Raft 算法层(基石和亮点)
-
核心算法组成
-
Leader 选举
-
日志复制
-
ReadIndex
-
-
作用
- 用于保障 etcd 多个节点间的数据一致性、提升服务可用性等
功能逻辑层(核心特性实现层)
-
KVServer 模块
- 限速判断(保证集群稳定性,避免雪崩)
-
生成一个唯一的 ID,将此请求关联到一个对应的消息通知 channel,然后向 Raft 模块发起(Propose)一个提案(Proposal)
-
等待此 put 请求,等待写入结果通过消息通知 channel 返回或者超时。etcd 默认超时时间是 7 秒(5 秒磁盘 IO 延时 +2*1 秒竞选超时时间),如果一个请求超时未返回结果,则可能会出现 etcdserver: request timed out 错误
-
MVCC 模块
-
读场景
-
写场景
-
treeIndex 模块(内存树形索引模块)
- 保存用户 key 和版本号的映射关系
-
boltdb 模块
-
基于 B+ tree 实现的 key-value 键值库,支持事务,提供 Get/Put 等简易 API 给 etcd 操作
-
每次修改操作,生成一个新的版本号 (revision),以版本号为 key, value 为用户 key-value 等信息组成的结构体
-
数据隔离
-
boltdb 里每个 bucket 类似对应 MySQL 一个表
-
用户的 key 数据存放的 bucket 名字的是 key
-
etcd MVCC 元数据存放的 bucket 是 meta
-
-
-
-
-
Auth 鉴权模块
-
Lease 租约模块
-
Compactor 压缩模块
-
Quota 模块(配额)
-
Apply模块
存储层
-
预写日志 (WAL) 模块
- 可保障 etcd crash 后数据不丢失
-
快照 (Snapshot) 模块
-
boltdb 模块
- 保存了集群元数据和用户写入的数据