4. etcd 安装与配置:二进制安装、静态配置与动态发现、TLS 安全配置、常用启动参数详解

etcd 作为分布式键值存储系统,其安装与配置的规范性直接决定了集群的稳定性与安全性。本节将围绕二进制安装、集群成员发现机制、TLS 安全通信以及核心启动参数展开,为后续的备份恢复与蓝绿发布验证奠定坚实的运行环境基础。

4.1 二进制安装与目录规划

推荐使用官方预编译二进制进行安装,避免依赖管理带来的版本兼容问题。以下为标准安装步骤:

  1. 下载与解压:从 GitHub Releases 获取对应架构的 etcd-v3.5.x-linux-amd64.tar.gz。
  2. 部署二进制:将 etcd 和 etcdctl 复制到 /usr/local/bin/。
  3. 创建数据与配置目录:/var/lib/etcd(数据)、/etc/etcd/(证书与配置)。
  4. 创建系统用户:useradd -r -s /sbin/nologin -M etcd,并赋予目录权限。
目录规划清单
路径 用途 权限建议
/usr/local/bin/etcd etcd 服务端二进制 755, root:root
/usr/local/bin/etcdctl etcd 命令行客户端 755, root:root
/var/lib/etcd 数据持久化目录 700, etcd:etcd
/etc/etcd/ 证书与配置文件 750, etcd:etcd
/etc/systemd/system/etcd.service systemd 单元文件 644, root:root
# 下载并安装 etcd v3.5.15
wget https://github.com/etcd-io/etcd/releases/download/v3.5.15/etcd-v3.5.15-linux-amd64.tar.gz
tar -xzf etcd-v3.5.15-linux-amd64.tar.gz
sudo cp etcd-v3.5.15-linux-amd64/etcd /usr/local/bin/
sudo cp etcd-v3.5.15-linux-amd64/etcdctl /usr/local/bin/
sudo mkdir -p /var/lib/etcd /etc/etcd
sudo useradd -r -s /sbin/nologin -M etcd
sudo chown -R etcd:etcd /var/lib/etcd /etc/etcd

4.2 集群成员发现:静态配置与动态发现

etcd 集群的初始化有两种主流方式:静态配置适用于已知所有节点 IP 的场景;动态发现适用于 IP 不确定或自动扩缩容的场景。

4.2.1 静态配置

在启动参数中直接指定集群所有成员的 --initial-cluster。适用于小规模、固定节点的生产环境。

# 节点 1 (10.0.0.1)
etcd --name infra0 \
  --initial-advertise-peer-urls https://10.0.0.1:2380 \
  --listen-peer-urls https://10.0.0.1:2380 \
  --listen-client-urls https://10.0.0.1:2379,https://127.0.0.1:2379 \
  --advertise-client-urls https://10.0.0.1:2379 \
  --initial-cluster- etcd-cluster-1 \
  --initial-cluster infra0=https://10.0.0.1:2380,infra1=https://10.0.0.2:2380,infra2=https://10.0.0.3:2380 \
  --initial-cluster-state new \
  --data-dir /var/lib/etcd

4.2.2 动态发现

通过 --discovery 参数指向一个已有的 etcd 集群或 DNS SRV 记录,实现节点自动注册。适用于云原生环境或节点 IP 动态分配的场景。

# 使用已有 etcd 集群作为发现端点
etcd --name infra0 \
  --initial-advertise-peer-urls https://10.0.0.1:2380 \
  --listen-peer-urls https://10.0.0.1:2380 \
  --listen-client-urls https://10.0.0.1:2379,https://127.0.0.1:2379 \
  --advertise-client-urls https://10.0.0.1:2379 \
  --discovery https://discovery.etcd.io/<> \
  --data-dir /var/lib/etcd
生产建议:静态配置更可控,适合蓝绿发布场景下的固定集群;动态发现适合与 Kubernetes 等编排系统集成。无论哪种方式,务必在集群形成后锁定 --initial-cluster-state 为 existing,防止误加入新节点导致脑裂。
etcd 集群成员发现机制对比 静态配置 infra0 (10.0.0.1) infra1 (10.0.0.2) infra2 (10.0.0.3) --initial-cluster 显式列出所有成员 --initial-cluster-state new 首次启动标记 适合固定节点集群 动态发现 发现服务 节点自动注册 集群自动形成 --discovery URL 或 DNS SRV 无需预知所有 IP 适合动态环境 需额外发现端点

4.3 TLS 安全配置

etcd 支持基于 TLS 的加密通信,包括客户端到服务端、服务端到服务端(peer)的双向加密。生产环境必须启用 TLS 以防止中间人攻击和数据泄露。

4.3.1 证书体系

证书类型 文件名示例 用途
CA 证书 ca.crt 签发所有组件证书,用于验证对端身份
服务端证书 server.crt + server.key 客户端连接 etcd 时验证服务端身份
Peer 证书 peer.crt + peer.key etcd 节点之间通信时互相验证身份
客户端证书 client.crt + client.key etcdctl 或应用连接 etcd 时提供身份凭证

4.3.2 启动参数中的 TLS 配置

# 启用客户端 TLS
--cert-file=/etc/etcd/server.crt \
--key-file=/etc/etcd/server.key \
--client-cert-auth \
--trusted-ca-file=/etc/etcd/ca.crt \

# 启用 Peer TLS
--peer-cert-file=/etc/etcd/peer.crt \
--peer-key-file=/etc/etcd/peer.key \
--peer-client-cert-auth \
--peer-trusted-ca-file=/etc/etcd/ca.crt
安全注意事项:
• --client-cert-auth 和 --peer-client-cert-auth 开启后,所有连接必须提供有效证书,否则拒绝连接。
• 证书的 CN (Common Name) 或 SAN (Subject Alternative Name) 必须包含节点 IP 或 DNS 名称,否则 TLS 握手会失败。
• 证书私钥文件权限应设为 600,仅 etcd 用户可读。
etcd TLS 双向加密通信架构 etcd 节点 A server.crt / server.key peer.crt / peer.key etcd 节点 B server.crt / server.key peer.crt / peer.key 客户端 / etcdctl client.crt / client.key CA 证书 Peer TLS 双向加密 Client TLS Client TLS

4.4 常用启动参数详解

etcd 的启动参数数量较多,以下按功能分类列出核心参数及其作用,便于运维人员快速定位和调优。

4.4.1 成员与集群参数

参数 默认值 说明
--name default 节点名称,集群内唯一,用于标识成员
--data-dir ${name}.etcd 数据持久化目录,包含 WAL 和 snapshot
--initial-cluster — 初始集群成员列表,格式:name1=url1,name2=url2
--initial-cluster-state new 集群状态:new 或 existing
--initial-cluster- — 集群令牌,防止意外加入其他集群

4.4.2 网络与通信参数

参数 默认值 说明
--listen-peer-urls http://localhost:2380 节点间通信监听地址,建议使用 HTTPS
--listen-client-urls http://localhost:2379 客户端连接监听地址,建议包含 127.0.0.1 用于本地健康检查
--advertise-client-urls — 对外公布的客户端连接地址,其他节点和客户端通过此地址访问
--initial-advertise-peer-urls — 对外公布的节点间通信地址,用于集群成员发现

4.4.3 性能与存储参数

参数 默认值 说明
--snapshot-count 100000 触发快照的 WAL 条目数,调低可减少恢复时间但增加 I/O
--max-wals 5 保留的最大 WAL 文件数,超出则自动清理
--quota-backend-bytes 2GB 数据库存储配额,超过后将拒绝写入,需定期压缩或清理
--auto-compaction-mode periodic 自动压缩模式:periodic(按时间)或 revision(按版本)
--auto-compaction-retention 0 压缩保留时长(如 1h)或版本数,0 表示关闭自动压缩

4.4.4 日志与调试参数

参数 默认值 说明
--log-level info 日志级别:debug、info、warn、error、fatal
--log-outputs stderr 日志输出目标,可指定文件路径或 syslog
--metrics basic 指标暴露模式:basic 或 extensive
参数调优建议:
• 生产环境建议将 --quota-backend-bytes 设置为 8GB 或更高,配合定期压缩避免空间耗尽。
• --auto-compaction-retention 建议设置为 1h(周期性模式),平衡历史查询与存储开销。
• 启用 --metrics extensive 可获取更详细的 Prometheus 指标,便于监控集群健康状态。

4.5 验证安装与配置

完成安装和配置后,通过以下命令验证集群状态和 TLS 通信是否正常:

# 检查成员列表
etcdctl --endpoints=https://10.0.0.1:2379 \
  --cacert=/etc/etcd/ca.crt \
  --cert=/etc/etcd/client.crt \
  --key=/etc/etcd/client.key \
  member list

# 检查集群健康状态
etcdctl --endpoints=https://10.0.0.1:2379 \
  --cacert=/etc/etcd/ca.crt \
  --cert=/etc/etcd/client.crt \
  --key=/etc/etcd/client.key \
  endpoint health

# 写入测试键值
etcdctl --endpoints=https://10.0.0.1:2379 \
  --cacert=/etc/etcd/ca.crt \
  --cert=/etc/etcd/client.crt \
  --key=/etc/etcd/client.key \
  put /test/key "Hello etcd"

若所有命令返回正常,说明 etcd 安装、集群发现、TLS 加密通信均已正确配置,可以进入下一阶段的备份与蓝绿发布策略验证。