專利名稱:一種虛擬機(jī)負(fù)載均衡方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信技術(shù)領(lǐng)域,特別涉及一種虛擬機(jī)負(fù)載均衡方法和裝置。
技術(shù)背景
隨著計(jì)算機(jī)、網(wǎng)絡(luò)等各種技術(shù)的日趨發(fā)展,網(wǎng)絡(luò)中聚合了各種計(jì)算資源、存儲(chǔ)資源、數(shù)據(jù)資源、軟件資源以及服務(wù)資源等,采用虛擬主機(jī)技術(shù)可以更加有效地整合這些分散的各種資源,實(shí)現(xiàn)資源共享和有效利用,降低能耗。
由于各物理主機(jī)處理能力的差異以及各應(yīng)用程序的不確定性,導(dǎo)致了虛擬計(jì)算環(huán)境中各物理主機(jī)或虛擬機(jī)的負(fù)載失衡,即有些物理主機(jī)或虛擬機(jī)的資源利用率很高,導(dǎo)致該物理主機(jī)或虛擬機(jī)的資源被耗盡,而有些物理主機(jī)或虛擬機(jī)的資源利用率很低,甚至被閑置,沒(méi)有得到有效地利用。因此,如何協(xié)調(diào)不同物理主機(jī)和虛擬主機(jī)的負(fù)載,維持高效的資源使用率,是虛擬計(jì)算環(huán)境中一個(gè)關(guān)健問(wèn)題。
現(xiàn)有的虛擬機(jī)負(fù)載均衡方法,一般是在物理主機(jī)和虛擬機(jī)上安裝專門的代理,通過(guò)代理搜集物理主機(jī)和虛擬機(jī)上的負(fù)載信息,一般僅考慮物理主機(jī)或虛擬機(jī)上的CPU負(fù)載情況,并通過(guò)代理來(lái)執(zhí)行調(diào)度指令。
現(xiàn)有技術(shù)中至少存在如下缺點(diǎn)需要在物理主機(jī)和虛擬機(jī)上安裝專門的代理,由于虛擬機(jī)運(yùn)行在不同的管理程序(hypervisor)上,如Xen、Hyper_V、VMware等,且運(yùn)行在虛擬機(jī)之上的操作系統(tǒng)也是多樣的,如linux、windows等,如果在每個(gè)虛擬機(jī)上安裝代理,不同操作系統(tǒng)或同一操作系統(tǒng)的不同版本都需要各自的代理版本,其開(kāi)發(fā)和維護(hù)代價(jià)較大; 而且現(xiàn)有實(shí)現(xiàn)僅僅考慮物理主機(jī)和虛擬機(jī)的CPU負(fù)載忽略了其他影響虛擬機(jī)負(fù)載均衡的因素。發(fā)明內(nèi)容
有鑒于此,本發(fā)明提供一種虛擬機(jī)負(fù)載均衡方法和裝置,能夠在降低開(kāi)發(fā)復(fù)雜性和成本的情況下,實(shí)現(xiàn)虛擬機(jī)的負(fù)載均衡。
為解決上述技術(shù)問(wèn)題,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的
一種虛擬機(jī)負(fù)載均衡方法,周期監(jiān)測(cè)各物理主機(jī)及虛擬機(jī)的負(fù)載信息,并根據(jù)所述負(fù)載信息分別計(jì)算各物理主機(jī)及各物理主機(jī)上運(yùn)行的虛擬機(jī)的負(fù)載因子,所述方法包括
獲取任一物理主機(jī)最近連續(xù)預(yù)設(shè)次數(shù)負(fù)載指數(shù),若該物理主機(jī)的所述預(yù)設(shè)次數(shù)負(fù)載指數(shù)都大于第一預(yù)設(shè)閾值,則獲取該物理主機(jī)上的所有當(dāng)前運(yùn)行的虛擬機(jī)的最近一次負(fù)載指數(shù),并根據(jù)各虛擬機(jī)的預(yù)設(shè)親和因子和其最近一次負(fù)載指數(shù)確定待遷移的虛擬機(jī),其中,所述預(yù)設(shè)親和因子表示虛擬機(jī)對(duì)自身所在物理主機(jī)的依賴程度;
獲取各物理主機(jī)最近一次負(fù)載指數(shù),確定負(fù)載指數(shù)最小且負(fù)載指數(shù)小于第二預(yù)設(shè)閾值的物理主機(jī)作為虛擬機(jī)遷移的目的物理主機(jī),其中,所述第二預(yù)設(shè)閾值小于所述第二預(yù)設(shè)閾值;
將所述待遷移虛擬機(jī)遷移至所述目的物理主機(jī)。
一種虛擬機(jī)負(fù)載均衡裝置,該裝置包括配置單元、監(jiān)測(cè)單元、計(jì)算單元、第一獲取確定單元、第二獲取確定單元、第三獲取確定單元和遷移單元;
所述配置單元,用于設(shè)置監(jiān)測(cè)周期、預(yù)設(shè)次數(shù),各虛擬機(jī)的預(yù)設(shè)親和因子,第一預(yù)設(shè)閾值,第二預(yù)設(shè)閾值,其中,所述第二預(yù)設(shè)閾值小于所述第一預(yù)設(shè)閾值;
所述監(jiān)測(cè)單元,用于根據(jù)所述配置單元設(shè)置的監(jiān)測(cè)周期監(jiān)測(cè)各物理主機(jī)及各物理主機(jī)上運(yùn)行的虛擬機(jī)的負(fù)載信息;
所述計(jì)算單元,用于根據(jù)所述監(jiān)測(cè)單元監(jiān)測(cè)的負(fù)載信息計(jì)算各物理主機(jī)及各物理主機(jī)上運(yùn)行的虛擬機(jī)的負(fù)載因子;
所述第一獲取確定單元,用于獲取所述計(jì)算單元計(jì)算的任一物理主機(jī)最近連續(xù)所述配置單元設(shè)置的預(yù)設(shè)次數(shù)負(fù)載指數(shù),確定該物理主機(jī)的所述預(yù)設(shè)次數(shù)負(fù)載指數(shù)都大于所述配置單元設(shè)置的第一預(yù)設(shè)閾值;
所述第二獲取確定單元,用于當(dāng)所述第一獲取單元確定該物理主機(jī)的所述預(yù)設(shè)次數(shù)負(fù)載指數(shù)都大于第一預(yù)設(shè)閾值時(shí),獲取所述計(jì)算單元計(jì)算的該物理主機(jī)上的所有當(dāng)前運(yùn)行的虛擬機(jī)的最近一次負(fù)載指數(shù),并根據(jù)所述配置單元設(shè)置的各虛擬機(jī)的預(yù)設(shè)親和因子和其最近一次負(fù)載指數(shù)確定待遷移的虛擬機(jī),其中,所述預(yù)設(shè)親和因子表示虛擬機(jī)對(duì)自身所在物理主機(jī)的依賴程度;
所述第三獲取確定單元,用于當(dāng)所述第一獲取單元確定該物理主機(jī)的所述預(yù)設(shè)次數(shù)負(fù)載指數(shù)都大于第一預(yù)設(shè)閾值時(shí),獲取所述計(jì)算單元計(jì)算的各物理主機(jī)最近一次負(fù)載指數(shù),確定負(fù)載指數(shù)最小且負(fù)載指數(shù)小于所述配置單元設(shè)置的第二預(yù)設(shè)閾值的物理主機(jī)作為待遷移虛擬機(jī)遷移的目的物理主機(jī);
所述遷移單元,用于將所述第二獲取確定單元確定的待遷移虛擬機(jī)遷移至所述第三獲取確定單元確定的目的物理主機(jī)。
綜上所述,本發(fā)明通過(guò)周期監(jiān)測(cè)各物理主機(jī)和各物理主機(jī)上運(yùn)行的虛擬機(jī)的負(fù)載信息,結(jié)合虛擬機(jī)與其所在物理主機(jī)的預(yù)設(shè)親和因子,確定哪個(gè)物理主機(jī)上的虛擬機(jī)需要遷移到哪個(gè)相對(duì)空閑的物理主機(jī)上。能夠在降低開(kāi)發(fā)復(fù)雜性和成本的情況下,實(shí)現(xiàn)虛擬機(jī)的負(fù)載均衡。
圖1為本發(fā)明實(shí)施例中實(shí)現(xiàn)虛擬機(jī)負(fù)載均衡流程示意圖2為本發(fā)明具體實(shí)施例中實(shí)現(xiàn)虛擬機(jī)負(fù)載均衡的裝置結(jié)構(gòu)示意圖。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下參照附圖并舉實(shí)施例,對(duì)本發(fā)明所述方案作進(jìn)一步地詳細(xì)說(shuō)明。
參見(jiàn)圖1,圖1為本發(fā)明實(shí)施例中實(shí)現(xiàn)虛擬機(jī)負(fù)載均衡流程示意圖。具體步驟為
步驟101,虛擬機(jī)管理平臺(tái)周期監(jiān)測(cè)各物理主機(jī)及各物理主機(jī)上運(yùn)行的虛擬機(jī)的負(fù)載信息,并根據(jù)負(fù)載信息分別計(jì)算各物理主機(jī)及虛擬機(jī)的負(fù)載因子。
本步驟中根據(jù)負(fù)載信息分別計(jì)算各物理主機(jī)和虛擬機(jī)的負(fù)載因子的方法為根據(jù)IO吞吐量確定IO吞吐量因子,并分別對(duì)CPU利用率、內(nèi)存使用率和IO吞吐量因子進(jìn)行加權(quán)計(jì)算負(fù)載因子,其中,負(fù)載信息包括CPU利用率、內(nèi)存使用率和IO吞吐量。
根據(jù)IO吞吐量確定IO吞吐量因子的方法為在監(jiān)測(cè)到的各物理主機(jī)的IO吞吐量中,選擇出值最大的IO吞吐量,則各物理主機(jī)的IO吞吐量因子為自身的IO吞吐量與最大的IO吞吐量的比值;在監(jiān)測(cè)到的任一物理主機(jī)的各虛擬機(jī)的IO吞吐量中,選擇出值最大的 IO吞吐量,則該物理主機(jī)的各虛擬機(jī)的IO吞吐量因子為自身的IO吞吐量與最大的IO吞吐量的比值。
在上述的虛擬機(jī)的IO吞吐量因子計(jì)算中,是各物理主機(jī)的虛擬機(jī)分別計(jì)算的,即最大IO吞吐量不是所有虛擬機(jī)的最大IO吞吐量,而是同一物理主機(jī)的各虛擬機(jī)中的最大 IO吞吐量。
本步驟是周期執(zhí)行的,并不是一直都在步驟102之前執(zhí)行。
步驟102,虛擬機(jī)管理平臺(tái)獲取任一物理主機(jī)最近連續(xù)預(yù)設(shè)次數(shù)負(fù)載指數(shù),若該物理主機(jī)的預(yù)設(shè)次數(shù)負(fù)載指數(shù)都大于第一預(yù)設(shè)閾值,則獲取該物理主機(jī)上的所有當(dāng)前運(yùn)行的虛擬機(jī)的最近一次負(fù)載指數(shù),并根據(jù)各虛擬機(jī)的預(yù)設(shè)親和因子和其最近一次負(fù)載指數(shù)確定待遷移的虛擬機(jī)。
本步驟中預(yù)設(shè)親和因子表示虛擬機(jī)對(duì)自身所在物理主機(jī)的依賴程度。根據(jù)各虛擬機(jī)的預(yù)設(shè)親和因子和其最近一次負(fù)載指數(shù)確定待遷移的虛擬機(jī)的方法為根據(jù)各虛擬機(jī)的預(yù)設(shè)親和因子對(duì)各虛擬機(jī)的最近一次負(fù)載指數(shù)加權(quán),將加權(quán)后值最大的虛擬機(jī)作為待遷移的虛擬機(jī)。由此可知本發(fā)明決定是否遷移一個(gè)虛擬機(jī),不僅考慮該虛擬機(jī)的負(fù)載因子,還要考慮該虛擬機(jī)對(duì)自身所在物理主機(jī)的依賴程度。對(duì)于預(yù)設(shè)親和因子的設(shè)置以及通過(guò)預(yù)設(shè)親和因子對(duì)負(fù)載指數(shù)如何加權(quán),使用者可以根據(jù)具體應(yīng)用情況而定。
步驟103,虛擬機(jī)管理平臺(tái)獲取各物理主機(jī)最近一次負(fù)載指數(shù),確定負(fù)載指數(shù)最小且負(fù)載指數(shù)小于第二預(yù)設(shè)閾值的物理主機(jī)作為虛擬機(jī)遷移的目的物理主機(jī)。
本步驟中的第二預(yù)設(shè)閾值小于步驟102中第一預(yù)設(shè)閾值。
步驟104,虛擬機(jī)管理平臺(tái)將待遷移虛擬機(jī)遷移至目的物理主機(jī)。
當(dāng)新增虛擬機(jī)時(shí),虛擬機(jī)管理平臺(tái)獲取各物理主機(jī)最近一次負(fù)載指數(shù),選擇負(fù)載指數(shù)最小的物理主機(jī),并在該物理主機(jī)上新增虛擬機(jī)。
本發(fā)明實(shí)施例中對(duì)各物理主機(jī)上運(yùn)行的虛擬機(jī)進(jìn)行監(jiān)測(cè),若該虛擬機(jī)未運(yùn)行則無(wú)法監(jiān)測(cè)其進(jìn)程,無(wú)法獲取其負(fù)載信息。
下面舉具體實(shí)施例來(lái)詳細(xì)說(shuō)明本發(fā)明是如何實(shí)現(xiàn)虛擬機(jī)負(fù)載均衡的。
虛擬機(jī)管理平臺(tái)需設(shè)置監(jiān)測(cè)物理主機(jī)和虛擬機(jī)的監(jiān)測(cè)周期,即多長(zhǎng)時(shí)間對(duì)物理主機(jī)和虛擬機(jī)執(zhí)行一次負(fù)載監(jiān)測(cè)動(dòng)作。若不設(shè)置默認(rèn)該周期為5分鐘。為各虛擬機(jī)設(shè)置一個(gè)親和因子,表示虛擬機(jī)對(duì)自身所在物理主機(jī)的依賴性。具體實(shí)現(xiàn)可以設(shè)親和因子為0到1 之間的百分?jǐn)?shù)。通常情況下不允許遷移。設(shè)置第一預(yù)設(shè)閾值,用于觸發(fā)負(fù)載均衡操作,即觸發(fā)虛擬機(jī)動(dòng)態(tài)遷移;設(shè)置第二預(yù)設(shè)閾值,用于確定物理主機(jī)是否允許其他虛擬機(jī)遷入。
虛擬機(jī)管理平臺(tái)周期性地對(duì)各物理主機(jī)及各物理主機(jī)上的虛擬機(jī)進(jìn)行監(jiān)測(cè),分別獲取其監(jiān)測(cè)結(jié)果,即負(fù)載信息,包括CPU利用率、內(nèi)存利用率、IO吞吐量等。
虛擬機(jī)管理平臺(tái)監(jiān)測(cè)各物理主機(jī)時(shí)可以使用python腳本通過(guò)ssh遠(yuǎn)程執(zhí)行相關(guān)統(tǒng)計(jì)命令來(lái)實(shí)現(xiàn),比如在Iinux上可以使用命令top/iostat等命令。
虛擬機(jī)管理平臺(tái)監(jiān)測(cè)虛擬機(jī)時(shí),運(yùn)行在物理主機(jī)上的各虛擬機(jī)實(shí)質(zhì)上是通過(guò)該物理主機(jī)的一個(gè)進(jìn)程來(lái)模擬的,因此可以使用python腳本通過(guò)安全框架(secure shell, ssh)遠(yuǎn)程執(zhí)行相關(guān)統(tǒng)計(jì)命令從該虛擬機(jī)所在物理主機(jī)的對(duì)應(yīng)進(jìn)程。
以物理主機(jī)的運(yùn)行程序?yàn)镵VM,獲取該物理主機(jī)上的各虛擬機(jī)的cpu、內(nèi)存使用率和IO吞吐量為例??梢允褂胮ython腳本通過(guò)top-p pid來(lái)獲取各虛擬機(jī)的cpu和內(nèi)存使用率。這里獲得的虛擬機(jī)的cpu和內(nèi)存使用率與實(shí)際值不是完全相等的精確的值,只是一個(gè)等價(jià)值,這個(gè)值能夠在特征上代表實(shí)際值,即實(shí)際值增加該值增加,實(shí)際值減小該值減小。IO吞吐量的獲取通過(guò)virsh list獲取到該物理主機(jī)上的所有running狀態(tài)的虛擬機(jī), 從虛擬機(jī)的xml定義中檢索出接口名稱列表,依據(jù)該接口名稱逐個(gè)接口執(zhí)行相關(guān)命令查看 IO吞吐量信息。將一個(gè)虛擬機(jī)下的所有接口的發(fā)送字節(jié)數(shù)和接收字節(jié)數(shù)分別相加,得到該虛擬機(jī)的IO吞吐量的總發(fā)送字節(jié)數(shù)和總接收字節(jié)數(shù)。這里只是具體舉例的一種實(shí)現(xiàn)方式, 實(shí)現(xiàn)本發(fā)明并不局限于該方式。
在具體實(shí)現(xiàn)時(shí),虛擬機(jī)管理平臺(tái)可以記錄每次的監(jiān)測(cè)結(jié)果,需要確定是否存在虛擬機(jī)需要遷移時(shí),再根據(jù)記錄的監(jiān)測(cè)結(jié)果計(jì)算負(fù)載指數(shù);也可監(jiān)測(cè)到監(jiān)測(cè)結(jié)果時(shí)就計(jì)算負(fù)載指數(shù),將每次計(jì)算的負(fù)載指數(shù)按時(shí)間順序記錄,當(dāng)然,這種情況下可以記錄監(jiān)測(cè)結(jié)果,也可以不監(jiān)測(cè)。監(jiān)測(cè)可以保存在數(shù)據(jù)庫(kù)或文件中,也可以鏈表的形式保存在內(nèi)存中。本發(fā)明為了實(shí)現(xiàn)的便捷,采取監(jiān)測(cè)到監(jiān)測(cè)結(jié)果直接計(jì)算負(fù)載指數(shù)。以各物理主機(jī)的負(fù)載因子計(jì)算為例,具體實(shí)現(xiàn)如下
在該次監(jiān)測(cè)結(jié)果中的IO吞吐量中,找出最大值ioMax,其對(duì)應(yīng)的IO吞吐量百分比為1,其他的IO吞吐量百分比為do/ioMax。IO吞吐量越大的虛擬機(jī)越不應(yīng)該遷移,因?yàn)檫w移過(guò)程中對(duì)于業(yè)務(wù)可能有影響。
獲取物理主機(jī)i的監(jiān)測(cè)結(jié)果Hi,依據(jù)事先設(shè)定好的各個(gè)負(fù)載因子的加權(quán)值計(jì)算負(fù)載指數(shù)。
假設(shè)僅考慮CPU利用率(A)、內(nèi)存利用率(Β)、Ι0吞吐量百分比(C)三個(gè)負(fù)載因子, 且預(yù)先設(shè)定好的加權(quán)值分別為X、Y、Z,且(X+Y+Z) = 1。則物理主機(jī)Hi的負(fù)載指數(shù)Li = Ai*X+Bi*Y+Ci*Z。假設(shè)集群內(nèi)的物理主機(jī)個(gè)數(shù)為hMax,則i的取值為
。
若采用記錄監(jiān)測(cè)結(jié)果,需要計(jì)算負(fù)載因子再計(jì)算時(shí),還需引入一個(gè)預(yù)設(shè)次數(shù)N,則 Hin的負(fù)載指數(shù)Lin = Ain*X+Bin*Y+Cin*Z,η的取值為
,其中最近一次監(jiān)測(cè)數(shù)據(jù)其索引為0。
虛擬機(jī)管理平臺(tái)獲取各物理主機(jī)5次連續(xù)的負(fù)載因子,若存在某個(gè)物理主機(jī)的5 次連續(xù)負(fù)載因子都超過(guò)第一預(yù)設(shè)閾值,則獲取該物理主機(jī)上的各虛擬機(jī)的負(fù)載指數(shù)。各虛擬機(jī)的負(fù)載指數(shù)獲取方式同上述各物理主機(jī)的負(fù)載指數(shù)。這里不再詳細(xì)贅述。若不存在物理主機(jī)5次連續(xù)負(fù)載因子都超第一預(yù)設(shè)閾值時(shí),結(jié)束此操作。
虛擬機(jī)管理平臺(tái)根據(jù)預(yù)設(shè)親和因子對(duì)獲取的各虛擬機(jī)的負(fù)載指數(shù)分別加權(quán),具體實(shí)現(xiàn)為(1-3€打11行7」)*1」其中,」的取值為W,VMax-ILVMax為該物理主機(jī)上虛擬機(jī)的個(gè)數(shù)。將加權(quán)后值最大的虛擬機(jī)作為待遷移的虛擬機(jī)。其中,affinitt為各虛擬機(jī)預(yù)設(shè)的親和因子,設(shè)各虛擬機(jī)的親和因子為
之間的百分?jǐn)?shù),其中0表示無(wú)依賴性,1表示依賴性很大,一般不建議遷移。加權(quán)的時(shí)候,權(quán)值使用的是(1-親和因子),表示親和因子越大的, 越不樂(lè)意遷移。
虛擬機(jī)管理平臺(tái)通過(guò)上述同樣的方法,獲取各物理主機(jī)最近一次的負(fù)載指數(shù),選擇負(fù)載指數(shù)最小的物理主機(jī),若該物理主機(jī)的負(fù)載指數(shù)小于第二預(yù)設(shè)閾值,即該物理主機(jī)能夠再新增虛擬機(jī)的情況下,將該物理主機(jī)作為待遷移虛擬機(jī)的目的物理主機(jī)。否則,未有物理主機(jī)能夠接受待遷移的虛擬機(jī)的遷移,該次操作結(jié)束。
虛擬機(jī)管理平臺(tái)將待遷移的虛擬機(jī)遷移到目的物理主機(jī)。使用Iibvirt的virsh 工具執(zhí)行虛擬機(jī)遷移的動(dòng)作,并將執(zhí)行結(jié)果反饋給觸發(fā)者。具體遷移過(guò)程同現(xiàn)有實(shí)現(xiàn),這里不再贅述。
無(wú)論待遷移的虛擬機(jī)最終是否能夠遷移,對(duì)于上述操作過(guò)程虛擬機(jī)管理平臺(tái)都采用日志的形式記錄上述操作,為管理員提供方便。
虛擬機(jī)管理平臺(tái)對(duì)集群內(nèi)的所有物理主機(jī)進(jìn)行管理,包括增加、刪除物理主機(jī),通過(guò)Iibvirt增加、刪除、暫停虛擬機(jī)等所有虛擬機(jī)生命周期。
在本發(fā)明的具體實(shí)現(xiàn)中,在確定存在負(fù)載太大,需要有虛擬機(jī)需要遷移的物理主機(jī)時(shí),也可以先確定是否存在相對(duì)空閑的物理主機(jī),當(dāng)不存在時(shí),直接結(jié)束本次操作,不再確定超負(fù)載的物理主機(jī)需要遷移的虛擬機(jī)。當(dāng)然,在實(shí)際應(yīng)用中,一般都會(huì)存在相對(duì)空閑的物理主機(jī)可遷入;否則,系統(tǒng)內(nèi)會(huì)增加新的物理主機(jī)。
基于上述同樣的發(fā)明構(gòu)思,本發(fā)明還提出一種虛擬機(jī)負(fù)載分擔(dān)裝置。參見(jiàn)圖2,圖 2為本發(fā)明具體實(shí)施例中實(shí)現(xiàn)虛擬機(jī)負(fù)載均衡的裝置結(jié)構(gòu)示意圖。該裝置包括配置單元 201、監(jiān)測(cè)單元202、計(jì)算單元203、第一獲取確定單元204、第二獲取確定單元205、第三獲取確定單元206和遷移單元207。
配置單元201,用于設(shè)置監(jiān)測(cè)周期、預(yù)設(shè)次數(shù),各虛擬機(jī)的預(yù)設(shè)親和因子,第一預(yù)設(shè)閾值,第二預(yù)設(shè)閾值,其中,所述第二預(yù)設(shè)閾值小于所述第一預(yù)設(shè)閾值。
監(jiān)測(cè)單元202,用于根據(jù)配置單元201設(shè)置的監(jiān)測(cè)周期監(jiān)測(cè)各物理主機(jī)及各物理主機(jī)上運(yùn)行的虛擬機(jī)的負(fù)載信息。
計(jì)算單元203,用于根據(jù)監(jiān)測(cè)單元202監(jiān)測(cè)的負(fù)載信息計(jì)算各物理主機(jī)及各物理主機(jī)上運(yùn)行的虛擬機(jī)的負(fù)載因子。
第一獲取確定單元204,用于獲取計(jì)算單元203計(jì)算的任一物理主機(jī)最近連續(xù)配置單元201設(shè)置的預(yù)設(shè)次數(shù)負(fù)載指數(shù),確定該物理主機(jī)的預(yù)設(shè)次數(shù)負(fù)載指數(shù)都大于配置單元201設(shè)置的第一預(yù)設(shè)閾值。
第二獲取確定單元205,用于當(dāng)?shù)谝猾@取單元204確定該物理主機(jī)的預(yù)設(shè)次數(shù)負(fù)載指數(shù)都大于第一預(yù)設(shè)閾值時(shí),獲取計(jì)算單元203計(jì)算的該物理主機(jī)上的所有當(dāng)前運(yùn)行的虛擬機(jī)的最近一次負(fù)載指數(shù),并根據(jù)配置單元201設(shè)置的各虛擬機(jī)的預(yù)設(shè)親和因子和其最近一次負(fù)載指數(shù)確定待遷移的虛擬機(jī),其中,預(yù)設(shè)親和因子表示虛擬機(jī)對(duì)自身所在物理主機(jī)的依賴程度。
第三獲取確定單元206,用于當(dāng)?shù)谝猾@取單元204確定該物理主機(jī)的預(yù)設(shè)次數(shù)負(fù)載指數(shù)都大于第一預(yù)設(shè)閾值時(shí),獲取計(jì)算單元203計(jì)算的各物理主機(jī)最近一次負(fù)載指數(shù), 確定負(fù)載指數(shù)最小且負(fù)載指數(shù)小于配置單元201設(shè)置的第二預(yù)設(shè)閾值的物理主機(jī)作為待遷移虛擬機(jī)遷移的目的物理主機(jī)。
遷移單元207,用于將第二獲取確定單元205確定的待遷移虛擬機(jī)遷移至第三獲取確定單元206確定的目的物理主機(jī)。
較佳地,
第二獲取確定單元205,用于根據(jù)各虛擬機(jī)的預(yù)設(shè)親和因子對(duì)各虛擬機(jī)的最近一次負(fù)載指數(shù)加權(quán),將加權(quán)后值最大的虛擬機(jī)作為待遷移的虛擬機(jī)。
較佳地,
監(jiān)測(cè)單元202,用于周期監(jiān)測(cè)各物理主機(jī)時(shí),使用python腳本通過(guò)ssh遠(yuǎn)程執(zhí)行相關(guān)統(tǒng)計(jì)命令來(lái)獲取各物理主機(jī)的負(fù)載信息;周期監(jiān)測(cè)運(yùn)行在物理主機(jī)上的各虛擬機(jī)時(shí),使用python腳本通過(guò)ssh遠(yuǎn)程執(zhí)行相關(guān)命令從該虛擬機(jī)所在物理主機(jī)的對(duì)應(yīng)進(jìn)程獲取該虛擬機(jī)的負(fù)載信息,其中,負(fù)載信息包括CPU利用率、內(nèi)存使用率和IO吞吐量,相關(guān)統(tǒng)計(jì)命令根據(jù)物理主機(jī)的運(yùn)行程序確定。
較佳地,
計(jì)算單元203,用于根據(jù)IO吞吐量確定IO吞吐量因子,并分別對(duì)CPU利用率、內(nèi)存使用率和IO吞吐量因子進(jìn)行加權(quán)計(jì)算負(fù)載因子。
較佳地,
計(jì)算單元203,用于在監(jiān)測(cè)單元202監(jiān)測(cè)到的各物理主機(jī)的IO吞吐量中,選擇出值最大的IO吞吐量,則各物理主機(jī)的IO吞吐量因子為自身的IO吞吐量與最大的IO吞吐量的比值;在監(jiān)測(cè)單元202監(jiān)測(cè)到的任一物理主機(jī)上的各虛擬機(jī)的IO吞吐量中,選擇出值最大的IO吞吐量,則該物理主機(jī)上的各虛擬機(jī)的IO吞吐量因子為自身的IO吞吐量與最大的 IO吞吐量的比值。
較佳地,
第三獲取確定單元206,進(jìn)一步用于當(dāng)新增虛擬機(jī)時(shí),獲取計(jì)算單元203計(jì)算的各物理主機(jī)的最近一次負(fù)載指數(shù),選擇負(fù)載指數(shù)最小的物理主機(jī),并在該物理主機(jī)上新增虛擬機(jī)。
上述實(shí)施例的單元可以集成于一體,也可以分離部署;可以合并為一個(gè)單元,也可以進(jìn)一步拆分成多個(gè)子單元。
綜上所述,本發(fā)明綜合考慮物理主機(jī)和虛擬機(jī)的CPU利用率、內(nèi)存利用率、IO吞吐量等負(fù)載因素來(lái)確定虛擬機(jī)的動(dòng)態(tài)遷移動(dòng)作,實(shí)現(xiàn)虛擬機(jī)分布的負(fù)載均衡,有效提高了虛擬機(jī)的平滑遷移,避免由于高內(nèi)存利用率和IO吞吐量的情況下遷移虛擬機(jī)對(duì)虛擬機(jī)所造成的影響。
本發(fā)明不需要在物理主機(jī)或虛擬機(jī)上事先安裝代理,減少了復(fù)雜性和成本。不僅考慮物物理主機(jī)的CPU負(fù)載,也考慮該物理主機(jī)上的虛擬機(jī)的負(fù)載,還通過(guò)配置虛擬機(jī)對(duì)物理主機(jī)的親和性,親和性越強(qiáng)越不建議動(dòng)態(tài)遷移。
以上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種虛擬機(jī)負(fù)載均衡方法,其特征在于,周期監(jiān)測(cè)各物理主機(jī)及各物理主機(jī)上運(yùn)行的虛擬機(jī)的負(fù)載信息,并根據(jù)所述負(fù)載信息分別計(jì)算各物理主機(jī)及各物理主機(jī)上運(yùn)行的虛擬機(jī)的負(fù)載因子,所述方法包括獲取任一物理主機(jī)最近連續(xù)預(yù)設(shè)次數(shù)負(fù)載指數(shù),若該物理主機(jī)的所述預(yù)設(shè)次數(shù)負(fù)載指數(shù)都大于第一預(yù)設(shè)閾值,則獲取該物理主機(jī)上的所有當(dāng)前運(yùn)行的虛擬機(jī)的最近一次負(fù)載指數(shù),并根據(jù)各虛擬機(jī)的預(yù)設(shè)親和因子和其最近一次負(fù)載指數(shù)確定待遷移的虛擬機(jī),其中,所述預(yù)設(shè)親和因子表示虛擬機(jī)對(duì)自身所在物理主機(jī)的依賴程度;獲取各物理主機(jī)最近一次負(fù)載指數(shù),確定負(fù)載指數(shù)最小且負(fù)載指數(shù)小于第二預(yù)設(shè)閾值的物理主機(jī)作為虛擬機(jī)遷移的目的物理主機(jī),其中,所述第二預(yù)設(shè)閾值小于所述第一預(yù)設(shè)閾值;將所述待遷移虛擬機(jī)遷移至所述目的物理主機(jī)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)各虛擬機(jī)的預(yù)設(shè)親和因子和其最近一次負(fù)載指數(shù)確定待遷移的虛擬機(jī)的方法為< 根據(jù)各虛擬機(jī)的預(yù)設(shè)親和因子對(duì)所述各虛擬機(jī)的最近一次負(fù)載指數(shù)加權(quán),將加權(quán)后值最大的虛擬機(jī)作為待遷移的虛擬機(jī)。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述周期監(jiān)測(cè)各物理主機(jī)及各物理主機(jī)上運(yùn)行的虛擬機(jī)的負(fù)載信息的方法為周期監(jiān)測(cè)各物理主機(jī)時(shí),使用python腳本通過(guò)安全框架ssh遠(yuǎn)程執(zhí)行相關(guān)統(tǒng)計(jì)命令來(lái)獲取各物理主機(jī)的負(fù)載信息;周期監(jiān)測(cè)運(yùn)行在物理主機(jī)上的各虛擬機(jī)時(shí),使用python腳本通過(guò)ssh遠(yuǎn)程執(zhí)行相關(guān)命令從該虛擬機(jī)所在物理主機(jī)的對(duì)應(yīng)進(jìn)程獲取該虛擬機(jī)的負(fù)載信息,其中,所述負(fù)載信息包括CPU利用率、內(nèi)存使用率和IO吞吐量,所述相關(guān)統(tǒng)計(jì)命令根據(jù)物理主機(jī)的運(yùn)行程序確定。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述根據(jù)負(fù)載信息分別計(jì)算各物理主機(jī)及各物理主機(jī)上運(yùn)行的虛擬機(jī)的負(fù)載因子的方法為根據(jù)IO吞吐量確定IO吞吐量因子,并分別對(duì)CPU利用率、內(nèi)存使用率和IO吞吐量因子進(jìn)行加權(quán)計(jì)算負(fù)載因子。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述根據(jù)IO吞吐量確定IO吞吐量因子的方法為在監(jiān)測(cè)到的各物理主機(jī)的IO吞吐量中,選擇出值最大的IO吞吐量,則各物理主機(jī)的IO 吞吐量因子為自身的IO吞吐量與最大的IO吞吐量的比值;在監(jiān)測(cè)到的任一物理主機(jī)上的各虛擬機(jī)的IO吞吐量中,選擇出值最大的IO吞吐量,則該物理主機(jī)上的各虛擬機(jī)的IO吞吐量因子為自身的IO吞吐量與最大的IO吞吐量的比值。
6.根據(jù)權(quán)利要求1-5任意一項(xiàng)所述的方法,其特征在于,當(dāng)新增虛擬機(jī)時(shí),所述方法進(jìn)一步包括獲取各物理主機(jī)的最近一次負(fù)載指數(shù),選擇負(fù)載指數(shù)最小的物理主機(jī),并在該物理主機(jī)上新增虛擬機(jī)。
7.—種虛擬機(jī)負(fù)載均衡裝置,其特征在于,該裝置包括配置單元、監(jiān)測(cè)單元、計(jì)算單元、第一獲取確定單元、第二獲取確定單元、第三獲取確定單元和遷移單元;所述配置單元,用于設(shè)置監(jiān)測(cè)周期、預(yù)設(shè)次數(shù),各虛擬機(jī)的預(yù)設(shè)親和因子,第一預(yù)設(shè)閾值,第二預(yù)設(shè)閾值,其中,所述第二預(yù)設(shè)閾值小于所述第一預(yù)設(shè)閾值;所述監(jiān)測(cè)單元,用于根據(jù)所述配置單元設(shè)置的監(jiān)測(cè)周期監(jiān)測(cè)各物理主機(jī)及各物理主機(jī)上運(yùn)行虛擬機(jī)的負(fù)載信息;所述計(jì)算單元,用于根據(jù)所述監(jiān)測(cè)單元監(jiān)測(cè)的負(fù)載信息計(jì)算各物理主機(jī)及虛擬機(jī)的負(fù)載因子;所述第一獲取確定單元,用于獲取所述計(jì)算單元計(jì)算的任一物理主機(jī)最近連續(xù)所述配置單元設(shè)置的預(yù)設(shè)次數(shù)負(fù)載指數(shù),確定該物理主機(jī)的所述預(yù)設(shè)次數(shù)負(fù)載指數(shù)都大于所述配置單元設(shè)置的第一預(yù)設(shè)閾值;所述第二獲取確定單元,用于當(dāng)所述第一獲取單元確定該物理主機(jī)的所述預(yù)設(shè)次數(shù)負(fù)載指數(shù)都大于第一預(yù)設(shè)閾值時(shí),獲取所述計(jì)算單元計(jì)算的該物理主機(jī)上的所有當(dāng)前運(yùn)行的虛擬機(jī)的最近一次負(fù)載指數(shù),并根據(jù)所述配置單元設(shè)置的各虛擬機(jī)的預(yù)設(shè)親和因子和其最近一次負(fù)載指數(shù)確定待遷移的虛擬機(jī),其中,所述預(yù)設(shè)親和因子表示虛擬機(jī)對(duì)自身所在物理主機(jī)的依賴程度;所述第三獲取確定單元,用于當(dāng)所述第一獲取單元確定該物理主機(jī)的所述預(yù)設(shè)次數(shù)負(fù)載指數(shù)都大于第一預(yù)設(shè)閾值時(shí),獲取所述計(jì)算單元計(jì)算的各物理主機(jī)最近一次負(fù)載指數(shù), 確定負(fù)載指數(shù)最小且負(fù)載指數(shù)小于所述配置單元設(shè)置的第二預(yù)設(shè)閾值的物理主機(jī)作為待遷移虛擬機(jī)遷移的目的物理主機(jī);所述遷移單元,用于將所述第二獲取確定單元確定的待遷移虛擬機(jī)遷移至所述第三獲取確定單元確定的目的物理主機(jī)。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述第二獲取確定單元,用于根據(jù)各虛擬機(jī)的預(yù)設(shè)親和因子對(duì)所述各虛擬機(jī)的最近一次負(fù)載指數(shù)加權(quán),將加權(quán)后值最大的虛擬機(jī)作為待遷移的虛擬機(jī)。
9.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述監(jiān)測(cè)單元,用于周期監(jiān)測(cè)各物理主機(jī)時(shí),使用python腳本通過(guò)安全框架ssh遠(yuǎn)程執(zhí)行相關(guān)統(tǒng)計(jì)命令來(lái)獲取各物理主機(jī)的負(fù)載信息;周期監(jiān)測(cè)運(yùn)行在物理主機(jī)上的各虛擬機(jī)時(shí),使用python腳本通過(guò)ssh遠(yuǎn)程執(zhí)行相關(guān)命令從該虛擬機(jī)所在物理主機(jī)的對(duì)應(yīng)進(jìn)程獲取該虛擬機(jī)的負(fù)載信息,其中,所述負(fù)載信息包括CPU利用率、內(nèi)存使用率和IO吞吐量,所述相關(guān)統(tǒng)計(jì)命令根據(jù)物理主機(jī)的運(yùn)行程序確定。
10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述計(jì)算單元,用于根據(jù)IO吞吐量確定IO吞吐量因子,并分別對(duì)CPU利用率、內(nèi)存使用率和IO吞吐量因子進(jìn)行加權(quán)計(jì)算負(fù)載因子。
11.根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述計(jì)算單元,用于在所述監(jiān)測(cè)單元監(jiān)測(cè)到的各物理主機(jī)的IO吞吐量中,選擇出值最大的IO吞吐量,則各物理主機(jī)的IO吞吐量因子為自身的IO吞吐量與最大的IO吞吐量的比值;在所述監(jiān)測(cè)單元監(jiān)測(cè)到的任一物理主機(jī)上的各虛擬機(jī)的IO吞吐量中,選擇出值最大的IO吞吐量,則該物理主機(jī)上的各虛擬機(jī)的IO吞吐量因子為自身的IO吞吐量與最大的IO 吞吐量的比值。
12.根據(jù)權(quán)利要求7-11任意一項(xiàng)所述的裝置,其特征在于,所述第三獲取確定單元,進(jìn)一步用于當(dāng)新增虛擬機(jī)時(shí),獲取所述計(jì)算單元計(jì)算的各物理主機(jī)的最近一次負(fù)載指數(shù),選擇負(fù)載指數(shù)最小的物理主機(jī),并在該物理主機(jī)上新增虛擬機(jī)。
全文摘要
本發(fā)明公開(kāi)了一種虛擬機(jī)負(fù)載均衡方法,該方法通過(guò)周期監(jiān)測(cè)各物理主機(jī)以及其上運(yùn)行的虛擬機(jī)的負(fù)載信息,結(jié)合虛擬機(jī)與其所在物理主機(jī)的預(yù)設(shè)親和因子,確定哪個(gè)物理主機(jī)上的虛擬機(jī)需要遷移到哪個(gè)相對(duì)空閑的物理主機(jī)上?;谕瑯拥陌l(fā)明構(gòu)思,本發(fā)明還提出一種裝置,能夠在降低開(kāi)發(fā)復(fù)雜性和成本的情況下,實(shí)現(xiàn)虛擬機(jī)的負(fù)載均衡。
文檔編號(hào)G06F9/455GK102508718SQ201110373058
公開(kāi)日2012年6月20日 申請(qǐng)日期2011年11月22日 優(yōu)先權(quán)日2011年11月22日
發(fā)明者蔡志峰 申請(qǐng)人:杭州華三通信技術(shù)有限公司