本指南提供在生产环境中部署、监控和维护 etcd 的实用信息。它涵盖了配置、监控、维护、升级和故障排除 etcd 集群等关键运营方面。有关 etcd 内部架构的信息,请参阅 架构。有关面向开发的指导,请参阅 开发指南。
对于生产部署,推荐以下最低要求:
来源
etcd 运行的关键参数类别如下:
| 参数 | 描述 | 默认 | 建议 |
|---|---|---|---|
--name | 此成员的易读名称 | 默认 | 选择一个描述性的名称 |
--data-dir | 数据目录的路径 | ${name}.etcd | 使用专用的 SSD 卷 |
--wal-dir | 专用 WAL 目录的路径 | "" (与 data-dir 相同) | 与 data-dir 分开以获得更好的性能 |
--listen-peer-urls | 用于监听成员间通信的 URL | http://:2380 | 生产环境请使用安全 URL |
--listen-client-urls | 用于监听客户端通信的 URL | http://:2379 | 配置内部和外部接口 |
--listen-client-http-urls | 仅用于监听 HTTP 客户端通信的 URL | "" | 当分离 gRPC 和 HTTP 流量时很有用 |
| 参数 | 描述 | 默认 | 建议 |
|---|---|---|---|
--initial-advertise-peer-urls | 广告给其他成员的 URL | http://:2380 | 所有成员都必须能够访问 |
--advertise-client-urls | 广告给客户端的 URL | http://:2379 | 所有客户端都必须能够访问 |
--initial-cluster | 初始集群配置 | default=http://:2380 | 列出所有初始成员 |
--initial-cluster-token | 集群令牌 | etcd-cluster | 每个集群使用唯一的令牌 |
--initial-cluster-state | 初始集群状态 | new | 新集群使用 new,添加成员时使用 existing |
| 参数 | 描述 | 默认 | 建议 |
|---|---|---|---|
--quota-backend-bytes | 后端配额大小 | 0 (低空间配额) | 根据可用磁盘空间设置(例如 8GB) |
--snapshot-count | 快照前的事务数 | 10000 | v3.6 中已弃用,将在 v3.7 中移除 |
--auto-compaction-mode | 压缩模式 | periodic | 基于时间的使用 periodic,基于版本的使用 revision |
--auto-compaction-retention | 保留周期/版本数 | 0(已禁用) | 24h 用于 periodic,或适当的版本数 |
--max-request-bytes | 最大客户端请求大小 | 1.5MB | 根据您的数据大小需求调整 |
来源
下面是一个生产 etcd 节点的示例配置文件
来源
来源
etcd 提供了几个端点来检查其健康状态
/health HTTP 端点返回成员的健康状态etcdctl endpoint health 检查所有端点的健康状况/metrics HTTP 端点提供 Prometheus 格式的指标/livez 和 /readyz HTTP 端点(v3.5+ 添加)用于 Kubernetes 风格的健康检查来源
根据最佳实践和更改日志条目,以下是需要监控的关键指标
| 指标 | 描述 | 警报阈值 |
|---|---|---|
etcd_server_has_leader | 指示是否存在领导者 | 为 0 时警报 |
etcd_server_leader_changes_seen_total | 领导者变更次数 | 频繁变更时警报 |
etcd_server_proposals_failed_total | 失败的提议 | 快速增加时警报 |
etcd_network_client_grpc_sent_bytes_total | 网络流量 | 显著偏差时警报 |
etcd_network_client_grpc_received_bytes_total | 网络流量 | 显著偏差时警报 |
| 指标 | 描述 | 警报阈值 |
|---|---|---|
etcd_disk_backend_commit_duration_seconds | 磁盘写入延迟 | 持续高(>100ms)时警报 |
etcd_disk_wal_write_bytes_total | 写入 WAL 的字节数 | 监控趋势 |
etcd_mvcc_db_total_size_in_bytes | 数据库大小 | 接近配额时警报 |
etcd_debugging_mvcc_current_revision | 当前 MVCC 版本 | 监控异常跳跃 |
etcd_server_slow_apply_total | 慢速应用请求 | 持续增加时警报 |
etcd_server_slow_read_total | 慢速读取请求 | 持续增加时警报 |
os_fd_used 和 os_fd_limit | 文件描述符使用情况 | 接近限制时警报 |
来源
为了回收磁盘空间和提高性能,建议定期进行碎片整理
注意:在 v3.5+ 中,您可以使用 --experimental-stop-grpc-service-on-defrag(或 v3.6+ 中的相应功能门)在碎片整理期间临时停止 gRPC 服务,以便客户端故障转移到其他成员。
来源
自动压缩通过 --auto-compaction-mode 和 --auto-compaction-retention 配置。手动压缩请
来源
定期备份对于灾难恢复至关重要
为了在恢复快照时提供额外的安全性,v3.6+ 提供了增加版本和标记已压缩的选项
来源
来源
来源
在大多数集群成员丢失的情况下
来源
生产环境最低推荐版本
重要的升级注意事项
来源
用于在停机时间最少的情况下升级
来源
v3.6 中的主要变更
来源
来源
| 参数 | 建议 |
|---|---|
--quota-backend-bytes | 生产环境至少设置为 8GB |
--backend-batch-interval | 增加此值可提高吞吐量,但会增加延迟 |
--backend-batch-limit | 默认值 (0) 使用 10000,批量操作时增加此值 |
--backend-bbolt-freelist-type | 使用 map 以获得更好的性能(默认) |
--compaction-batch-limit | 限制每次压缩批次中删除的修订次数 |
--compaction-sleep-interval | 控制压缩批次之间的睡眠间隔 |
| 参数 | 建议 |
|---|---|
--max-request-bytes | 默认 1.5MB,如果存储更大的值,请增加此值 |
--max-concurrent-streams | 限制每个客户端的并发流数 |
--grpc-keepalive-min-time | 防止客户端过于频繁地 ping |
--grpc-keepalive-interval | 服务器到客户端 ping 的间隔 |
--grpc-keepalive-timeout | 无响应连接的超时时间 |
| 参数 | 建议 |
|---|---|
--heartbeat-interval | 默认 100ms,可根据不同的网络环境进行调整 |
--election-timeout | 默认 1000ms (10 倍心跳间隔),针对跨数据中心部署进行调整 |
--initial-election-tick-advance | 默认 true,有助于更快的初始领导者选举 |
来源
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 高延迟 | 磁盘 I/O 缓慢 | 使用 SSD,分离 WAL 目录 |
| 网络问题 | 确保成员之间有低延迟的网络 | |
| 值过大 | etcd 针对小值(<1MB)进行了优化 | |
| 过高的内存使用 | 过多的 Watcher | 限制 Watcher 数量,添加分页 |
| 过大的历史窗口 | 调整压缩设置 | |
| 频繁的领导者变更 | 网络不稳定 | 增加选举超时时间 |
| 高 CPU 负载 | 确保有足够的 CPU 资源 | |
| 数据库大小增长 | 没有进行压缩 | 启用自动压缩 |
| 碎片化 | 定期碎片整理 |
来源
来源
etcd 支持基于角色的访问控制 (RBAC) 来处理 API 请求。
身份验证令牌选项
来源
防火墙规则:
主机白名单:
--host-whitelist 限制接受的主机名* 允许任何主机名(非 TLS 时不安全)CORS 设置:
--cors 限制跨域资源共享* 允许任何来源,生产环境中请限制密码套件:
--cipher-suites 控制允许的密码套件--tls-min-version 设置为 TLS1.2 或更高版本来源
| 问题 | 可能原因 | 故障排除步骤 |
|---|---|---|
| 集群无法形成 | Peer URL 配置错误 | 检查 --initial-cluster 是否与每个成员的advertised peer URLs匹配 |
| 集群 Token 不匹配 | 确保所有成员使用相同的 --initial-cluster-token | |
| 防火墙阻止通信 | 检查成员之间在 2380 端口上的连通性 | |
| 认证失败 | 证书过期 | 检查证书有效性,过期则续期 |
| CA 证书错误 | 验证所有成员的 CA 证书是否一致 | |
| 主机名验证失败 | 检查 --client-cert-allowed-hostname 设置 | |
| 数据不一致 | 网络分区导致脑裂 | 如果法定人数丢失,则从备份中恢复 |
| 后端数据损坏 | 使用 etcdctl alarm list 检查警报 | |
| 内存使用率高 | 大量 Watcher | 通过指标检查 Watcher 数量 |
| 大型事务 | 监控 etcd_debugging_mvcc_index_compaction_pause_duration_milliseconds | |
| 性能缓慢 | 磁盘 I/O 瓶颈 | 检查磁盘延迟,考虑使用 SSD |
| 网络延迟 | 监控成员之间的网络指标 | |
| 数据库碎片化 | 执行碎片整理 |
来源
etcd 可能会发出需要操作员关注的警报
如果检测到损坏
/health 端点识别损坏的成员来源
来源
集群大小:
数据安全:
etcdctl snapshot save 进行备份性能:
安全:
监控:
升级:
来源
刷新此 Wiki
最后索引时间2025 年 4 月 18 日(be71a8)