本發(fā)明涉及云計(jì)算技術(shù)領(lǐng)域,具體地,涉及一種基于openstack的大規(guī)模虛擬計(jì)算動(dòng)態(tài)負(fù)載均衡方法。
背景技術(shù):
OpenStack是一個(gè)由NASA(美國(guó)國(guó)家航空航天局)和Rackspace合作研發(fā)并發(fā)起的,一個(gè)開(kāi)源的云計(jì)算管理平臺(tái)項(xiàng)目,覆蓋了網(wǎng)絡(luò)、虛擬化、操作系統(tǒng)、服務(wù)器等各個(gè)方面。
虛擬計(jì)算在廣義上講是一種以虛擬化、網(wǎng)絡(luò)、監(jiān)控等技術(shù)的融合為核心的一種計(jì)算體系。在本方案中,單指服務(wù)器虛擬化,即將服務(wù)器物理資源抽象成邏輯資源,讓一臺(tái)服務(wù)器變成幾臺(tái)甚至上百臺(tái)相互隔離的虛擬服務(wù)器,使我們不再受限于物理上的界限,而是讓CPU、內(nèi)存、磁盤(pán)、I/O等硬件變成可以動(dòng)態(tài)管理的“資源池”,從而提高資源的利用率,簡(jiǎn)化系統(tǒng)管理,實(shí)現(xiàn)服務(wù)器整合,讓IT對(duì)業(yè)務(wù)的變化更具適應(yīng)力。
動(dòng)態(tài)負(fù)載均衡泛指在不影響實(shí)際業(yè)務(wù)的情況下,通過(guò)提供一種有效的方法擴(kuò)展服務(wù)器的處理、增加吞吐量、加強(qiáng)網(wǎng)絡(luò)數(shù)據(jù)處理能力、提高網(wǎng)絡(luò)的靈活性和可用性。而在本方案中,主要是通過(guò)特定策略或算法,調(diào)整虛機(jī)的分布情況,實(shí)現(xiàn)虛擬服務(wù)器動(dòng)態(tài)的處理能力的平衡。
在計(jì)算設(shè)備(包括個(gè)人計(jì)算機(jī)、通用服務(wù)器、大型主機(jī)等)、互聯(lián)網(wǎng)技術(shù)非常普及的今天,從技術(shù)熱點(diǎn)上看,云計(jì)算無(wú)疑是其中最熱門(mén)的概念之一。云計(jì)算服務(wù)的主要優(yōu)勢(shì)是,給用戶提供彈性計(jì)算能力,讓一個(gè)公司或組織的計(jì)算資源得到充分整合,從而實(shí)現(xiàn)按需分配計(jì)算資源而提升現(xiàn)有硬件資源的利用率,而且更加方便管理、減低資源管理成本。
隨著越來(lái)越多的業(yè)務(wù)從傳統(tǒng)平臺(tái)轉(zhuǎn)移至云計(jì)算平臺(tái),大量的,新的虛擬機(jī)被創(chuàng)建出來(lái)。企業(yè)或組織不得不花大力氣采購(gòu)新的設(shè)備,用于承載這些新的虛擬機(jī),以支撐更多的業(yè)務(wù)。即使是公有云平臺(tái),大量的虛擬計(jì)算資源也出現(xiàn)了過(guò)載的情況,如果客戶的增多導(dǎo)致業(yè)務(wù)處理量超出了服務(wù)器能承受的范圍,那么其結(jié)果必然是――宕機(jī)。
為了解決這一問(wèn)題,國(guó)內(nèi)外許多公司和學(xué)術(shù)機(jī)構(gòu)都對(duì)此進(jìn)行了研究和改進(jìn),但效果并不理想。其中,與本發(fā)明最接近的技術(shù)方法如下:
一、基于負(fù)載均衡器的云計(jì)算數(shù)據(jù)中心的管理系統(tǒng)和管理方法(專(zhuān)利號(hào):CN105159775A):設(shè)計(jì)一個(gè)包括彈性節(jié)點(diǎn)池集群、負(fù)載均衡器集群和管理裝置的管理系統(tǒng)。其中,彈性節(jié)點(diǎn)池集群包括若干個(gè)彈性節(jié)點(diǎn)池,每個(gè)彈性節(jié)點(diǎn)池包括若干個(gè)虛擬機(jī),虛擬機(jī)用于通過(guò)虛擬IP對(duì)外提供服務(wù);負(fù)載均衡器集群包括若干個(gè)負(fù)載均衡器,每個(gè)負(fù)載均衡器與設(shè)定數(shù)量的彈性節(jié)點(diǎn)池連接,用于為所連接的每個(gè)彈性節(jié)點(diǎn)池提供負(fù)載均衡服務(wù);管理裝置用于管理負(fù)載均衡器和彈性節(jié)點(diǎn)池,根據(jù)每個(gè)彈性節(jié)點(diǎn)池的負(fù)載狀況,采用預(yù)設(shè)的負(fù)載均衡策略動(dòng)態(tài)調(diào)整所述彈性節(jié)點(diǎn)池中虛擬機(jī)的數(shù)量。該方法只能解決虛擬機(jī)的訪問(wèn)負(fù)載問(wèn)題,并不能解決虛擬機(jī)對(duì)物理資源的消耗負(fù)載問(wèn)題。
二、一種用于云計(jì)算環(huán)境下的負(fù)載均衡方法(專(zhuān)利號(hào):CN104917839A):該方法從超載的虛擬機(jī)上移走一些任務(wù),并為其尋找另外的合適的虛擬機(jī)。在根據(jù)任務(wù)優(yōu)先級(jí)QoS標(biāo)準(zhǔn)在多個(gè)虛擬機(jī)中選擇最好的虛擬機(jī),即在虛擬機(jī)的任務(wù)中只有很少一部分任務(wù)的優(yōu)先級(jí)與該任務(wù)的優(yōu)先級(jí)相同。這個(gè)過(guò)程稱(chēng)為多個(gè)任務(wù)為了虛擬機(jī)而進(jìn)行的競(jìng)爭(zhēng),當(dāng)該競(jìng)爭(zhēng)結(jié)束后,獲勝的任務(wù)被分配給其找到的合適的虛擬機(jī)的詳細(xì)信息進(jìn)行更新。該方法將虛擬機(jī)中的業(yè)務(wù)人為地劃分成了多個(gè)任務(wù),并且人為地界定其優(yōu)先級(jí),這樣的設(shè)計(jì)方法對(duì)整個(gè)系統(tǒng)來(lái)說(shuō)是不透明的,這既增加了管理的難度,又給系統(tǒng)帶來(lái)了安全風(fēng)險(xiǎn)。
虛擬化是云計(jì)算體系的核心,本質(zhì)上是解決物理資源過(guò)剩的問(wèn)題。但是,隨著云計(jì)算數(shù)據(jù)中心規(guī)模的不斷擴(kuò)大,用戶的業(yè)務(wù)量也不斷增加,而租戶虛擬機(jī),作為最基本的計(jì)算單元,其業(yè)務(wù)的均衡性卻愈來(lái)愈受到挑戰(zhàn)。
為了應(yīng)對(duì)這種挑戰(zhàn),出現(xiàn)了很多解決方案,其中最典型的是openstack在Grizzly版本就集成到Neutron中的負(fù)載均衡(Load Balance)模塊。它作為OpenStack Neutron項(xiàng)目的高級(jí)服務(wù)之一,能夠均衡的將所收到的網(wǎng)絡(luò)流量分配給指定的虛擬機(jī)集合,從而達(dá)到更高效的使用系統(tǒng)資源的目的。目前大多數(shù)負(fù)載均衡器的原理都與之類(lèi)似,在云計(jì)算體系中稱(chēng)之為L(zhǎng)BaaS。這種典型的負(fù)載均衡器最大的特點(diǎn)是從網(wǎng)絡(luò)訪問(wèn)中入手,通過(guò)分流的方式將業(yè)務(wù)分散到各個(gè)虛擬機(jī)中。這樣的方式最大的不足就在于沒(méi)有解決全局的負(fù)載均衡問(wèn)題,也就是說(shuō)在整個(gè)云平臺(tái)環(huán)境中,這樣的方式只能將業(yè)務(wù)分流至相同業(yè)務(wù)處理的虛擬機(jī)中,并沒(méi)有做到全局的負(fù)載均衡。另外,很多虛擬機(jī)的業(yè)務(wù)是聚焦CPU或內(nèi)存的,在沒(méi)有任何網(wǎng)絡(luò)訪問(wèn)時(shí),也會(huì)消耗資源,因此對(duì)于這樣的虛機(jī),傳統(tǒng)的負(fù)載均衡方法起不到任何作用。
隨著越來(lái)越多的業(yè)務(wù)從傳統(tǒng)平臺(tái)轉(zhuǎn)移至云計(jì)算平臺(tái),大量的,新的虛擬機(jī)被創(chuàng)建出來(lái)。企業(yè)或組織不得不花大力氣采購(gòu)新的設(shè)備,用于承載這些新的虛擬機(jī),以支撐更多的業(yè)務(wù)。然而,由于租戶業(yè)務(wù)存在“斷-續(xù)”這一特點(diǎn),即業(yè)務(wù)不會(huì)長(zhǎng)時(shí)間地使用CPU等物理資源,因此盲目擴(kuò)展物理資源雖可以滿足一時(shí)的業(yè)務(wù)需求,但長(zhǎng)期而言會(huì)導(dǎo)致大量的資源浪費(fèi)。
為了解決這一問(wèn)題,本方法提出一種基于openstack的大規(guī)模虛擬計(jì)算動(dòng)態(tài)負(fù)載均衡方法。在云平臺(tái)的控制節(jié)點(diǎn)設(shè)計(jì)一個(gè)負(fù)載均衡監(jiān)控器,對(duì)該控制節(jié)點(diǎn)所管轄的若干計(jì)算節(jié)點(diǎn)進(jìn)行監(jiān)控。如果某臺(tái)計(jì)算節(jié)點(diǎn)CPU持續(xù)處于繁忙狀態(tài),并且其內(nèi)存持續(xù)吃緊,就啟動(dòng)遷移動(dòng)作,將該節(jié)點(diǎn)上最耗資源的一臺(tái)虛擬機(jī)通過(guò)openstack的nova命令遷移到另一臺(tái)相對(duì)空閑的計(jì)算節(jié)點(diǎn)上。整個(gè)過(guò)程對(duì)用戶透明,不需要重啟虛擬機(jī),更不會(huì)影響租戶在虛擬機(jī)中的任何業(yè)務(wù)程序。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)中的缺陷,本發(fā)明的目的是提供一種基于openstack的大規(guī)模虛擬計(jì)算動(dòng)態(tài)負(fù)載均衡方法,其整個(gè)均衡過(guò)程透明度高,不需要重啟虛擬機(jī)也不會(huì)影響在虛擬機(jī)中的業(yè)務(wù)程序,可以達(dá)到高效地使用系統(tǒng)資源的目的。
根據(jù)本發(fā)明的一個(gè)方面,提供一種基于openstack的大規(guī)模虛擬計(jì)算動(dòng)態(tài)負(fù)載均衡方法,其特征在于,其包括以下步驟:
步驟一,在每臺(tái)運(yùn)行虛擬機(jī)的物理服務(wù)器openstack計(jì)算節(jié)點(diǎn)上設(shè)置一個(gè)監(jiān)控代理程序,用于獲取該物理機(jī)的關(guān)鍵熱度指標(biāo)HKI;
步驟二,在openstack計(jì)算節(jié)點(diǎn)上設(shè)置一個(gè)主監(jiān)控程序,定時(shí)輪詢各計(jì)算openstack計(jì)算節(jié)點(diǎn)中的監(jiān)控代理程序,獲取關(guān)鍵熱度指標(biāo)并計(jì)算出關(guān)鍵熱度指標(biāo)平均值;
步驟三,當(dāng)主監(jiān)控程序探測(cè)到第一物理服務(wù)器的關(guān)鍵熱度指標(biāo)值超過(guò)用戶設(shè)定的值,就將其記錄下來(lái),并選取關(guān)鍵熱度指標(biāo)最低的那臺(tái)計(jì)算節(jié)點(diǎn)作為遷移目的主機(jī),然后啟動(dòng)遷移程序;
步驟四,遷移程序按照用戶設(shè)定的策略在第一物理服務(wù)器中選取對(duì)物理CPU和物理內(nèi)存消耗最大的虛擬機(jī),使用openstack的動(dòng)態(tài)遷移命令將其遷移至遷移目的主機(jī)。
優(yōu)選地,所述關(guān)鍵熱度指標(biāo)關(guān)鍵熱度指標(biāo)由CPU和內(nèi)存的實(shí)際使用率計(jì)算得出,其值越高,說(shuō)明該計(jì)算節(jié)點(diǎn)的負(fù)載越大。
優(yōu)選地,所述步驟一包括以下步驟:
步驟十一:讀取計(jì)算節(jié)點(diǎn)Linux操作系統(tǒng)的proc、stat文件,采集該文件中九個(gè)關(guān)于cpu時(shí)間片的相關(guān)指標(biāo),它們分別是user、nice、system、idle、iowait、irq、softirq、stealstolen、guest;
步驟十二:定時(shí)在某個(gè)足夠短的時(shí)間間隔內(nèi),通過(guò)步驟十一對(duì)cpu時(shí)間片相關(guān)指標(biāo)進(jìn)行兩次采樣,生成間隔內(nèi)的時(shí)間片統(tǒng)計(jì)值;假設(shè)把第一次的所有cpu使用情況,即九個(gè)cpu相關(guān)指標(biāo)求和,得到s1;第二次為s2;那么s2減去s1就得到這個(gè)時(shí)間間隔內(nèi)的所有時(shí)間片統(tǒng)計(jì)值,即totalCpuTime;
步驟十三:計(jì)算空閑時(shí)間片;idle值為九個(gè)cpu相關(guān)的時(shí)間片指標(biāo)中第四個(gè)指標(biāo),用第二次的idle值減去第一次的idle值即可得到步驟十二指定的時(shí)間間隔內(nèi)空閑時(shí)間片的統(tǒng)計(jì)值,計(jì)為totalIdle;
步驟十四:通過(guò)公式100*(totalCpuTime-totalIdle)/totalCpuTime,導(dǎo)入步驟十二和步驟十三所得到的totalCpuTime和totalIdle的值即可算出某時(shí)刻cpu的使用率,記為pcpu;
步驟十五:讀取計(jì)算節(jié)點(diǎn)Linux操作系統(tǒng)的proc、meminfo文件,獲得內(nèi)存指標(biāo)MemTotal和MemFree;
步驟十六:通過(guò)公式100*(MemTotal-MemFree)/MemTotal,導(dǎo)入步驟十五中獲得的內(nèi)存指標(biāo)MemTotal和MemFree,得到某個(gè)時(shí)刻內(nèi)存的使用率,即為pmem;
步驟十七:將CPU使用率和內(nèi)存使用率進(jìn)行疊加,即可獲得該計(jì)算節(jié)點(diǎn)中關(guān)鍵熱度指標(biāo)HKI:HKI=pcpu+pmem。
與現(xiàn)有技術(shù)相比,本發(fā)明具有如下的有益效果:本發(fā)明整個(gè)均衡過(guò)程透明度高,不需要重啟虛擬機(jī)也不會(huì)影響在虛擬機(jī)中的業(yè)務(wù)程序,可以達(dá)到高效地使用系統(tǒng)資源的目的。
附圖說(shuō)明
通過(guò)閱讀參照以下附圖對(duì)非限制性實(shí)施例所作的詳細(xì)描述,本發(fā)明的其它特征、目的和優(yōu)點(diǎn)將會(huì)變得更明顯:
圖1為本發(fā)明的動(dòng)態(tài)負(fù)載均衡原理圖。
具體實(shí)施方式
下面結(jié)合具體實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)說(shuō)明。以下實(shí)施例將有助于本領(lǐng)域的技術(shù)人員進(jìn)一步理解本發(fā)明,但不以任何形式限制本發(fā)明。應(yīng)當(dāng)指出的是,對(duì)本領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn)。這些都屬于本發(fā)明的保護(hù)范圍。
如圖1所示,本發(fā)明基于openstack的大規(guī)模虛擬計(jì)算動(dòng)態(tài)負(fù)載均衡方法包括以下步驟:
步驟一,在每臺(tái)運(yùn)行虛擬機(jī)的物理服務(wù)器openstack計(jì)算節(jié)點(diǎn)上設(shè)置一個(gè)監(jiān)控代理程序,用于獲取該物理機(jī)的關(guān)鍵熱度指標(biāo)(Key Heat Indicator,KHI);
步驟二,在openstack計(jì)算節(jié)點(diǎn)上設(shè)置一個(gè)主監(jiān)控程序,定時(shí)輪詢各計(jì)算openstack計(jì)算節(jié)點(diǎn)中的監(jiān)控代理程序,獲取關(guān)鍵熱度指標(biāo)并計(jì)算出關(guān)鍵熱度指標(biāo)平均值;
步驟三,當(dāng)主監(jiān)控程序探測(cè)到第一物理服務(wù)器1的關(guān)鍵熱度指標(biāo)值超過(guò)用戶設(shè)定的值,就將其記錄下來(lái),并選取關(guān)鍵熱度指標(biāo)最低的那臺(tái)計(jì)算節(jié)點(diǎn)作為遷移目的主機(jī)2,然后啟動(dòng)遷移程序;
步驟四,遷移程序按照用戶設(shè)定的策略在第一物理服務(wù)器1中選取對(duì)物理CPU和物理內(nèi)存消耗最大的虛擬機(jī)11,使用openstack的nova live-migration(動(dòng)態(tài)遷移)命令將其遷移至遷移目的主機(jī)2。
所述關(guān)鍵熱度指標(biāo)由CPU(中央處理器)和內(nèi)存的實(shí)際使用率計(jì)算得出,其值越高,說(shuō)明該計(jì)算節(jié)點(diǎn)的負(fù)載越大,這樣有利于提高準(zhǔn)確度。
所述步驟一包括以下步驟:
步驟十一:讀取計(jì)算節(jié)點(diǎn)Linux操作系統(tǒng)的proc、stat文件,采集該文件中九個(gè)關(guān)于cpu時(shí)間片的相關(guān)指標(biāo),它們分別是user、nice、system、idle、iowait、irq、softirq、stealstolen、guest;
步驟十二:定時(shí)在某個(gè)足夠短的時(shí)間間隔內(nèi),通過(guò)步驟十一對(duì)cpu時(shí)間片相關(guān)指標(biāo)進(jìn)行兩次采樣,生成間隔內(nèi)的時(shí)間片統(tǒng)計(jì)值;假設(shè)把第一次的所有cpu使用情況,即九個(gè)cpu相關(guān)指標(biāo)求和,得到s1;第二次為s2;那么s2減去s1就得到這個(gè)時(shí)間間隔內(nèi)的所有時(shí)間片統(tǒng)計(jì)值,即totalCpuTime;
步驟十三:計(jì)算空閑時(shí)間片;idle值為九個(gè)cpu相關(guān)的時(shí)間片指標(biāo)中第四個(gè)指標(biāo),用第二次的idle值減去第一次的idle值即可得到步驟十二指定的時(shí)間間隔內(nèi)空閑時(shí)間片的統(tǒng)計(jì)值,計(jì)為totalIdle;
步驟十四:通過(guò)公式100*(totalCpuTime-totalIdle)/totalCpuTime,導(dǎo)入步驟十二和步驟十三所得到的totalCpuTime和totalIdle的值即可算出某時(shí)刻cpu的使用率,記為pcpu;
步驟十五:讀取計(jì)算節(jié)點(diǎn)Linux操作系統(tǒng)的proc、meminfo文件,獲得內(nèi)存指標(biāo)MemTotal和MemFree;
步驟十六:通過(guò)公式100*(MemTotal-MemFree)/MemTotal,導(dǎo)入步驟十五中獲得的內(nèi)存指標(biāo)MemTotal和MemFree,得到某個(gè)時(shí)刻內(nèi)存的使用率,即為pmem;
步驟十七:將CPU使用率和內(nèi)存使用率進(jìn)行疊加,即可獲得該計(jì)算節(jié)點(diǎn)中關(guān)鍵熱度指標(biāo)HKI:HKI=pcpu+pmem。
用戶的openstack云計(jì)算平臺(tái)擁有1臺(tái)控制節(jié)點(diǎn),6臺(tái)計(jì)算節(jié)點(diǎn),每臺(tái)計(jì)算節(jié)點(diǎn)上運(yùn)行了數(shù)十臺(tái)虛擬機(jī)。用戶設(shè)置關(guān)鍵熱度指標(biāo)如下:CPU(中央處理器)利用率*100%+MEM(內(nèi)存)利用率*100%。用戶設(shè)置策略為:每一個(gè)小時(shí)輪詢一次計(jì)算節(jié)點(diǎn),當(dāng)某臺(tái)關(guān)鍵熱度指標(biāo)的值大于等于平均值的150%就執(zhí)行負(fù)載均衡操作。
當(dāng)某一時(shí)刻,監(jiān)控程序探測(cè)到關(guān)鍵熱度指標(biāo)列表如下表1:
表1
很明顯,計(jì)算節(jié)點(diǎn)PM1的關(guān)鍵熱度指標(biāo)的值大于等于平均值的150%,需要執(zhí)行遷移程序。于是根據(jù)用戶設(shè)置的遷移策略,即在PM1中選取CPU和內(nèi)存使用率最大的虛擬機(jī),執(zhí)行nova live-migration操作,將其遷移至負(fù)載排名最低的計(jì)算節(jié)點(diǎn)PM5中。至此,整個(gè)負(fù)載均衡過(guò)程完成。本發(fā)明的核心是通過(guò)監(jiān)控系統(tǒng),探測(cè)出CPU和內(nèi)存過(guò)載的物理機(jī),將其中最繁忙的虛擬機(jī)通過(guò)openstack的nova命令遷移到另一臺(tái)相對(duì)空閑的計(jì)算節(jié)點(diǎn)上。本發(fā)明是基于目前最成熟,最穩(wěn)定,使用最為廣泛的openstack云平臺(tái),通過(guò)監(jiān)控、探測(cè)、動(dòng)態(tài)遷移等一系列措施,使一個(gè)云平臺(tái)系統(tǒng)的物理資源達(dá)到相對(duì)均衡、穩(wěn)定的狀態(tài)。
本發(fā)明在云平臺(tái)的控制節(jié)點(diǎn)設(shè)計(jì)一個(gè)負(fù)載均衡監(jiān)控器,對(duì)該控制節(jié)點(diǎn)所管轄的若干計(jì)算節(jié)點(diǎn)進(jìn)行監(jiān)控。如果某臺(tái)計(jì)算節(jié)點(diǎn)CPU持續(xù)處于繁忙狀態(tài),并且其內(nèi)存持續(xù)吃緊,就啟動(dòng)遷移動(dòng)作,將該節(jié)點(diǎn)上最耗資源的一臺(tái)虛擬機(jī)通過(guò)openstack的nova命令遷移到另一臺(tái)相對(duì)空閑的計(jì)算節(jié)點(diǎn)上。整個(gè)過(guò)程對(duì)用戶透明,不需要重啟虛擬機(jī),更不會(huì)影響租戶在虛擬機(jī)中的任何業(yè)務(wù)程序。
以上對(duì)本發(fā)明的具體實(shí)施例進(jìn)行了描述。需要理解的是,本發(fā)明并不局限于上述特定實(shí)施方式,本領(lǐng)域技術(shù)人員可以在權(quán)利要求的范圍內(nèi)做出各種變形或修改,這并不影響本發(fā)明的實(shí)質(zhì)內(nèi)容。