Ubuntu 16.04虚拟机运行devstack时devstack@etcd.service启动失败
我之前在Ubuntu 16.04跑DevStack时也碰到过etcd服务启动失败的情况,给你几个实用的排查和解决步骤:
系统提示你查看systemctl status,这是定位问题最关键的第一步,执行下面的命令获取完整的错误日志:
sudo systemctl status devstack@etcd.service -l
或者用journalctl查看更完整的历史运行日志:
sudo journalctl -u devstack@etcd.service --no-pager
这些日志会直接告诉你是权限问题、配置错误、端口占用还是依赖缺失,是精准定位问题的核心依据。
根据我碰到的实际情况,列出几个最可能的原因和解决方式:
权限不足:etcd进程需要读写自己的数据目录,DevStack默认的etcd数据目录一般是
/opt/stack/data/etcd。先检查目录权限:ls -ld /opt/stack/data/etcd如果所有者不是
stack用户,执行下面的命令修正权限:sudo chown -R stack:stack /opt/stack/data/etcd然后尝试重启服务:
sudo systemctl restart devstack@etcd.service配置文件参数错误:DevStack会自动生成etcd的配置文件,一般在
/etc/etcd/etcd.conf或者/opt/stack/etcd/etcd.conf路径下。你可以尝试手动启动etcd来测试配置是否有效:sudo su - stack /opt/stack/etcd/etcd --config-file=/path/to/your/etcd.conf把
/path/to/your/etcd.conf换成实际的配置文件路径,手动启动会直接输出错误信息,比如无效的监听地址、配置参数拼写错误等。端口被占用:etcd默认使用2379(客户端通信端口)和2380(集群节点通信端口),检查这些端口是否被其他进程占用:
sudo netstat -tulpn | grep 2379 sudo netstat -tulpn | grep 2380如果发现端口被占用,要么杀掉对应的占用进程,要么修改DevStack的
local.conf文件,自定义etcd的端口:ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2389 ETCD_ADVERTISE_CLIENT_URLS=http://0.0.0.0:2389 ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2390添加完配置后重新运行
./stack.sh即可。系统依赖缺失:Ubuntu 16.04的默认软件包版本可能偏低,或者DevStack在安装依赖时因为网络问题失败了。可以手动补装etcd相关的依赖包:
sudo apt-get update && sudo apt-get install -y etcd-client etcd-server
如果上面的方法都没解决问题,把你拿到的systemctl status或者journalctl日志内容贴出来,就能更精准地定位具体故障点了。
内容的提问来源于stack exchange,提问作者Suren Konathala

