服务器etcd教程:零基础单节点部署与日常维护实操
etcd 是一个分布式键值存储,Kubernetes 等系统用它保存集群状态数据。
这篇服务器 etcd 教程针对最常见的单节点场景,带你在 Linux 服务器上从零完成安装、配置、启动和验证,每一步都给出可执行的命令和预期结果。
准备条件与下载安装
开始前确认服务器满足以下条件:
- 操作系统建议使用主流 Linux 发行版(如 Ubuntu、Debian、CentOS 或 Rocky Linux),本文命令以通用方式给出。
- 具有
root权限或可使用sudo。 - 服务器时间已同步,否则集群通信可能异常。可用
date检查,必要时启用 NTP 或 chrony。 - 放行 etcd 默认使用的端口:
2379(客户端通信)和2380(节点间通信)。
先在 etcd 官方 GitHub Releases 页面 确认当前稳定版本号,再用 wget 下载对应架构的压缩包。
以下载 linux-amd64 为例:
cd /tmp
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
解压后进入目录,把 etcd 和 etcdctl 两个可执行文件复制到系统路径:
cd etcd-v3.5.15-linux-amd64
sudo cp etcd etcdctl /usr/local/bin/
etcd --version
最后一条命令能输出版本号,说明安装成功。
如果提示找不到命令,检查 /usr/local/bin 是否在 PATH 中。
编写配置文件并交给 systemd 托管
etcd 支持命令行参数启动,但生产环境更推荐用配置文件,便于维护。
创建目录和配置文件:
sudo mkdir -p /etc/etcd /var/lib/etcd
sudo tee /etc/etcd/etcd.conf <<'EOF'
name: 'default'
data-dir: '/var/lib/etcd'
listen-client-urls: 'http://0.0.0.0:2379'
advertise-client-urls: 'http://127.0.0.1:2379'
listen-peer-urls: 'http://0.0.0.0:2380'
initial-advertise-peer-urls: 'http://127.0.0.1:2380'
initial-cluster: 'default=http://127.0.0.1:2380'
initial-cluster-token: 'etcd-cluster-1'
initial-cluster-state: 'new'
EOF
几个关键项说明:data-dir 是数据存放目录,务必单独规划并定期备份;initial-cluster-state 为 new 表示首次初始化,重新初始化前要清空数据目录。
接着创建 systemd 服务文件:
sudo tee /etc/systemd/system/etcd.service <<'EOF'
[Unit]
Description=etcd key-value store
Documentation=https://github.com/etcd-io/etcd
After=network.target
[Service]
Type=notify
ExecStart=/usr/local/bin/etcd --config-file=/etc/etcd/etcd.conf
Restart=always
RestartSec=5
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
加载并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable --now etcd
sudo systemctl status etcd
状态显示 active (running) 即表示启动成功。
用 etcdctl 验证读写与健康状态
服务起来后不要急着接入业务,先用官方客户端确认读写正常。
设置 API 版本环境变量:
export ETCDCTL_API=3
etcdctl --endpoints=http://127.0.0.1:2379 endpoint health
预期输出类似 http://127.0.0.1:2379 is healthy。
然后做一次读写测试:
etcdctl --endpoints=http://127.0.0.1:2379 put foo bar
etcdctl --endpoints=http://127.0.0.1:2379 get foo
put 返回 OK,get foo 返回 bar,说明键值存储工作正常。
如果本机正常但远程连不上,重点检查防火墙和 listen-client-urls 是否绑定了 0.0.0.0。
容易踩坑的地方
- 数据目录权限:
/var/lib/etcd必须对运行 etcd 的用户可写,否则启动时会报权限拒绝。可用ls -ld /var/lib/etcd确认。 - 重复初始化:把
initial-cluster-state从new改成existing前,要确保集群成员信息一致,随意改动可能导致启动失败。 - 端口被占用:启动失败时用
ss -lntp | grep 2379查看端口占用,避免和其他服务冲突。 - 直接删除数据目录:
/var/lib/etcd存的是全部键值数据,删除等于清库,操作前务必先备份。 - 时间不同步:多节点环境下时间偏差过大会影响选举和通信,单节点也应保持时间同步。
日常维护与效果复查
上线后建议养成固定检查习惯:
- 用
systemctl status etcd查看服务运行状态。 - 用
etcdctl endpoint health和etcdctl endpoint status检查健康与成员状态。 - 定期备份数据目录,命令示例:
sudo tar -czf etcd-backup-$(date +%F).tar.gz /var/lib/etcd。 - 关注磁盘空间,etcd 对磁盘延迟较敏感,空间不足会直接影响写入。
完成以上步骤后,你的服务器已经具备一个可用的单节点 etcd 服务。
后续如果需要高可用,再在此基础上扩展为多节点集群,并补充 TLS 证书配置。
常见疑问
etcd 启动后立刻退出怎么办?
先看 journalctl -u etcd -n 50 的日志,多数情况是数据目录权限、端口占用或配置文件语法问题。
远程客户端连接超时怎么排查?
确认 listen-client-urls 绑定了 0.0.0.0,并检查服务器防火墙或安全组是否放行 2379 端口。
单节点能直接用于生产吗?
单节点没有冗余,服务器宕机即服务中断。对可用性有要求时,应部署三节点及以上集群。