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
etcdctl

3 设置执行权限

sudo chmod +x /usr/local/bin/etcd
sudo chmod +x /usr/local/bin/etcdctl

4 验证集群

可以使用 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 更注重 一致性与可靠性

文章目录

随心笔记

技术无止境 创新不停驻