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) |
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 |
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
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
3.5 环境准备总览图
下图展示了从操作系统选型到安全策略配置的完整环境准备流程,以及各组件之间的依赖关系:
3.6 环境验证清单
完成上述配置后,建议按以下清单逐项验证,确保环境符合 etcd 运行要求:
- 内核版本检查:
uname -r确保 ≥ 4.4(CentOS 7 需升级) - 节点间连通性:
ping -c 3 192.168.56.102确认延迟 < 1ms - 端口可达性:
nc -zv 192.168.56.101 2379确认端口开放 - 防火墙状态:
sudo ufw status或sudo firewall-cmd --list-ports - SELinux 状态:
getenforce输出应为 Disabled 或 Permissive - 磁盘 IO 性能:
sudo hdparm -Tt /dev/sda确认读取速度 > 200 MB/s