這是 OpenStack 實施經驗分享系列的第 10 篇。
是軟件就會有 bug,OpenStack 也不例外,只要用它就必定會遇到故障。Troubleshooting(故障排除)是運維 OpenStack 等開源項目的重要技能,遇到問題後必定要藉助社區的力量定位、搜索、分析並解決問題。
下面 CloudMan 將分享一個真實的案例,還原當時 Troubleshooting 的過程,但願能給你們一些啓發。python
某天客戶的 OpenStack 忽然全線癱瘓:任何操做都沒法正常完成,一直處於正在執行狀態,界面上也不報錯,就是沒法完成操做。git
這是一個全局性的問題,首先查看 nova 日誌,無報錯,再看 MySQL 和 RabbitMQ 日誌,在 RabbitMQ 中發現大量重複報錯:github
一直報 reply_529af7a7c3784c2d9dc5e72c603024a5 這個 exchange 找不到。 這些 reply_XXX 的都是 OpenStack 本身維護的,以前運行得好好的,爲何忽然找不到,應該是發生了異常,跟配置沒有關係,估計是 bug。
先 google 一下吧。搜索技術問題,google 是首選,翻不了牆就用 bing,度娘嘛仍是讓她專一中文吧 :-)運維
這裏貼出 bing 的搜索結果:python2.7
看上去第二個比較靠譜,點進去發現跟咱們的狀況徹底同樣,並且還提到一個相關 bug。google
瀏覽一下 bug 的內容,確實是咱們遇到的問題,這是一個 oslo.messaging 的 bug,並且已經 fix 了。spa
由於客戶 OpenStack 版本是 kilo, 因此點擊 kilo 對應的 review 連接看看 fix 都修改了哪些地方。日誌
一共改了兩個文件,點開 amqpdriver.py 的連接,能夠看到 diff。get
對比客戶系統 /usr/local/lib/python2.7/dist-packages/oslo_messaging/_drivers/amqpdriver.py 文件內容,確實是 fix 以前的版本。it
問題肯定了,解決辦法也有了:更新 olso.messageing 包。
OpenStack 的源代碼是在 github 上維護的,每一個模塊有本身的 repository。 oslo.messageing 的項目主頁是 https://github.com/openstack/oslo.messaging
由於咱們目前的版本是 kilo,因此要找 oslo.messaging 在 kilo 上的最新版本。
在 Tags 中,咱們看到有 kilo-eol,eol 的意思是 「end of life」,是 kilo 的最終版本了。
能夠再次確認,kilo-eol 確實包含了咱們想要的 fix。後面的工做就很直接了:
下載 oslo.messaging 代碼庫。
安裝 kilo-eol 版本。
重啓相關 OpenStack 相關服務。
下節咱們會詳細討論如何更新 OpenStack 組件。
因爲 oslo.messaging 是基礎組件,幾乎全部服務都會用到,因此不得不更新每個節點並重啓 OpenStack。工做量雖然大些,但問題終於解決了。