一種基于kvm虛擬化集群的負(fù)載均衡方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種基于KVM虛擬化集群的負(fù)載均衡方法,屬于云計(jì)算虛擬技術(shù)領(lǐng) 域。
【背景技術(shù)】
[0002] 云計(jì)算技術(shù)是IT產(chǎn)業(yè)界的一場(chǎng)技術(shù)革命,它能夠按需部署計(jì)算資源,而用戶只需 要為所使用的資源付費(fèi),從本質(zhì)上講,云計(jì)算是指用戶終端通過(guò)遠(yuǎn)程連接獲取存儲(chǔ)、計(jì)算、 數(shù)據(jù)庫(kù)等計(jì)算資源。這種變化使得IT基礎(chǔ)架構(gòu)的運(yùn)維專業(yè)化程度不斷集中和提高,從而對(duì) 基礎(chǔ)架構(gòu)層面,特別是服務(wù)器性能提出了更高的要求。
[0003] 虛擬化技術(shù)是云計(jì)算技術(shù)的核心組成之一,是將各種計(jì)算及存儲(chǔ)資源充分整合和 高效利用的關(guān)鍵技術(shù),包括服務(wù)器虛擬化和應(yīng)用虛擬化。每一個(gè)應(yīng)用部署的環(huán)境和物理平 臺(tái)是沒(méi)有關(guān)系的,通過(guò)虛擬平臺(tái)進(jìn)行管理達(dá)到對(duì)應(yīng)用進(jìn)行擴(kuò)展、迀移、備份等操作。
[0004] 當(dāng)前比較流行的虛擬化產(chǎn)品主要包括KVM (Kernel based Virtual Machine)、 VMware、XenServer等。其中,KVM的最大優(yōu)勢(shì)是完全開源,且KVM是基于內(nèi)核的完全虛擬 化,與其他虛擬化產(chǎn)品相比,具有資源利用率高、性能良好的優(yōu)勢(shì)。
[0005] 目前,在KVM虛擬化集群中,當(dāng)有大量的客戶端訪問(wèn)請(qǐng)求時(shí)存在服務(wù)資源在虛擬 機(jī)之間分配不均衡的問(wèn)題。
【發(fā)明內(nèi)容】
[0006] 針對(duì)現(xiàn)有技術(shù)的不足,本發(fā)明公開了一種基于KVM虛擬化集群的負(fù)載均衡方法。
[0007] 本發(fā)明在一臺(tái)服務(wù)器上構(gòu)建KVM虛擬化集群,該虛擬化集群包括客戶端、負(fù)載均 衡服務(wù)器、計(jì)算服務(wù)器和存儲(chǔ)服務(wù)器。在客戶端訪問(wèn)負(fù)載均衡服務(wù)器時(shí),負(fù)載均衡服務(wù)器通 過(guò)調(diào)用KVM的libvirt-java開發(fā)接口并使用SSH遠(yuǎn)程協(xié)議,獲取各個(gè)計(jì)算服務(wù)器的配置信 息、網(wǎng)絡(luò)負(fù)載狀況等負(fù)載情況,再結(jié)合用戶需求情況利用動(dòng)態(tài)請(qǐng)求分配算法選擇最優(yōu)計(jì)算 服務(wù)器。
[0008] 本發(fā)明的技術(shù)方案為:
[0009] 一種基于KVM虛擬化集群的負(fù)載均衡方法,該方法在一臺(tái)服務(wù)器上運(yùn)行,在所述 服務(wù)器上構(gòu)建KVM虛擬化集群,所述KVM虛擬化集群包括一臺(tái)客戶端、一臺(tái)負(fù)載均衡服務(wù) 器、若干臺(tái)計(jì)算服務(wù)器及一臺(tái)存儲(chǔ)服務(wù)器;在負(fù)載均衡服務(wù)器中搭建LNMP環(huán)境,配置nginx 的nginx. conf文件實(shí)現(xiàn)反向代理;在負(fù)載均衡服務(wù)器中安裝jdk,搭建java運(yùn)行環(huán)境,通 過(guò)"qemu+ssh://"的方式連接若干臺(tái)計(jì)算服務(wù)器,利用java編程調(diào)用KVM的libvirt-java 開發(fā)接□獲取每臺(tái)計(jì)算服務(wù)器的配置信息、CPU使用率、網(wǎng)絡(luò)寬帶使用率、響應(yīng)時(shí)間、負(fù)載, 所述配置信息包括內(nèi)存memory、CPU個(gè)數(shù)cpus、每個(gè)節(jié)點(diǎn)的CPU socket數(shù)目sockets、每個(gè) sockets的核數(shù)cores、超線程threads、期望的CPU頻率mhz ;
[0010] 具體步驟包括:當(dāng)客戶端訪問(wèn)負(fù)載均衡服務(wù)器時(shí),負(fù)載均衡服務(wù)器調(diào)用KVM的 libvirt-java開發(fā)接口并使用SSH遠(yuǎn)程協(xié)議獲得各個(gè)計(jì)算服務(wù)器的負(fù)載,利用動(dòng)態(tài)請(qǐng)求 分配算法找到分配權(quán)值最小的計(jì)算服務(wù)器,將新到達(dá)服務(wù)器的任務(wù)請(qǐng)求分配給該計(jì)算服務(wù) 器。
[0011] 根據(jù)本發(fā)明優(yōu)選的,所述動(dòng)態(tài)請(qǐng)求分配算法,具體步驟包括:
[0012] a、求取計(jì)算服務(wù)器當(dāng)前的平均負(fù)載權(quán)值:計(jì)算公式如式(I )所示:
[0014] 式(I )中,m是指計(jì)算服務(wù)器的個(gè)數(shù);Li是指計(jì)算服務(wù)器51當(dāng)前的負(fù)載; 4=(7i v-7t),是指計(jì)算服務(wù)器5,實(shí)測(cè)的當(dāng)前響應(yīng)客戶端請(qǐng)求的時(shí)間,:?:_通過(guò)網(wǎng)頁(yè) 監(jiān)控軟件測(cè)得;Qi是指計(jì)算服務(wù)器3,的固有能力;叫=(Ii x -Tt),(^是指計(jì)算服務(wù)器 Si的可用資源為0時(shí)響應(yīng)客戶端請(qǐng)求的時(shí)間,Tlx通過(guò)以下方式測(cè)得:對(duì)計(jì)算服務(wù)器S i不斷 增加客戶端請(qǐng)求個(gè)數(shù),當(dāng)計(jì)算服務(wù)器Si響應(yīng)請(qǐng)求個(gè)數(shù)達(dá)到最大值時(shí),通過(guò)網(wǎng)頁(yè)監(jiān)控軟件測(cè) 得此時(shí)計(jì)算服務(wù)器S i響應(yīng)時(shí)間;r:是指計(jì)算服務(wù)器Sig身的響應(yīng)時(shí)間,當(dāng)客戶端發(fā)送一
器Sii前的負(fù)載權(quán)值,計(jì)算服務(wù)器Si當(dāng)前的負(fù)載權(quán)值是指計(jì)算服務(wù)器S ,當(dāng)前的負(fù)載與 其固有能力的比值,%的計(jì)算公式如式(II )所示:
[0018] b、增加臨界遞減因子后計(jì)算每個(gè)計(jì)算服務(wù)器的負(fù)載權(quán)值:所述臨界遞減因子是指 進(jìn)入臨界狀態(tài)時(shí)計(jì)算服務(wù)器的負(fù)載權(quán)值,負(fù)載權(quán)值增加遞減因子S,則加入遞減因子后的 計(jì)算服務(wù)器Sii前的負(fù)載權(quán)值計(jì)算公式如式(IV )所示:
器的響應(yīng)時(shí)間會(huì)出現(xiàn)抖動(dòng)時(shí),則響應(yīng)時(shí)間為I;,區(qū)間I;~Tmax稱為臨界狀態(tài);當(dāng)客戶端請(qǐng)求 數(shù)量小于L所對(duì)應(yīng)的請(qǐng)求數(shù)量時(shí),請(qǐng)求數(shù)量與響應(yīng)時(shí)間成正比;其它狀態(tài)時(shí),S =〇;
[0021] 通過(guò)增加臨界遞減因子可以抑制服務(wù)器進(jìn)入飽和狀態(tài),在實(shí)現(xiàn)的程序中,禁止負(fù) 載權(quán)值為1的計(jì)算服務(wù)器參加下一階段的請(qǐng)求分配過(guò)程,這樣就避免了服務(wù)器上原有的請(qǐng) 求任務(wù)受系統(tǒng)能力飽和影響出現(xiàn)響應(yīng)時(shí)間急劇增加的情況,并對(duì)負(fù)載權(quán)值為1的計(jì)算服務(wù) 器進(jìn)行警告,如果多臺(tái)計(jì)算服務(wù)器進(jìn)行警告,則啟動(dòng)冗余備份的服務(wù)器來(lái)分擔(dān)請(qǐng)求負(fù)載。
[0022] c、計(jì)算下階段每個(gè)計(jì)算服務(wù)器應(yīng)被分配的請(qǐng)求個(gè)數(shù):設(shè)定達(dá)到負(fù)載均衡狀態(tài)時(shí)計(jì) 算服務(wù)器Si分配的請(qǐng)求個(gè)數(shù)為^,負(fù)載為Z;; JF,即下階段計(jì)算服務(wù)器Si應(yīng)被分配的請(qǐng)求個(gè) 數(shù);在計(jì)算服務(wù)器SiI通過(guò)網(wǎng)頁(yè)監(jiān)控軟件檢測(cè)得到當(dāng)前分配的請(qǐng)求個(gè)數(shù)Iii,測(cè)得當(dāng)前負(fù)載Li,設(shè)定每臺(tái)計(jì)算服務(wù)器在相同時(shí)間t內(nèi)響應(yīng)客戶端請(qǐng)求個(gè)數(shù)相同,其中,t〈T_,因此,分配 的請(qǐng)求個(gè)數(shù)的變化與負(fù)載變化是一致的,如式(V )所示:
[0029] 對(duì)6取整,即得下階段計(jì)算服務(wù)器SiS被分配的請(qǐng)求個(gè)數(shù);
[0030] d、計(jì)算每個(gè)計(jì)算服務(wù)器分配權(quán)值:分配權(quán)值是指計(jì)算服務(wù)器應(yīng)被分配的請(qǐng)求個(gè)數(shù) 與KVM虛擬化集群應(yīng)達(dá)到的請(qǐng)求個(gè)數(shù)的比值,計(jì)算出計(jì)算服務(wù)器Si的分配權(quán)值V】,計(jì)算公 式如式(W)所示:
[0032] 求取每個(gè)計(jì)算服務(wù)器的分配權(quán)值,找到最小的分配權(quán)值對(duì)應(yīng)的計(jì)算服務(wù)器。
[0033] 動(dòng)態(tài)請(qǐng)求分配算法的主要思想是動(dòng)態(tài)監(jiān)測(cè)請(qǐng)求任務(wù)被分配后對(duì)各個(gè)計(jì)算服務(wù)器 工作負(fù)荷造成的影響,通過(guò)反饋計(jì)算服務(wù)器實(shí)際的工作負(fù)載狀態(tài),再結(jié)合設(shè)定的計(jì)算服務(wù) 器固有處理能力,負(fù)載均衡服務(wù)器計(jì)算出每臺(tái)計(jì)算服務(wù)器當(dāng)前的分配權(quán)值,找到最小的分 配權(quán)值對(duì)應(yīng)的計(jì)算服務(wù)器,以達(dá)到負(fù)載均衡的目的。
[0034] 根據(jù)本發(fā)明優(yōu)選的,所述網(wǎng)頁(yè)監(jiān)控軟件是指httpwatch。
[0035] 本發(fā)明的有益效果為:
[0036] 本發(fā)明所述方法針對(duì)到達(dá)客戶端的新的任務(wù)請(qǐng)求,根據(jù)KVM虛擬化集群虛擬機(jī)當(dāng) 前負(fù)載狀況動(dòng)態(tài)選擇最優(yōu)計(jì)算服務(wù)器,構(gòu)建管理性和高擴(kuò)展性的KVM虛擬化集群計(jì)算服務(wù) 器。利用動(dòng)態(tài)請(qǐng)求分配算法,動(dòng)態(tài)監(jiān)測(cè)請(qǐng)求任務(wù)被分配后對(duì)各個(gè)計(jì)算服務(wù)器工作負(fù)荷造成 的影響,通過(guò)反饋計(jì)算服務(wù)器實(shí)際的工作負(fù)載狀態(tài),再結(jié)合設(shè)定的計(jì)算服務(wù)器固有能力,負(fù) 載均衡服務(wù)器計(jì)算出每臺(tái)計(jì)算服務(wù)器分配權(quán)值,找到最小的分配權(quán)值對(duì)應(yīng)的計(jì)算服務(wù)器, 并將到達(dá)客戶端的新的任務(wù)請(qǐng)求分配給該計(jì)算服務(wù)器,達(dá)到了負(fù)載均衡的目的。本發(fā)明解 決了虛擬化管理環(huán)境中虛擬機(jī)之間負(fù)載分配不均衡的問(wèn)題,提高了服務(wù)器虛擬資源的利用 率。
【具體實(shí)施方式】
[0037] 下面結(jié)合實(shí)施例對(duì)本發(fā)明作進(jìn)一步限定,但不限于此。
[0038] 實(shí)施例1
[0039] 一種基于KVM虛擬化集群的負(fù)載均衡方法,該方法在一臺(tái)服務(wù)器上運(yùn)行,在所述 服務(wù)器上構(gòu)建KVM虛擬化集群,所述KVM虛擬化集群包括一臺(tái)客戶端、一臺(tái)負(fù)載均衡服務(wù) 器、若干臺(tái)計(jì)算服務(wù)器及一臺(tái)存儲(chǔ)服務(wù)器;在負(fù)載均衡服務(wù)器中搭建LNMP環(huán)境,配置nginx 的nginx. conf文件實(shí)現(xiàn)反向代理;在負(fù)載均衡服務(wù)器中安裝jdk,搭建java運(yùn)行環(huán)境,通 過(guò)"qemu+ssh://"的方式連接若干臺(tái)計(jì)算服務(wù)器,利用java編程調(diào)用KVM的libvirt-java 開發(fā)接□獲取每臺(tái)計(jì)算服務(wù)器的配置信息、CPU使用率、網(wǎng)絡(luò)寬帶使用率、響應(yīng)時(shí)間、負(fù)載, 所述配置信息包括內(nèi)存memory、CPU個(gè)數(shù)cpus、每個(gè)節(jié)點(diǎn)的CPU socket數(shù)目sockets、每個(gè) sockets的核數(shù)cores、超線程threads、期望的CPU頻率mhz ;
[0040] 具體步驟包括:當(dāng)客戶端訪問(wèn)負(fù)載均衡服務(wù)器時(shí),負(fù)載均衡服務(wù)器調(diào)用KVM的 libvirt-java開發(fā)接口并使用SSH遠(yuǎn)程協(xié)議獲得各個(gè)計(jì)算服務(wù)器的負(fù)載,利用動(dòng)態(tài)請(qǐng)求 分配算法找