3. etcd 集群部署:单节点部署、静态集群部署、动态集群发现、TLS 安全配置
etcd 集群的部署方式直接影响后续备份策略与灾备切换的复杂度。本章从单节点开发环境开始,逐步过渡到生产级静态多节点集群、动态发现机制,并重点覆盖 TLS 双向认证配置,为后续增量备份与蓝绿发布奠定基础设施基础。
3.1 单节点部署(开发/测试环境)
单节点 etcd 不具备高可用能力,适用于本地开发、功能验证或非关键测试场景。部署步骤简洁,核心在于配置数据目录与监听地址。
适用场景: 本地开发调试、CI/CD 集成测试、功能原型验证。
风险提示: 单节点故障即导致数据不可用,切勿用于生产环境。
风险提示: 单节点故障即导致数据不可用,切勿用于生产环境。
部署步骤
- 下载二进制: 从 GitHub Releases 获取对应平台的 etcd 与 etcdctl。
- 创建数据目录:
mkdir -p /var/lib/etcd - 启动服务:
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
- 验证集群状态:
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 官方推荐的生产方式。
集群拓扑
节点 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)两个维度。
证书体系
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 握手失败。
- 使用 cfssl 或 openssl 自建内部 CA,统一签发证书。
- 证书有效期建议 1-2 年,提前部署自动续期机制。
- 节点 IP 变更后需重新签发证书,避免 TLS 握手失败。
3.5 部署方式对比总结
| 部署方式 | 高可用 | 配置复杂度 | 推荐场景 |
|---|---|---|---|
| 单节点 | 否 | 低 | 开发测试、功能验证 |
| 静态集群 | 是 | 中 | 生产环境首选 |
| DNS 发现 | 是 | 中高 | 动态 IP 环境、容器化部署 |
| etcd 发现服务 | 是 | 高 | 临时集群、快速实验 |
生产环境应始终选择 静态集群 + TLS 双向认证 的组合,这是后续实现增量备份与蓝绿发布灾备自动化的可靠基础设施。下一阶段将基于此集群配置,构建备份策略与灾备切换流程。