4. etcd 安装与配置:二进制安装、静态配置与动态发现、TLS 安全配置、常用启动参数详解
etcd 作为分布式键值存储系统,其安装与配置的规范性直接决定了集群的稳定性与安全性。本节将围绕二进制安装、集群成员发现机制、TLS 安全通信以及核心启动参数展开,为后续的备份恢复与蓝绿发布验证奠定坚实的运行环境基础。
4.1 二进制安装与目录规划
推荐使用官方预编译二进制进行安装,避免依赖管理带来的版本兼容问题。以下为标准安装步骤:
- 下载与解压:从 GitHub Releases 获取对应架构的
etcd-v3.5.x-linux-amd64.tar.gz。 - 部署二进制:将
etcd和etcdctl复制到/usr/local/bin/。 - 创建数据与配置目录:
/var/lib/etcd(数据)、/etc/etcd/(证书与配置)。 - 创建系统用户:
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,防止误加入新节点导致脑裂。
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
安全注意事项:
•
• 证书的 CN (Common Name) 或 SAN (Subject Alternative Name) 必须包含节点 IP 或 DNS 名称,否则 TLS 握手会失败。
• 证书私钥文件权限应设为
•
--client-cert-auth 和 --peer-client-cert-auth 开启后,所有连接必须提供有效证书,否则拒绝连接。• 证书的 CN (Common Name) 或 SAN (Subject Alternative Name) 必须包含节点 IP 或 DNS 名称,否则 TLS 握手会失败。
• 证书私钥文件权限应设为
600,仅 etcd 用户可读。
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 加密通信均已正确配置,可以进入下一阶段的备份与蓝绿发布策略验证。