1. 问题背景
今天openstack群里一位老哥在群里问了一个问题
咦,有红包
对于我这个穷B来说,红包就是我解决问题的动力,于是我就私聊了解了一下情况。
2. 问题定位
原来这个老哥在线上生产环境清理日志的时候,不小心在控制节点的/var/log/目录下执行了rm -rf *,删除了目录下面的所有文件。导致openstack的组件服务全部down掉,其原因是openstack组件在运行过程中,服务会不停的向日志文件写入日志,如果日志目录不存在,组件没法成功的写入日志,就会产生异常,导致服务故障。
3. 解决问题
既然我们已经知道问题产生的原因,那我们就好办了,解决思路就是恢复日志目录,然后重启相应的服务。
连上这个老哥的机器,确认了一下这个老哥的线上环境总共有以下服务需要恢复,glance,nova,keystone,neutron,keystone,horizon,cinder。
3.1 恢复glance服务
glance服务对应的日志目录/var/log/glance/
我们需要重建/var/log/glance/目录、对其授权,然后重启glance服务
mkdir /var/log/glance
chown glance.glance /var/log/glance
systemctl start openstack-glance-api.service \
openstack-glance-registry.service
3.2 恢复glance服务
nova服务对应的日志目录/var/log/nova/
我们需要重建/var/log/nova/目录、对其授权,然后重启nova服务
mkdir /var/log/nova
chown nova.nova /var/log/nova
systemctl restart openstack-nova-api.service \
openstack-nova-consoleauth openstack-nova-scheduler.service \
openstack-nova-conductor.service openstack-nova-novncproxy.service
3.2 恢复keystone服务
keystone服务对应的日志目录/var/log/keystone/
我们需要重建/var/log/keystone/目录、对其授权,然后重启keystone服务
mkdir /var/log/keystone
chown keystone.keystone /var/log/keystone
这里我们要注意,keystone的服务是由httpd服务管理的,所以这里我们还需要恢复httpd服务
mkdir /var/log/httpd
systemctl restart httpd.service
3.3 恢复neutron服务
neutron服务对应的日志目录/var/log/neutron/
我们就需要重建/var/log/neutron/目录、对其授权,然后重启neutron服务
mkdir /var/log/neutron
chown neutron.neutron /var/log/neutron
systemctl restart neutron-server.service \
neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
neutron-metadata-agent.service neutron-l3-agent.service
3.4 恢复cinder服务
cinder服务对应的日志目录/var/log/cinder/
我们就需要重建/var/log/cinder/目录、对其授权,然后重启cinder服务
mkdir /var/log/cinder
chown cinder.cinder /var/log/cinder
systemctl restart openstack-cinder-api.service openstack-cinder-scheduler.service
3.5 恢复horizon服务
horizon服务对应由httpd服务管理。在3.3恢复keystone服务的时候我们已经恢复了httpd服务。所以horizon服务不需要再做另外的操作。
至此,服务已全部恢复完毕。
PS:
在给这个老哥恢复neutron服务的过程中,发现日志目录重建之后重启服务,neutron-server无法正常重启,neutron-server的日志显示端口占用。
解决办法:
查看端口占用进程
ss -nltpd | grep <端口号>
在输出结果中找到进程的PID,杀死进程,然后再重新启动服务。
kill -9 <PID>
写在最后:
千万不要在线上环境乱用 rm -rf,实际环境中尽量少用,养成习惯,好的习惯在关键时刻能救你一命。