3. 环境准备:操作系统选型与基础设施规划

搭建 etcd 压测沙盘的第一步是确定底层运行环境。操作系统选型、主机规划、网络配置以及安全策略的调整,直接影响 etcd 集群的部署效率、性能表现与运维复杂度。本章将围绕这四个维度给出标准化配置方案。

3.1 操作系统选型:CentOS 7 与 Ubuntu 20.04 对比

etcd 官方对 Linux 内核版本有一定要求(推荐 4.4+),且依赖 glibc、iptables/nftables 等基础组件。在生产与压测场景中,CentOS 7 和 Ubuntu 20.04 LTS 是最广泛使用的两个发行版。下表从关键维度进行对比:

对比项 CentOS 7 (3.10.0-1160+) Ubuntu 20.04 LTS (5.4.0+)
内核版本 3.10(可通过 elrepo 升级至 5.x) 5.4(原生支持 io_uring、BPF)
etcd 兼容性 etcd 3.4/3.5 官方支持 etcd 3.4/3.5 官方支持
包管理器 yum / rpm apt / deb
默认防火墙 firewalld (iptables 后端) ufw (nftables 后端)
SELinux 默认 enforcing 默认 disabled (AppArmor 可选)
系统资源占用 ~512MB idle ~400MB idle
社区维护状态 2024-06 EOL,建议迁移 支持至 2025-04 (ESM 至 2030)
选型建议: 本课程以 Ubuntu 20.04 LTS 为主演示环境,原因在于其内核版本更高、默认关闭 SELinux、包管理更现代,适合快速搭建压测沙盘。若你所在团队强制使用 CentOS 7,请务必升级内核至 4.18+ 并关闭 SELinux。

3.2 虚拟机与云主机规划

压测沙盘需要至少 3 个节点来模拟真实集群。无论是使用本地虚拟机(VirtualBox / VMware)还是云主机(AWS EC2 / 阿里云 ECS),建议遵循以下最低配置:

  • CPU: 2 核(压测场景建议 4 核,避免 CPU 成为瓶颈)
  • 内存: 4 GB(etcd 默认使用 2 GB 内存上限,压测时建议 8 GB)
  • 磁盘: 40 GB SSD(etcd 对磁盘 IOPS 敏感,SSD 是刚需)
  • 网络: 千兆以太网(同一子网内,延迟 < 1ms)

以下是一个三节点集群的主机规划表示例:

主机名 IP 地址 角色 CPU 内存 磁盘
etcd-node-1 192.168.56.101 etcd member + 压测客户端 4 vCPU 8 GB 40 GB SSD
etcd-node-2 192.168.56.102 etcd member 4 vCPU 8 GB 40 GB SSD
etcd-node-3 192.168.56.103 etcd member 4 vCPU 8 GB 40 GB SSD
网络规划要点: 所有节点必须处于同一二层网络(或同 VPC 内),且关闭网络流量整形。etcd 的 Raft 心跳对网络抖动极其敏感,建议在压测前使用 ping -c 100 确认节点间延迟稳定在 1ms 以内。

3.3 网络配置要求

etcd 集群依赖多个端口进行通信,必须确保端口可达且未被占用。以下是 etcd 默认端口清单:

端口 协议 用途 绑定地址建议
2379 TCP 客户端 API(HTTP/gRPC) 0.0.0.0(压测时)
2380 TCP 节点间 Raft 通信 内网 IP
2381 TCP etcd 指标/metrics 端口(可选) 内网 IP

在 Ubuntu 20.04 上,使用 ufw 开放端口:

# 开放 etcd 客户端端口
sudo ufw allow 2379/tcp

# 开放 etcd 集群通信端口
sudo ufw allow 2380/tcp

# 开放 metrics 端口(可选)
sudo ufw allow 2381/tcp

# 重新加载防火墙规则
sudo ufw reload

# 查看当前规则
sudo ufw status verbose

在 CentOS 7 上,使用 firewalld 开放端口:

# 开放 etcd 客户端端口
sudo firewall-cmd --permanent --add-port=2379/tcp

# 开放 etcd 集群通信端口
sudo firewall-cmd --permanent --add-port=2380/tcp

# 重新加载防火墙规则
sudo firewall-cmd --reload

# 查看当前规则
sudo firewall-cmd --list-ports
避坑提示: 切勿将 2380 端口暴露到公网。Raft 通信未加密时,攻击者可通过伪造 Raft 消息破坏集群一致性。压测沙盘建议使用仅主机网络或 NAT 网络,禁止端口映射到宿主机外部。

3.4 防火墙与 SELinux 设置

防火墙和 SELinux 是 etcd 集群部署中最常见的“隐形杀手”。很多 etcd 启动失败或节点间通信异常,根源都在安全策略拦截。以下是标准处理流程:

3.4.1 防火墙策略

在压测沙盘中,建议采用 白名单模式:仅允许 etcd 节点 IP 访问相关端口。以下是在 Ubuntu 20.04 上配置白名单的示例:

# 允许节点间通信(仅限内网网段)
sudo ufw allow from 192.168.56.0/24 to any port 2379
sudo ufw allow from 192.168.56.0/24 to any port 2380

# 拒绝其他来源
sudo ufw default deny incoming

# 启用防火墙
sudo ufw enable

3.4.2 SELinux 处理(CentOS 7 重点)

CentOS 7 默认开启 SELinux enforcing 模式,etcd 进程在访问数据目录、绑定端口时可能被 SELinux 策略阻止。推荐两种处理方式:

  • 方式一(推荐压测沙盘): 临时或永久关闭 SELinux
  • 方式二(生产环境): 为 etcd 编写自定义 SELinux 策略

关闭 SELinux 的操作如下:

# 临时关闭(立即生效,重启后失效)
sudo setenforce 0

# 永久关闭(需重启生效)
sudo sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

# 验证当前状态
getenforce
压测沙盘建议: 直接关闭 SELinux 并将防火墙设为宽松模式(或仅限制外部访问),可以大幅降低环境调试成本。待集群稳定运行后,再逐步收紧安全策略。

3.5 环境准备总览图

下图展示了从操作系统选型到安全策略配置的完整环境准备流程,以及各组件之间的依赖关系:

环境准备总览:从选型到安全策略 操作系统选型 主机规划 CentOS 7 Ubuntu 20.04 虚拟机 云主机 网络配置:端口 2379/2380 安全策略:防火墙 + SELinux etcd 压测沙盘就绪 说明:压测沙盘建议直接关闭 SELinux 并采用白名单防火墙策略,以降低环境调试成本

3.6 环境验证清单

完成上述配置后,建议按以下清单逐项验证,确保环境符合 etcd 运行要求:

  1. 内核版本检查: uname -r 确保 ≥ 4.4(CentOS 7 需升级)
  2. 节点间连通性: ping -c 3 192.168.56.102 确认延迟 < 1ms
  3. 端口可达性: nc -zv 192.168.56.101 2379 确认端口开放
  4. 防火墙状态: sudo ufw status 或 sudo firewall-cmd --list-ports
  5. SELinux 状态: getenforce 输出应为 Disabled 或 Permissive
  6. 磁盘 IO 性能: sudo hdparm -Tt /dev/sda 确认读取速度 > 200 MB/s
快速验证脚本: 可将上述检查项写入一个 shell 脚本,在三个节点上依次执行,输出 PASS/FAIL 结果,大幅提升环境准备效率。