3. etcd 集群部署:单节点部署、静态集群部署、动态集群发现、TLS 安全配置

etcd 集群的部署方式直接影响后续备份策略与灾备切换的复杂度。本章从单节点开发环境开始,逐步过渡到生产级静态多节点集群、动态发现机制,并重点覆盖 TLS 双向认证配置,为后续增量备份与蓝绿发布奠定基础设施基础。

3.1 单节点部署(开发/测试环境)

单节点 etcd 不具备高可用能力,适用于本地开发、功能验证或非关键测试场景。部署步骤简洁,核心在于配置数据目录与监听地址。

适用场景: 本地开发调试、CI/CD 集成测试、功能原型验证。
风险提示: 单节点故障即导致数据不可用,切勿用于生产环境。

部署步骤

  1. 下载二进制: 从 GitHub Releases 获取对应平台的 etcd 与 etcdctl。
  2. 创建数据目录: mkdir -p /var/lib/etcd
  3. 启动服务:
etcd \
  --name etcd-single \
  --data-dir /var/lib/etcd \
  --listen-client-urls http://0.0.0.0:2379 \
  --advertise-client-urls http://localhost:2379 \
  --listen-peer-urls http://0.0.0.0:2380 \
  --initial-advertise-peer-urls http://localhost:2380
  1. 验证集群状态:
etcdctl endpoint health --endpoints=http://localhost:2379
etcdctl member list --endpoints=http://localhost:2379
参数 说明 推荐值
--name 节点名称,集群内唯一 etcd-single
--data-dir 数据持久化路径 /var/lib/etcd
--listen-client-urls 客户端请求监听地址 http://0.0.0.0:2379
--advertise-client-urls 对外公布的客户端访问地址 http://localhost:2379

3.2 静态集群部署(生产标准方案)

生产环境推荐使用 3 或 5 节点静态集群。所有节点在启动前已知彼此的地址与名称,通过 --initial-cluster 参数一次性完成组网。静态部署配置清晰、依赖少,是 etcd 官方推荐的生产方式。

集群拓扑

etcd 静态集群 3 节点拓扑 etcd-1 192.168.1.10:2380 name=infra1 etcd-2 192.168.1.11:2380 name=infra2 etcd-3 192.168.1.12:2380 name=infra3 初始集群配置(每个节点相同) --initial-cluster "infra1=http://192.168.1.10:2380,infra2=http://192.168.1.11:2380,infra3=http://192.168.1.12:2380"

节点 1 启动示例

etcd \
  --name infra1 \
  --data-dir /var/lib/etcd \
  --listen-client-urls http://0.0.0.0:2379 \
  --advertise-client-urls http://192.168.1.10:2379 \
  --listen-peer-urls http://0.0.0.0:2380 \
  --initial-advertise-peer-urls http://192.168.1.10:2380 \
  --initial-cluster "infra1=http://192.168.1.10:2380,infra2=http://192.168.1.11:2380,infra3=http://192.168.1.12:2380" \
  --initial-cluster-state new \
  --initial-cluster- etcd-cluster-1
关键参数说明:
--initial-cluster-state new:首次创建集群时使用;若节点重启或加入已有集群,需改为 existing。
--initial-cluster-:集群唯一标识,防止不同集群的节点误加入。

3.3 动态集群发现

当节点 IP 或数量在启动前无法完全确定时,可使用动态发现机制。etcd 支持基于 DNS SRV 记录或 etcd 发现服务的自动组网方式。

3.3.1 DNS SRV 发现

通过 DNS 的 SRV 记录公布 etcd 节点地址,客户端或新节点通过域名查询自动发现集群成员。

记录类型 示例 用途
SRV(客户端) _etcd-client._tcp.example.com 客户端发现 etcd 服务端点
SRV(节点间) _etcd-server._tcp.example.com 节点间 peer 通信发现
A/AAAA etcd-1.example.com 解析节点实际 IP

3.3.2 etcd 发现服务

利用已有的 etcd 集群作为注册中心,新节点启动时向发现服务注册自身信息。

# 在已有集群中创建发现 
curl -X PUT http://discovery.etcd.io/new?size=3

# 返回类似: https://discovery.etcd.io/abc123def456

# 节点启动时引用该 URL
etcd \
  --name infra4 \
  --initial-cluster-state new \
  --discovery https://discovery.etcd.io/abc123def456 \
  --listen-peer-urls http://0.0.0.0:2380 \
  --initial-advertise-peer-urls http://192.168.1.13:2380
动态发现风险: 依赖外部发现服务可能引入单点故障;DNS 缓存延迟可能导致节点加入失败。生产环境优先使用静态部署。

3.4 TLS 安全配置

etcd 默认使用明文 HTTP 通信,生产环境必须启用 TLS 双向认证,防止中间人攻击与未授权访问。TLS 配置覆盖客户端连接(client-to-server)和节点间通信(peer-to-peer)两个维度。

证书体系

etcd TLS 双向认证证书体系 Root CA ca.crt 服务端证书 server.crt / server.key 客户端证书 client.crt / client.key 所有证书由同一 Root CA 签发,etcd 启动时验证对端证书链

TLS 启动配置示例

etcd \
  --name infra1 \
  --data-dir /var/lib/etcd \
  --cert-file /etc/etcd/ssl/server.crt \
  --key-file /etc/etcd/ssl/server.key \
  --client-cert-auth \
  --trusted-ca-file /etc/etcd/ssl/ca.crt \
  --peer-cert-file /etc/etcd/ssl/peer.crt \
  --peer-key-file /etc/etcd/ssl/peer.key \
  --peer-client-cert-auth \
  --peer-trusted-ca-file /etc/etcd/ssl/ca.crt \
  --listen-client-urls https://0.0.0.0:2379 \
  --advertise-client-urls https://192.168.1.10:2379 \
  --listen-peer-urls https://0.0.0.0:2380 \
  --initial-advertise-peer-urls https://192.168.1.10:2380 \
  --initial-cluster "infra1=https://192.168.1.10:2380,infra2=https://192.168.1.11:2380,infra3=https://192.168.1.12:2380" \
  --initial-cluster-state new

参数对照表

参数 作用域 说明
--cert-file 客户端 服务端证书,用于向客户端证明身份
--key-file 客户端 服务端私钥
--client-cert-auth 客户端 启用客户端证书验证(双向认证)
--trusted-ca-file 客户端 验证客户端证书的 CA 根证书
--peer-cert-file 节点间 节点间通信证书
--peer-key-file 节点间 节点间通信私钥
--peer-client-cert-auth 节点间 节点间双向认证
--peer-trusted-ca-file 节点间 验证对端节点证书的 CA

客户端连接验证

etcdctl \
  --endpoints=https://192.168.1.10:2379 \
  --cacert=/etc/etcd/ssl/ca.crt \
  --cert=/etc/etcd/ssl/client.crt \
  --key=/etc/etcd/ssl/client.key \
  endpoint health
证书管理建议:
- 使用 cfssl 或 openssl 自建内部 CA,统一签发证书。
- 证书有效期建议 1-2 年,提前部署自动续期机制。
- 节点 IP 变更后需重新签发证书,避免 TLS 握手失败。

3.5 部署方式对比总结

部署方式 高可用 配置复杂度 推荐场景
单节点 否 低 开发测试、功能验证
静态集群 是 中 生产环境首选
DNS 发现 是 中高 动态 IP 环境、容器化部署
etcd 发现服务 是 高 临时集群、快速实验

生产环境应始终选择 静态集群 + TLS 双向认证 的组合,这是后续实现增量备份与蓝绿发布灾备自动化的可靠基础设施。下一阶段将基于此集群配置,构建备份策略与灾备切换流程。