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