ETCD 探索
在分布式系统中,经常会遇到这样的问题:
- 服务节点需要共享配置
- 系统需要做服务发现
- 分布式锁需要一个协调中心
- 集群需要一个一致性的状态存储
这些问题,本质上都需要一个 可靠的分布式协调系统。
而在现代云原生体系中,最常用的组件就是 etcd。
例如:
- Kubernetes
- CoreDNS
- service mesh
- 分布式配置中心
这些系统的底层都依赖 etcd。
etcd 是什么
简单来说:
etcd 就是一个高可靠的分布式 Key-Value 数据库。
但它和普通数据库最大的区别是:
它是为“分布式协调”而设计的。
它的主要特点有:
- 强一致(Strong Consistency)
- 支持分布式集群
- 提供 Watch 监听机制
- 支持事务
- 提供租约(Lease)机制
很多分布式系统都会用 etcd 做:
- 服务注册中心
- 配置中心
- 分布式锁
- Leader 选举
例如 Kubernetes 就把整个 集群状态 存在 etcd 中。
强一致性(Raft 共识算法)
etcd 内部使用的是 Raft 共识算法。
Raft 的核心思想是:
整个集群中会选举出一个 Leader 节点。
所有写请求必须经过 Leader。
流程大致是:
客户端 → Leader → 同步到多数节点 → 提交成功
只有当:
超过一半节点确认写入
数据才算真正提交。
etcd 集群搭建
部署环境:
操作系统:
Debian 11.5.0
1 下载 etcd
从 github 下载 etcd 二进制文件:
https://github.com/etcd-io/etcd/releases
2 安装 etcd
解压之后,将以下文件放入:
/usr/local/bin主要是:
etcd
etcdctl3 设置执行权限
sudo chmod +x /usr/local/bin/etcd
sudo chmod +x /usr/local/bin/etcdctl4 验证集群
可以使用 etcdctl 查看数据:
ETCDCTL_API=3 etcdctl \
--cacert=/opt/etcd/ssl/ca.pem \
--cert=/opt/etcd/ssl/server.pem \
--key=/opt/etcd/ssl/server-key.pem \
--endpoints="https://172.24.93.151:2379,https://172.24.93.149:2379,https://172.24.93.150:2379" \
get / --prefix --keys-only删除 key:
ETCDCTL_API=3 etcdctl \
--cacert=/opt/etcd/ssl/ca.pem \
--cert=/opt/etcd/ssl/server.pem \
--key=/opt/etcd/ssl/server-key.pem \
--endpoints="https://172.24.93.151:2379,https://172.24.93.149:2379,https://172.24.93.150:2379" \
del --prefix ""etcd 为什么比 Redis 更适合做分布式协调
很多人会问:
Redis 不是也可以做分布式锁吗?
确实可以。
但 Redis 是 AP 系统,而 etcd 是 CP 系统。
简单理解就是:
Redis 更注重 可用性与性能。
etcd 更注重 一致性与可靠性。