问题描述: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服务正常启动,问题解决。