您好,登錄后才能下訂單哦!
作為XenServer的管理工具集,XAPI管理XenServer的主機(jī),網(wǎng)絡(luò)和存儲。不管是OpenStack還是CloudStack,如果使用XenServer作為虛擬化底層,其對XenServer的調(diào)用必然使用XAPI。真正意義上的XAPI在XenServer中主要提供XenCenter以及資源池中各個(gè)XenServer主機(jī)的通信的接口。
首先,資源池中的所有XenServer主機(jī)的操作請求都是通過XAPI傳遞給Dom0的,同時(shí)在池中的所有XenServer主機(jī)間的通信也是通過XPAI進(jìn)行傳遞。例如:資源池中數(shù)據(jù)庫(XenServer配置數(shù)據(jù)庫)會通過XAPI在所有的XenServer主機(jī)之間進(jìn)行同步,以便在資源池Master宕機(jī)之后,其他XenServer主機(jī)能夠正確而迅速的取代Master,并維持資源池的功能和服務(wù)。其簡要示意圖如下所示:
如上圖所示,在創(chuàng)建XenServer資源池的時(shí)候,默認(rèn)會選定一臺XenServer主機(jī)作為Master,即所謂的資源池主。Master的作用是協(xié)調(diào)和鎖定資源池內(nèi)的各種資源。默認(rèn)情況下在創(chuàng)建資源池的時(shí)候,加入資源池的第一臺XenServer主機(jī)被默認(rèn)推選為Master。當(dāng)資源池的Master主機(jī)出現(xiàn)故障不在可用時(shí),Master是可以進(jìn)行角色轉(zhuǎn)移的。其轉(zhuǎn)移的情況有兩種:一是進(jìn)行手動轉(zhuǎn)移,二是在開啟資源池高可用的情況下進(jìn)行自動轉(zhuǎn)移。
在一個(gè)資源池中雖然所所有的XenServer主機(jī)都有XAPI,并在XML / RPC接口上運(yùn)行了HTTP 80端口和TLS / SSL的443端口,但控制操作只會在Master主機(jī)上進(jìn)行處理。如果將一個(gè)控制操作指令發(fā)送給資源池的Slave主機(jī),Slave主機(jī)上的XAPI將會將該控制指令重定向到Master主機(jī),并且Slave主機(jī)上的XAPI將會產(chǎn)生一個(gè)XAPI重定向的錯(cuò)誤消息并將其存儲在日志中。為了提高效率以下操作被允許在Slave主機(jī)進(jìn)行:
查詢性能計(jì)數(shù)器(以及主機(jī)的歷史)
連接到VNC控制臺
導(dǎo)入/導(dǎo)出(特別是本地存儲上的磁盤時(shí))
由于Master主機(jī)充當(dāng)協(xié)調(diào)和鎖管理器,其他主機(jī)在需要調(diào)用資源的時(shí)候就會經(jīng)常和Master產(chǎn)生大量的交互。當(dāng)然Slave主機(jī)之間也會進(jìn)行彼此的交互,比如說:
轉(zhuǎn)移VM的內(nèi)存映像(虛擬機(jī)遷移)
鏡像磁盤(存儲遷移)
其次,XenCenter通過XAPI來讀取XenServer主機(jī)的配置、管理、License信息、數(shù)據(jù)庫信息等,同時(shí)XAPI也通過和上篇文章我們所講述的XenServer核心運(yùn)行的toolstack系列工具,包括如Xenopsd、Xcp-rrdd、Xcp-networkd、SM、perfmon、mpathalert、snapwatchd、stunnel、xenconsoled和xenstored等所有的組件進(jìn)行交互,這些組件通過和XAPI進(jìn)行通信并監(jiān)控XAPI的命令接口,根據(jù)XAPI發(fā)送過來的命令執(zhí)行相應(yīng)的功能控制。
下圖顯示了一臺XenServer主機(jī)上運(yùn)行的軟件。所有的主機(jī)上運(yùn)行相同的軟件。我們可以看到XAPI和其他的Toolstack所處的一個(gè)關(guān)系。
下面的關(guān)系圖顯示了xapi內(nèi)部運(yùn)行關(guān)系及架構(gòu):
圖的頂部顯示連接XenAPI客戶端:XenCenter、XenOrchestra、OpenStack以及CloudStack。這些客戶端都是通過XenAPI(XenAPI的XMLRPC通過HTTP POST)和HTTP GET/PUT在端口80和443與XAPI建立通訊。并且雙方之間建立互信是通過使用PAM認(rèn)證(默認(rèn)情況下使用本地passwd和group文件)或通過Active Directory進(jìn)行認(rèn)證。
其中XAPI中的Xen API又細(xì)分為三類:
* master-only:這是最重要的API也是最常用的API類型,顧名思義,這種類型的API只有Master能夠接受并進(jìn)行執(zhí)行。
* normally-local:這些API是為了提高性能的前提下,允許Slave主機(jī)執(zhí)行的特殊API,其往往和主機(jī)以及虛擬機(jī)的性能相關(guān)。如磁盤輸入/輸出和虛擬機(jī)控制臺連接這些接口控制的API,這些API直接有Slave主機(jī)在本地就進(jìn)行控制執(zhí)行,不需要再有Master記下來轉(zhuǎn)發(fā),提高了訪問速度和性能。
* emergency:這些API歸類為緊急情況下的API處理方案,例如當(dāng)Master主機(jī)脫機(jī)的情況下,對資源池的緊急修復(fù)等。
對于API的執(zhí)行,在資源池正常的情況下,XAPI會首先判斷API的類型。如果用戶在XenCenter中對Slave的操作是需要通過Master來執(zhí)行的API,那么Slave主機(jī)的XAPI就會將該API重定向到Master主機(jī),交由Master主機(jī)進(jìn)行執(zhí)行控制。在確認(rèn)了API類型之后,即通過了初步檢查,API調(diào)用就會進(jìn)入“消息轉(zhuǎn)發(fā)”層—控制、鎖定資源(通過current_operations機(jī)制) - 決定哪些主機(jī)應(yīng)該執(zhí)行該請求。如果請求是在本地執(zhí)行,主機(jī)直接調(diào)用函數(shù)或者進(jìn)程使用功能即可;否則消息轉(zhuǎn)發(fā)層就會將該請求同步給其他需要一同執(zhí)行的主機(jī)上。
注:XAPI目前使用“每個(gè)請求一個(gè)獨(dú)立線程”的模式,導(dǎo)致將為每個(gè)請求創(chuàng)建一個(gè)完整的POSIX線程。甚至當(dāng)這個(gè)請求在這臺主機(jī)上創(chuàng)建后被轉(zhuǎn)發(fā)給其他的主機(jī),這個(gè)創(chuàng)建的線程仍然存在在第一次被創(chuàng)建的主機(jī)上,毫無疑問,這種模式的弊端必然是在請求數(shù)量較多時(shí),導(dǎo)致XenServer主機(jī)的處理阻塞,影響虛擬機(jī)的性能。
接下來API具體如何執(zhí)行調(diào)用呢?如果XenAPI的調(diào)用是關(guān)于VM生命周期操作,那么它將會通過JSON-RPC(類似Unix域套接字)轉(zhuǎn)換成具體的負(fù)責(zé)VM生命周期管理的組件Xenopsd 的API調(diào)用。XAPI和Xenopsd組件之間,對于每一個(gè)調(diào)用采用類似異步消息隊(duì)列的概念,XAPI的每一個(gè)調(diào)用不需要Xenopsd立即返回執(zhí)行結(jié)果。所以目前XAPI將每一個(gè)任務(wù)(所有操作在任務(wù)的上下文中運(yùn)行)都綁定到Xenopsd任務(wù)上,XAPI在接受到調(diào)用時(shí)將其所對應(yīng)的任務(wù)扔給對應(yīng)綁定的Xenopsd之后就不在過問了。具體有無執(zhí)行成功需要等待Xenopsd給它的反饋,所以我們在XenCenter中執(zhí)行一個(gè)命令之后看見任務(wù)的進(jìn)度條在走,但是什么時(shí)候走完進(jìn)度條需要底層的執(zhí)行組件給XAPI反聵,XAPI再其狀態(tài)更新在狀態(tài)數(shù)據(jù)庫中,XenCenter會與XAPI進(jìn)行不斷的通訊以收取狀態(tài)更新。如果Xenopsd組件執(zhí)行命令出錯(cuò),會返回相應(yīng)的錯(cuò)誤信息并存儲在日志中。
如果XenAPI的調(diào)用是存儲操作,那么“存儲訪問”層 -- 驗(yàn)證存儲對象處于正確的狀態(tài)(SR連接/分離;VDI連接/活動狀態(tài)、只讀/讀寫),然后調(diào)用存儲管理API(SMAPI)V2接口中的相關(guān)操作;同時(shí)其中還存在著一個(gè)SMAPIv2到SMAPIv1轉(zhuǎn)換器,可以生成必要的命令去跟SMAPIv1插件(EXT,NFS,LVM等)并執(zhí)行它這些插件支持的存儲類型。
在對存儲進(jìn)行API調(diào)用的時(shí)候,其都是屬于Master類型的API調(diào)用,其Slave主機(jī)是沒有權(quán)限對磁盤進(jìn)行執(zhí)行操作的。因此在內(nèi)部,SMAPIv1插件使用特權(quán)訪問XAPI的數(shù)據(jù)庫,會將被視為只讀權(quán)限的客戶端直接設(shè)置只讀字段屬性(例如VDI.virtual_size)。同時(shí)由于共享的存儲同時(shí)在資源池內(nèi)被多個(gè)主機(jī)進(jìn)行訪問,為了保證數(shù)據(jù)的安全性,只能允許同一時(shí)刻只有一臺主機(jī)對其進(jìn)行對其進(jìn)行訪問。因此該SMAPIv1插件還協(xié)同XAPI對存儲的訪問進(jìn)行控制,其采用共享存儲常用的鎖機(jī)制來對多臺訪問共享存儲的主機(jī)進(jìn)行控制。
XAPI的數(shù)據(jù)庫包含主機(jī)和虛擬機(jī)元數(shù)據(jù)和資源池信息。該數(shù)據(jù)庫被資源池的Master主機(jī)將其副本加載到內(nèi)存中,與資源池的其他所有Slave進(jìn)行共享,其他Slave主機(jī)通過遠(yuǎn)程的方式訪問該數(shù)據(jù)庫,同時(shí)將其同步到本地主機(jī)。數(shù)據(jù)庫將每個(gè)API對象所實(shí)現(xiàn)的event.next和event.from的存儲在數(shù)據(jù)庫中。在接收到數(shù)據(jù)后是以XML格式并且是異步刷新的方式存儲到磁盤中的。如果“重做日志”被啟用,那么所有數(shù)據(jù)庫的寫入數(shù)據(jù)會被同步以增量的方式存儲到給出的共享的塊設(shè)備中。如果沒有啟用重做日志,那么XAPI在重啟之后,就可能會丟失最近的更新。
同時(shí)XAPI還在資源池內(nèi)實(shí)現(xiàn)主機(jī)的高可用。高可用性是在資源池內(nèi)當(dāng)其中的一臺主機(jī)發(fā)生故障時(shí),還能保證資源池內(nèi)的正常運(yùn)行意以外,還保證出現(xiàn)故障的主機(jī)上運(yùn)行的虛擬機(jī)在其他主機(jī)上重啟。 XAPI和名為xhad的組件進(jìn)行緊密集成,實(shí)現(xiàn)XenServer資源池的高可用。Xhad是一個(gè)主機(jī)活躍度監(jiān)視器。當(dāng)xhad確認(rèn)主機(jī)發(fā)生故障時(shí)(其通過監(jiān)視超時(shí)時(shí)間和主機(jī)與存儲等該設(shè)備的連接狀態(tài)來判斷),那么XAPI將重新啟動出現(xiàn)故障并且已被HA標(biāo)記為 “受保護(hù)”的虛擬機(jī)。 XAPI還可以限制資源利用,以防止資源池變得過于超載,以應(yīng)對有多個(gè)主機(jī)故障時(shí)沒有資源運(yùn)行HA。
最后XAPI還承載了實(shí)現(xiàn)XE CLI的任務(wù),其XE執(zhí)行效率和XAPI直接關(guān)聯(lián)。XE程序遠(yuǎn)程控制訪問XAPI命令行,XAPI則根據(jù)返回一Shell界面,顯示系列簡單的命令(提示輸入;打印屏幕;取文件;退出等等)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。