共計(jì) 10287 個(gè)字符,預(yù)計(jì)需要花費(fèi) 26 分鐘才能閱讀完成。
這篇文章主要介紹 Newton 版 Openstack 創(chuàng)建云主機(jī)失敗怎么辦,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
1. 錯(cuò)誤背景
安裝了 N 版 Openstack Ha,在創(chuàng)建云主機(jī)時(shí)源選擇鏡像并創(chuàng)建新卷時(shí),云主機(jī)創(chuàng)建失敗。檢查發(fā)現(xiàn),卷其實(shí)創(chuàng)建成功了并且可用,可以通過創(chuàng)建的卷啟動(dòng)云主機(jī)。使用 cirros 測(cè)試鏡像,不會(huì)出現(xiàn)問題,使用 CentOS7.3 會(huì)出現(xiàn)這種報(bào)錯(cuò),不僅同時(shí)創(chuàng)建 2 個(gè),就連一次只創(chuàng)建一個(gè)也會(huì)報(bào)錯(cuò)。
2. 檢查日志
2017-06-06 09:30:28.513 665097 WARNING nova.virt.block_device [req-c5016b48-399b-44f8-adea-a86421f1e129 c49d86f8a39148bb809d2da44811ca3b f19126d9035d4209b363386e8e267129 - - -] Failed to delete volume: dd04f3d2-63cb-45f2-9a31-9ecc523bd4
0f due to Invalid input received: Invalid volume: Volume status must be available or error or error_restoring or error_extending and must not be migrating, attached, belong to a group or have snapshots. (HTTP 400) (Request-ID: req-0bd8e
4b4-6989-4c34-a623-20d2bff98816)
2017-06-06 09:30:28.514 665097 ERROR nova.compute.manager [req-c5016b48-399b-44f8-adea-a86421f1e129 c49d86f8a39148bb809d2da44811ca3b f19126d9035d4209b363386e8e267129 - - -] [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] Instance faile
d block device setup
2017-06-06 09:30:28.514 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] Traceback (most recent call last):
2017-06-06 09:30:28.514 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] File /usr/lib/python2.7/site-packages/nova/compute/manager.py , line 1586, in _prep_block_device
2017-06-06 09:30:28.514 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] wait_func=self._await_block_device_map_created)
2017-06-06 09:30:28.514 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] File /usr/lib/python2.7/site-packages/nova/virt/block_device.py , line 514, in attach_block_devices
2017-06-06 09:30:28.514 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] map(_log_and_attach, block_device_mapping)
2017-06-06 09:30:28.514 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] File /usr/lib/python2.7/site-packages/nova/virt/block_device.py , line 512, in _log_and_attach
2017-06-06 09:30:28.514 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] bdm.attach(*attach_args, **attach_kwargs)
2017-06-06 09:30:28.514 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] File /usr/lib/python2.7/site-packages/nova/virt/block_device.py , line 404, in attach
2017-06-06 09:30:28.514 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] self._call_wait_func(context, wait_func, volume_api, vol[ id])
2017-06-06 09:30:28.514 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] File /usr/lib/python2.7/site-packages/nova/virt/block_device.py , line 363, in _call_wait_func
2017-06-06 09:30:28.514 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] {volume_id : volume_id, exc : exc})
2017-06-06 09:30:28.514 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] File /usr/lib/python2.7/site-packages/oslo_utils/excutils.py , line 220, in __exit__
2017-06-06 09:30:28.514 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] self.force_reraise()
2017-06-06 09:30:28.514 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] File /usr/lib/python2.7/site-packages/oslo_utils/excutils.py , line 196, in force_reraise
2017-06-06 09:30:28.514 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] six.reraise(self.type_, self.value, self.tb)
2017-06-06 09:30:28.514 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] File /usr/lib/python2.7/site-packages/nova/virt/block_device.py , line 353, in _call_wait_func
2017-06-06 09:30:28.514 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] wait_func(context, volume_id)
2017-06-06 09:30:28.514 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] File /usr/lib/python2.7/site-packages/nova/compute/manager.py , line 1258, in _await_block_device_map_created
2017-06-06 09:30:28.514 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] volume_status=volume_status)
2017-06-06 09:30:28.514 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] VolumeNotCreated: Volume dd04f3d2-63cb-45f2-9a31-9ecc523bd40f did not finish being created even after we waited 189 seconds or 61
attempts. And its status is downloading.
2017-06-06 09:30:28.514 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94]
2017-06-06 09:30:28.638 665097 WARNING nova.scheduler.client.report [req-c5016b48-399b-44f8-adea-a86421f1e129 c49d86f8a39148bb809d2da44811ca3b f19126d9035d4209b363386e8e267129 - - -] No authentication information found for placement API
. Placement is optional in Newton, but required in Ocata. Please enable the placement service before upgrading.
2017-06-06 09:30:28.638 665097 WARNING nova.scheduler.client.report [req-c5016b48-399b-44f8-adea-a86421f1e129 c49d86f8a39148bb809d2da44811ca3b f19126d9035d4209b363386e8e267129 - - -] Unable to refresh my resource provider record
2017-06-06 09:30:28.639 665097 ERROR nova.compute.manager [req-c5016b48-399b-44f8-adea-a86421f1e129 c49d86f8a39148bb809d2da44811ca3b f19126d9035d4209b363386e8e267129 - - -] [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] Build of insta
nce 30e8a024-d1c0-4a64-aae7-a830e8c6be94 aborted: Block Device Mapping is Invalid.
2017-06-06 09:30:28.639 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] Traceback (most recent call last):
2017-06-06 09:30:28.639 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] File /usr/lib/python2.7/site-packages/nova/compute/manager.py , line 1783, in _do_build_and_run_instance
2017-06-06 09:30:28.639 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] filter_properties)
2017-06-06 09:30:28.639 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] File /usr/lib/python2.7/site-packages/nova/compute/manager.py , line 1943, in _build_and_run_instance
2017-06-06 09:30:28.639 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] create.error , fault=e)
2017-06-06 09:30:28.639 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] File /usr/lib/python2.7/site-packages/oslo_utils/excutils.py , line 220, in __exit__
2017-06-06 09:30:28.639 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] self.force_reraise()
2017-06-06 09:30:28.639 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] File /usr/lib/python2.7/site-packages/oslo_utils/excutils.py , line 196, in force_reraise
2017-06-06 09:30:28.639 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] six.reraise(self.type_, self.value, self.tb)
2017-06-06 09:30:28.639 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] File /usr/lib/python2.7/site-packages/nova/compute/manager.py , line 1908, in _build_and_run_instance
2017-06-06 09:30:28.639 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] block_device_mapping) as resources:
2017-06-06 09:30:28.639 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] File /usr/lib64/python2.7/contextlib.py , line 17, in __enter__
2017-06-06 09:30:28.639 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] return self.gen.next()
2017-06-06 09:30:28.639 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] File /usr/lib/python2.7/site-packages/nova/compute/manager.py , line 2071, in _build_resources
2017-06-06 09:30:28.639 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] reason=e.format_message())
2017-06-06 09:30:28.639 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] BuildAbortException: Build of instance 30e8a024-d1c0-4a64-aae7-a830e8c6be94 aborted: Block Device Mapping is Invalid.
2017-06-06 09:30:28.639 665097 ERROR nova.compute.manager [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94]
2017-06-06 09:30:29.364 665097 INFO nova.compute.manager [req-c5016b48-399b-44f8-adea-a86421f1e129 c49d86f8a39148bb809d2da44811ca3b f19126d9035d4209b363386e8e267129 - - -] [instance: 30e8a024-d1c0-4a64-aae7-a830e8c6be94] Took 0.72 secon
ds to deallocate network for instance.
3. 錯(cuò)誤分析:
底層存儲(chǔ) Ceph 創(chuàng)建新卷的時(shí)候速度太慢,導(dǎo)致 nova 連接卷超時(shí)或者超出連接次數(shù) 兩個(gè)解決辦法:一個(gè)是提高 ceph 讀寫速度(增加 ssd 作為 journal),條件不允許, 此方法作罷。另一個(gè)是尋找是否有相關(guān)參數(shù)設(shè)定連接時(shí)間或者連接次數(shù)。
4. 源碼查看
錯(cuò)誤信息中看到了_await_block_device_map_created 找到了對(duì)應(yīng)的函數(shù)
def _await_block_device_map_created(self, context, vol_id):
# TODO(yamahata): creating volume simultaneously
# reduces creation time?
# TODO(yamahata): eliminate dumb polling
start = time.time()
retries = CONF.block_device_allocate_retries
if retries 0:
LOG.warning(_LW( Treating negative config value (%(retries)s) for
block_device_retries as 0. ),
{retries : retries})
# (1) treat negative config value as 0
# (2) the configured value is 0, one attempt should be made
# (3) the configured value is 0, then the total number attempts
# is (retries + 1)
attempts = 1
if retries = 1:
attempts = retries + 1
for attempt in range(1, attempts + 1):
volume = self.volume_api.get(context, vol_id)
volume_status = volume[status]
if volume_status not in [creating , downloading]:
if volume_status == available :
return attempt
LOG.warning(_LW( Volume id: %(vol_id)s finished being
created but its status is %(vol_status)s. ),
{ vol_id : vol_id,
vol_status : volume_status})
break
greenthread.sleep(CONF.block_device_allocate_retries_interval)
raise exception.VolumeNotCreated(volume_id=vol_id,
seconds=int(time.time() - start),
attempts=attempt,
volume_status=volume_status)
有兩個(gè)參數(shù) block_device_allocate_retries 和 block_device_allocate_retries_interval,看名字可以知道一個(gè)是嘗試次數(shù),一個(gè)是嘗試間隔
5. 解決經(jīng)過
參數(shù)默認(rèn)值
block_device_allocate_retries_interval=3
block_device_allocate_retries=60
先修改間隔
block_device_allocate_retries_interval=10
重啟 nova-compute
systemctl restart openstack-nova-compute.service
再以同樣的方式創(chuàng)建一臺(tái)云主機(jī),發(fā)現(xiàn)可以創(chuàng)建成功。
以上是“Newton 版 Openstack 創(chuàng)建云主機(jī)失敗怎么辦”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道!