天天看點

Nova 元件如何協同工作 - 每天5分鐘玩轉 OpenStack(24)

Nova 元件如何協同工作 - 每天5分鐘玩轉 OpenStack(24)

Nova 實體部署方案

前面大家已經看到 Nova 由很多子服務組成,同時我們也知道 OpenStack 是一個分布式系統,可以部署到若幹節點上,那麼接下來大家可能就會問: Nova 的這些服務在實體上應該如何部署呢?

對于 Nova,這些服務會部署在兩類節點上:計算節點和控制節點。 計算節點上安裝了 Hypervisor,上面運作虛拟機。 由此可知: 1. 隻有 nova-compute 需要放在計算節點上。 2. 其他子服務則是放在控制節點上的。

下面我們可以看看實驗環境的具體部署情況。 通過在計算節點和控制節點上運作 ps -elf|grep nova 來檢視運作的 nova 子服務

計算節點

Nova 元件如何協同工作 - 每天5分鐘玩轉 OpenStack(24)

計算節點 devstack-compute1 上隻運作了 nova-compute 子服務

控制節點

Nova 元件如何協同工作 - 每天5分鐘玩轉 OpenStack(24)

控制節點 devstack-controller 上運作了若幹 nova-* 子服務

Nova 元件如何協同工作 - 每天5分鐘玩轉 OpenStack(24)

RabbitMQ 和 MySQL 也是放在控制節點上的

可能細心的同學已經發現我們的控制節點上也運作了 nova-compute。 這實際上也就意味着 devstack-controller 既是一個控制節點,同時也是一個計算節點,也可以在上面運作虛機。

這也向我們展示了 OpenStack 這種分布式架構部署上的靈活性: 可以将所有服務都放在一台實體機上,作為一個 All-in-One 的測試環境; 也可以将服務部署在多台實體機上,獲得更好的性能和高可用。

另外,也可以用 nova service-list 檢視 nova-* 子服務都分布在哪些節點上

Nova 元件如何協同工作 - 每天5分鐘玩轉 OpenStack(24)

從虛機建立流程看 nova-* 子服務如何協同工作

從學習 Nova 的角度看,虛機建立是一個非常好的場景,涉及的 nova-* 子服務很全,下面是流程圖。

Nova 元件如何協同工作 - 每天5分鐘玩轉 OpenStack(24)
  1. 客戶(可以是 OpenStack 最終使用者,也可以是其他程式)向 API(nova-api)發送請求:“幫我建立一個虛機”
  2. API 對請求做一些必要處理後,向 Messaging(RabbitMQ)發送了一條消息:“讓 Scheduler 建立一個虛機”
  3. Scheduler(nova-scheduler)從 Messaging 擷取到 API 發給它的消息,然後執行排程算法,從若幹計算節點中選出節點 A
  4. Scheduler 向 Messaging 發送了一條消息:“在計算節點 A 上建立這個虛機”
  5. 計算節點 A 的 Compute(nova-compute)從 Messaging 中擷取到 Scheduler 發給它的消息,然後在本節點的 Hypervisor 上啟動虛機。

繼續閱讀