跳转至

etcd 分布式 KV

一句话概述:etcd 是 Kubernetes 的核心存储组件,一个强一致性的分布式键值存储,用 Raft 共识算法保证数据一致,适合存储配置数据和服务发现。

核心知识点

概念白话解释
Raft共识算法 = 多个节点如何就数据达成一致
Leader/Follower领导者/跟随者 = 集群中的角色分工
Watch监听 = 实时监听键值变化
Lease租约 = 给键设置有效期(过期自动删除)
Transaction事务 = 原子性地执行多个操作
MVCC多版本并发控制 = 保留数据的历史版本

安装配置

# Docker
docker run -d --name etcd \
  -p 2379:2379 -p 2380:2380 \
  gcr.io/etcd-development/etcd:v3.5.12 \
  etcd --advertise-client-urls http://0.0.0.0:2379 \
  --listen-client-urls http://0.0.0.0:2379

# 安装 etcdctl 命令行工具
brew install etcd  # macOS

基本使用

# 基本操作
etcdctl put mykey "myvalue"          # 写入
etcdctl get mykey                     # 读取
etcdctl get --prefix "config/"        # 按前缀读取
etcdctl del mykey                     # 删除
etcdctl watch mykey                   # 监听变化(实时推送)

# 租约(自动过期)
etcdctl lease grant 60                # 创建60秒租约
etcdctl put --lease=<ID> temp "data"  # 带租约的键(60秒后自动删除)
etcdctl lease keep-alive <ID>         # 续约

# 事务
etcdctl txn --interactive
# compares: value("key") = "old"
# success: put key "new"
# failure: get key

Python 客户端

import etcd3

client = etcd3.client()  # 连接

client.put('/config/db_host', 'localhost')  # 写入
value, metadata = client.get('/config/db_host')  # 读取
print(value.decode())

# 监听变化
for event in client.watch_prefix('/config/'):
    print(f"变化: {event}")

常见报错

报错信息原因解决方法
no leader集群没有 Leader确保多数节点在线
mvcc: database space exceeded磁盘空间不足etcdctl compact + defrag
context deadline exceeded请求超时检查网络和集群健康状态

速查表

etcdctl put key value             # 写入
etcdctl get key                   # 读取
etcdctl get --prefix "prefix/"    # 前缀读取
etcdctl del key                   # 删除
etcdctl watch key                 # 监听
etcdctl member list               # 集群成员
etcdctl endpoint health           # 健康检查
etcdctl snapshot save backup.db   # 备份

# etcd 主要用途:Kubernetes 集群数据存储、服务发现、分布式锁、配置中心

参考:etcd 文档 | 更新于 2026 年