原博客地址:http://blog.csdn.net/lynn_kong
內容系本人學習、研究和總結,如有雷同,實屬榮幸!
更新歷史;
2013.07.17 該問題在最新的主幹分支中不存在了,因爲nova-scheduler中的代碼有部分重構過,不知是無意還是有意,修復了這個bug
/、雖然修改了,通過這個學習可以瞭解更多
version:OpenStack Grizzly 2013.1.2
hypervisor:KVM
shared storage: no
1、問題描述
我的環境上有一臺虛擬機,信息如下:
- root@controller:~# nova show ubuntu_bdm_with_keypair
- +-------------------------------------+----------------------------------------------------------+
- | Property | Value |
- +-------------------------------------+----------------------------------------------------------+
- | status | ACTIVE |
- | updated | 2013-07-11T05:15:46Z |
- | OS-EXT-STS:task_state | None |
- | OS-EXT-SRV-ATTR:host | controller |
- | key_name | mykey |
- | image | Attempt to boot from volume - no image supplied |
- | hostId | 6c1b0e7f432cdca4fe62380f271d7b83999b3aeee6e6893cc90db44a |
- | OS-EXT-STS:vm_state | active |
- | OS-EXT-SRV-ATTR:instance_name | instance-00000005 |
- | OS-EXT-SRV-ATTR:hypervisor_hostname | controller.konglingxian.com |
- | flavor | kong.flavor (6) |
- | id | 6cd558d9-e924-4598-8e63-e86a20929bd9 |
- | security_groups | [{u'name': u'default'}] |
- | demo_net1 network | 10.1.1.2, 128.3.11.101 |
- | user_id | 9bfc5979e8774ea99f54ba78d07c3bc0 |
- | name | ubuntu_bdm_with_keypair |
- | created | 2013-07-10T07:48:04Z |
- | tenant_id | d9a9b59b0be94489a85f51ba3ced15ce |
- | OS-DCF:diskConfig | MANUAL |
- | metadata | {} |
- | accessIPv4 | |
- | accessIPv6 | |
- | progress | 0 |
- | OS-EXT-STS:power_state | 1 |
- | OS-EXT-AZ:availability_zone | nova |
- | config_drive | |
- +-------------------------------------+----------------------------------------------------------+
- root@controller:~# nova hypervisor-list
- +----+-----------------------------+
- | ID | Hypervisor hostname |
- +----+-----------------------------+
- | 1 | compute.konglingxian.com |
- | 2 | controller.konglingxian.com |
- +----+-----------------------------+
- nova live-migration --block-migrate 6cd558d9-e924-4598-8e63-e86a20929bd9
返回的異常信息如下:
- {
- "badRequest": {
- "message": "Live migration of instance 6cd558d9-e924-4598-8e63-e86a20929bd9 to host controller failed",
- "code": 400
- }
- }
2、問題分析
先查看日誌中的異常堆棧:
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions Traceback (most recent call last):
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions File "/usr/lib/python2.7/dist-packages/nova/openstack/common/rpc/amqp.py", line 430, in _process_data
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions rval = self.proxy.dispatch(ctxt, version, method, **args)
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions File "/usr/lib/python2.7/dist-packages/nova/openstack/common/rpc/dispatcher.py", line 133, in dispatch
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions return getattr(proxyobj, method)(ctxt, **kwargs)
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions File "/usr/lib/python2.7/dist-packages/nova/scheduler/manager.py", line 117, in live_migration
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions context, ex, {})
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions File "/usr/lib/python2.7/contextlib.py", line 24, in __exit__
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions self.gen.next()
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions File "/usr/lib/python2.7/dist-packages/nova/scheduler/manager.py", line 96, in live_migration
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions block_migration, disk_over_commit)
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions File "/usr/lib/python2.7/dist-packages/nova/scheduler/driver.py", line 196, in schedule_live_migration
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions ignore_hosts)
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions File "/usr/lib/python2.7/dist-packages/nova/scheduler/driver.py", line 272, in _live_migration_dest_check
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions filter_properties)[0]
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions File "/usr/lib/python2.7/dist-packages/nova/scheduler/filter_scheduler.py", line 146, in select_hosts
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions request_spec, filter_properties, instance_uuids)]
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions File "/usr/lib/python2.7/dist-packages/nova/scheduler/filter_scheduler.py", line 336, in _schedule
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions filter_properties)
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions File "/usr/lib/python2.7/dist-packages/nova/scheduler/host_manager.py", line 342, in get_filtered_hosts
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions hosts, filter_properties)
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions File "/usr/lib/python2.7/dist-packages/nova/filters.py", line 53, in get_filtered_objects
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions return list(objs)
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions File "/usr/lib/python2.7/dist-packages/nova/filters.py", line 39, in filter_all
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions if self._filter_one(obj, filter_properties):
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions File "/usr/lib/python2.7/dist-packages/nova/scheduler/filters/__init__.py", line 30, in _filter_one
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions return self.host_passes(obj, filter_properties)
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions File "/usr/lib/python2.7/dist-packages/nova/scheduler/filters/image_props_filter.py", line 78, in host_passes
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions image_props = spec.get('image', {}).get('properties', {})
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions AttributeError: 'NoneType' object has no attribute 'get'
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions
- 2013-07-10 15:07:44.979 32348 TRACE nova.api.openstack.compute.contrib.admin_actions
- 2013-07-10 15:07:44 INFO [nova.api.openstack.wsgi 673] [32348] HTTP exception thrown: Live migration of instance 6cd558d9-e924-4598-8e63-e86a20929bd9 to another host failed
原來問題出在調度上,日誌說的很明顯了,是在image_props_filter中出現異常,spec.get('image', {})返回了None,導致python異常。那麼spec.get('image', {})爲什麼返回None呢?從代碼追溯一下spec中的image屬性從何而來:
- if not instance_ref['image_ref']:
- image = None
- else:
- image = self.image_service.show(context,
- instance_ref['image_ref'])
- request_spec = {'instance_properties': instance_ref,
- 'instance_type': instance_type,
- 'instance_uuids': [instance_ref['uuid']],
- 'image': image}
3、問題解決
- nova live-migration 6cd558d9-e924-4598-8e63-e86a20929bd9 compute