溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

XenServer架構(gòu)之XAPI

發(fā)布時(shí)間:2020-06-28 10:02:35 來源:網(wǎng)絡(luò) 閱讀:2422 作者:tasnrh 欄目:數(shù)據(jù)庫

一、XAPI對資源池的管理

作為XenServer的管理工具集,XAPI管理XenServer的主機(jī),網(wǎng)絡(luò)和存儲。不管是OpenStack還是CloudStack,如果使用XenServer作為虛擬化底層,其對XenServer的調(diào)用必然使用XAPI。真正意義上的XAPIXenServer中主要提供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ù)。其簡要示意圖如下所示:

XenServer架構(gòu)之XAPI

 如上圖所示,在創(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 / SSL443端口,但控制操作只會在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系列工具,包括如XenopsdXcp-rrdd、Xcp-networkdSM、perfmon、mpathalertsnapwatchd、stunnel、xenconsoledxenstored等所有的組件進(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)系。

XenServer架構(gòu)之XAPI

 

二、XAPI架構(gòu)及運(yùn)行機(jī)制解析

下面的關(guān)系圖顯示了xapi內(nèi)部運(yùn)行關(guān)系及架構(gòu):

XenServer架構(gòu)之XAPI

圖的頂部顯示連接XenAPI客戶端:XenCenterXenOrchestra、OpenStack以及CloudStack。這些客戶端都是通過XenAPI(XenAPIXMLRPC通過HTTP POST)和HTTP GET/PUT在端口80443XAPI建立通訊。并且雙方之間建立互信是通過使用PAM認(rèn)證(默認(rèn)情況下使用本地passwdgroup文件)或通過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)用。XAPIXenopsd組件之間,對于每一個(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)用存儲管理APISMAPIV2接口中的相關(guān)操作;同時(shí)其中還存在著一個(gè)SMAPIv2SMAPIv1轉(zhuǎn)換器,可以生成必要的命令去跟SMAPIv1插件(EXTNFS,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.nextevent.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界面,顯示系列簡單的命令(提示輸入;打印屏幕;取文件;退出等等)。


向AI問一下細(xì)節(jié)

免責(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)容。

AI