问题描述:Cinder组件装在Controller节点,节点发生故障重启后,发现挂载了volumn的实例无法启动,并且无法创建及挂载定的volume,查看cinder-volume服务,处于stop状态,执行启动命令发现无法启动,错误日志如下:
2013-12-19 14:44:33 INFO [cinder.service] Starting 1 workers
2013-12-19 14:44:33 INFO [cinder.service] Started child 2086
2013-12-19 14:44:33 AUDIT [cinder.service] Starting cinder-volume node (version 2013.1.3)
2013-12-19 14:44:33 ERROR [cinder.service] Unhandled exception
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/cinder/service.py", line 227, in _start_child
self._child_process(wrap.server)
File "/usr/lib/python2.7/dist-packages/cinder/service.py", line 204, in _child_process
launcher.run_server(server)
File "/usr/lib/python2.7/dist-packages/cinder/service.py", line 95, in run_server
server.start()
File "/usr/lib/python2.7/dist-packages/cinder/service.py", line 355, in start
self.manager.init_host()
File "/usr/lib/python2.7/dist-packages/cinder/volume/manager.py", line 149, in init_host
self.driver.ensure_export(ctxt, volume)
File "/usr/lib/python2.7/dist-packages/cinder/volume/drivers/lvm.py", line 400, in ensure_export
old_name=old_name)
File "/usr/lib/python2.7/dist-packages/cinder/volume/iscsi.py", line 225, in create_iscsi_target
self._new_target(name, tid, **kwargs)
File "/usr/lib/python2.7/dist-packages/cinder/volume/iscsi.py", line 284, in _new_target
**kwargs)
File "/usr/lib/python2.7/dist-packages/cinder/volume/iscsi.py", line 73, in _run
self._execute(self._cmd, *args, run_as_root=True, **kwargs)
File "/usr/lib/python2.7/dist-packages/cinder/utils.py", line 145, in execute
'to utils.execute: %r') % kwargs)
Error: Got unknown keyword args to utils.execute: {'old_name': None}
错误分析:这是OpenStack Grrizly版本的一个BUG,造成cinder-volumn服务在节点重启后无法正常启动,最新版本已经修订(本环环境的安装时间晚于bug提交时间,居然还是旧的代码,很是奇怪)https://review.openstack.org/#/c/47721/
,自己通过修改源代码进行修改,修改如下:
1、打开文件/usr/lib/python2.7/dist-packages/cinder/volume/iscsi.py
2、在224行下边加一行代码,修改如下:
def create_iscsi_target(self, name, tid, lun, path,
chap_auth=None, **kwargs):
kwargs.pop('old_name', None)
self._new_target(name, tid, **kwargs)
self._new_logicalunit(tid, lun, path, **kwargs)
注:kwargs.pop('old_name', None)为新增加的代码
3、重启cinder-volumn服务
service cinder-volume restart
服务正常启动,问题解决。