背景
本文更多的是基于代碼層面對(duì)openstack nova服務(wù)進(jìn)行簡(jiǎn)單概述的担孔。
概念
Nova是Openstack最核心的服務(wù)模塊眶蕉,負(fù)責(zé)管理和維護(hù)云計(jì)算環(huán)境的計(jì)算資源坊萝,負(fù)責(zé)整個(gè)云環(huán)境虛擬機(jī)生命周期的管理隶症。
Nova位于Openstack架構(gòu)的中心龙屉,其他服務(wù)或者組件(比如Glance呐粘、Cinder满俗、Neutron等)對(duì)它提供支持,另外它本身的架構(gòu)也比較復(fù)雜作岖,包括很多組件:
- API
- Compute Core
- DB
- Console Interface
- MQ
下面就這些組件及組件間如何協(xié)同工作來(lái)一一展開(kāi)唆垃,不過(guò)在介紹這些之前,我們有必要了解一下Nova的設(shè)計(jì)思想痘儡。
設(shè)計(jì)思路
其實(shí)辕万,這種架構(gòu)思路也是openstack的通用設(shè)計(jì)思路,比如cinder/neutron基本上也是采用這種設(shè)計(jì)思路來(lái)的沉删。
API
負(fù)責(zé)接收客戶(hù)端請(qǐng)求渐尿,nova-api 作為 Nova 組件對(duì)外的唯一窗口,向客戶(hù)暴露 Nova 能夠提供的功能矾瑰。當(dāng)客戶(hù)端需要執(zhí)行虛機(jī)操作砖茸,客戶(hù)端只能通過(guò)這些Rest API來(lái)完成,另外殴穴,這里的客戶(hù)端指的是終端用戶(hù)凉夯、命令行和 OpenStack 其他組件。
Nova Scheduler
當(dāng)上面API的請(qǐng)求可以在多臺(tái)實(shí)例或者節(jié)點(diǎn)上完成時(shí)采幌,Scheduler可以根據(jù)當(dāng)時(shí)的資源情況選擇最合適的實(shí)例或者節(jié)點(diǎn)來(lái)執(zhí)行請(qǐng)求劲够。
Worker
Nova Worker其實(shí)質(zhì)就是計(jì)算節(jié)點(diǎn)的nova-compute服務(wù),前面Scheduler負(fù)責(zé)分發(fā)任務(wù)休傍,而它則是負(fù)責(zé)執(zhí)行任務(wù)再沧。
Driver框架
在計(jì)算節(jié)點(diǎn)運(yùn)行虛機(jī),那必須要有Hypervisor來(lái)支持尊残,而計(jì)算節(jié)點(diǎn)會(huì)支持多種Hypervisor(包括KVM, Hyper-V, VMWare, Xen, Docker, LXC等)炒瘸,nova-compute為Hypervisor定義統(tǒng)一接口,只要這些hypervisor實(shí)現(xiàn)了這些接口寝衫,就可以 以driver 的形式即插即用到 OpenStack 中顷扩,這樣在技術(shù)上保持先進(jìn)性,具有很強(qiáng)的競(jìng)爭(zhēng)力慰毅,同時(shí)又不會(huì)造成廠商鎖定(Lock-in)隘截,具有很大的靈活和開(kāi)放性。
DB
通過(guò)數(shù)據(jù)庫(kù)來(lái)維護(hù)Nova虛機(jī)的狀態(tài)信息汹胃,比如MySQL會(huì)有Nova撞門(mén)的數(shù)據(jù)庫(kù)婶芭。
MQ
在openstack這樣的分布式系統(tǒng)中,一般程序的調(diào)用都是采用異步調(diào)用處理的着饥,而nova各組件間的協(xié)同工作是通過(guò)消息隊(duì)列來(lái)實(shí)現(xiàn)的犀农,默認(rèn)采用RabbitMQ。
一般工作流程
用戶(hù)發(fā)送一個(gè)nova http請(qǐng)求或者服務(wù)宰掉,通常都會(huì)遵循下面的流程:
大概解釋一下:
- 用戶(hù)發(fā)送http請(qǐng)求至nova api呵哨,nova api會(huì)把這個(gè)請(qǐng)求放到mq赁濒;
- nova scheduler從消息隊(duì)列里獲取到請(qǐng)求,開(kāi)始決定由哪個(gè)計(jì)算節(jié)點(diǎn)去執(zhí)行請(qǐng)求孟害,后把結(jié)果存放到消息隊(duì)列里拒炎;
- nova compute從消息隊(duì)列里知道了由哪個(gè)節(jié)點(diǎn)去執(zhí)行請(qǐng)求后,分派該節(jié)點(diǎn)去執(zhí)行用戶(hù)請(qǐng)求并返回結(jié)果至消息隊(duì)列挨务;
- 具體執(zhí)行過(guò)程中產(chǎn)生的一些中間態(tài)信息(比如虛機(jī)的運(yùn)行狀態(tài)击你、bdm信息等)通過(guò)nova conductor保存到數(shù)據(jù)庫(kù);
故障分析
當(dāng)我們實(shí)際在虛機(jī)上進(jìn)行操作時(shí)谎柄,可能會(huì)碰到各種各樣的問(wèn)題果漾,這時(shí)我們可以分析nova的日志來(lái)解決,一般情況下日志會(huì)存放到/var/log/nova/
目錄下邊谷誓,如果不夠詳盡绒障,我們還可以通過(guò)修改nova配置文件(/etc/nova/nova.conf
)打開(kāi)debug開(kāi)關(guān)來(lái)得到更詳細(xì)的日志信息。