杜雅紅,郭 剛,羅 兵,李明杰
(中鐵信弘遠(北京)軟件科技有限責任公司,北京 100038)
隨著互聯網技術的高速發展,網絡規模不斷擴大,對計算機計算能力的要求越來越高,以數據中心為基礎的云計算技術得到了高速發展[1]。在目前的數據中心建設和應用中,大多數采用靜態調度算法對虛擬資源進行調度與分配。靜態調度算法是指虛擬機在創建、遷移的調度過程中,按照虛擬機類型來篩選目標物理主機,未根據虛擬機和物理主機的實際冷熱負載進行過濾。隨著數據中心的長期運營和虛擬資源的不斷分配,靜態調度算法無法根據物理主機當前的負載情況而調度,逐漸暴露出CPU、內存、塊存儲等基礎資源分配不均衡等問題,從而導致數據中心的負載不均衡[2]。
針對此問題,本文提出基于動態資源調度(DRS,Dynamic Resource Scheduler)算法的負載均衡解決方案,周期性獲取物理主機和虛擬機的相關監控指標,根據物理主機和虛擬機的實際負載狀態進行動態調整,盡量使物理主機資源使用率處于平均負載值附近,使各個物理主機的資源使用相對均衡。從而避免某些物理主機過載或過低載使用,實現數據中心的負載均衡。
DRS的基本要求是在不中斷業務和用戶基本無感知的情況下,在數據中心內對資源進行再調度,主要依賴于虛擬機在線遷移技術和資源監控技術。
運用DRS策略,保證虛擬機資源在不中斷用戶業務的情況下,在物理主機之間進行熱遷移[3],為實現資源動態調整提供可能[4]。遷移的基礎資源包括CPU、內存及塊存儲。遷移過程中可能會出現微秒級的業務中斷,但對業務的影響微乎其微。
根據存儲模式,分為基于共享存儲模式遷移和非共享存儲模式遷移。采用共享存儲模式的虛擬機遷移,只需要對CPU狀態復制、內存拷貝,無需進行塊存儲數據的遷移;采用非共享存儲模式的虛擬機遷移,除了上述操作外,還需要對塊存儲數據進行遷移,數據量較大的塊存儲在遷移過程中會占用大量的網絡帶寬,因此,對塊存儲遷移時需謹慎,防止影響系統服務質量[5]。
資源監控是利用計算機控制或通過代理軟件模式,監控數據中心所有虛擬機和物理主機運行狀態及負載情況,實現對數據中心資源狀況實時采集、分析、處理和存儲的一種技術[6]。本文在監控目標中安裝代理軟件,通過SNM、SSH、IPMI等協議,采集監控目標的基礎資源指標,如CPU使用率,內存使用量,硬盤使用量等,通過網絡傳輸給監控系統服務端,并對指標進行分析與處理后存儲于數據庫中。
按照觸發條件對物理主機進行分類,分為需要遷移的源物理主機和可以進行遷移的目標物理主機。源物理主機是指負載過高、導致無法保證其上運行的虛擬機的服務質量、進而影響用戶對云計算平臺應用體驗的物理主機[7-8];目標物理主機用于將源物理主機上的虛擬機遷移到該主機上,在保證其上運行的虛擬機服務質量的同時,提高物理主機的資源使用率[9-10]。
(1)周期性地從監控系統里獲取數據中心中物理主機和其上運行的虛擬機最近N個周期內的監控數據,計算出物理主機N個周期內平均負載值,將其作為該物理主機的負載值。
(2)對所有物理主機的負載值進行平均計算,得到平均負載值,將平均負載值乘以(1±ω)作為數據中心的負載閾值,這里,ω通常是某個具體項的資源平均值的百分比。將負載值高于負載閾值上限的物理主機作為需要調整的源物理主機,負載值低于負載閾值下限的物理主機作為虛擬機遷移的目標物理主機。
(3)根據源物理主機上運行的虛擬機已分配資源和實際負載值,計算每個虛擬機的得分,并結合源物理主機的負載值綜合篩選出適合遷移的虛擬機。
(4)在目標物理主機中,根據可分配資源和實際負載情況綜合計算,為需要遷移的虛擬機篩選合適的目標物理主機。如果有滿足虛擬機遷移條件的目標物理主機,則生成虛擬機指定目標物理主機的熱遷移任務;如果不滿足,則放棄對該虛擬機的遷移,為下一個虛擬機尋找合適的目標物理主機。
(5)對生成虛擬機指定目標物理主機熱遷移的任務進行模擬遷移操作,遷移后檢查源物理主機的負載值是否在負載閾值內。如果高于負載閾值上限,判斷源物理主機上是否為最后一臺虛擬機,如果不是,對下一個虛擬機進行尋找合適目標物理主機操作,返回(4);如果是,則放棄對該源物理主機的操作,對下一個需要調整的源物理主機進行操作,返回(3)。如果不高于負載閾值上限,判斷是否為最后一臺源物理主機,如果不是,則對下一個需要調整的源物理主機進行操作,返回(3);如果是,則執行(6)。
(6)為了防止虛擬機二次或鏈式遷移操作,虛擬機熱遷移之前,在遷移任務列表中執行消重或鏈式遷移任務消除操作,例如:虛擬機a從源物理主機A遷移到目標物理主機B,再從目標物理主機B遷移到目標物理主機C,進行消重操作,將虛擬機a直接從源物理主機A遷移到目標物理主機C并建立遷移任務依賴。
(7)模擬遷移結束后,執行虛擬機指定目標物理主機的熱遷移任務,實現數據中心的負載均衡。
2.2.1 遷移觸發條件
在數據中心應用環境下,通過監控系統監控并采集所有物理主機和虛擬機的CPU、內存、塊存儲等負載指標,設置平均負載的浮動值ω。
為了防止采集數據時由于網絡抖動或其他不穩定因素導致數據不正常,需要周期性從監控系統中獲取從t1~tN時間段中N個周期內M個物理主機的負載指標。
(1)計算數據中心里第i個物理主機N個周期內監控指標PMmetric(in)的平均值,將其作為負載值PMmetric(i)。

(2)對M個物理主機的監控指標負載值PMmetric(i)求平均,將其作為M個物理主機的平均負載值PMmetric_avg。

(3)將物理主機的負載值PMmetric(i)>PMmetric_avg·(1+ω) 的作為需要遷出虛擬機的源物理主機,PMmetric(i)<PMmetric_avg·(1-ω) 的作為需要遷入虛擬機的目標物理主機。
2.2.2 遷移虛擬機選擇
從源物理主機上選擇虛擬機進行熱遷移,以降低源物理主機的負載,使源物理主機的負載值處于負載閾值內:主要是結合虛擬機的虛擬機類型和實際負載值,計算出每個虛擬機的最終得分。從虛擬機列表中選擇在遷移時消耗代價最小的一個或多個進行遷移,遷移完成后,源物理主機的負載值處于負載閾值內即可。因此,遷移虛擬機的選擇主要考慮以下因素。
(1)根據源物理主機上第j個虛擬機的類型,對其分配的基礎屬性項(K)的屬性值進行歸一化后,乘以相應屬性的權重值wflavor,再求和,計算出該虛擬機的分配資源得分。例如,所選的虛擬機的K為3,分別為CPU、內存及塊存儲,其基礎屬性值為CPU、內存及塊存儲的分配值。

式(3)中,VM flavor表示根據虛擬機類型分配的基礎屬性值(CPU、內存、塊存儲等的分配值),設vms表示已分配在物理主機上的虛擬機個數。為vms個虛擬機中相應屬性的最大屬性值,為vms個虛擬機中相應屬性的最小屬性值;wflavor表示虛擬機類型的基礎屬性對應權重值,該值根據實際使用場景對CPU、內存、塊存儲等不同因素的需求設置相應權重值,權重范圍值為0~1,增加對應屬性的資源對整體優先級影響的比重。
(2)根據第j個虛擬機的實際負載值,對虛擬機監控的基礎指標值進行歸一化并乘以其相應的權重kmetric,再求和,計算出該虛擬機的實際負載得分。

式(4)中,VMmetric(j)表示該虛擬機的資源實際使用值,如虛擬機的CPU使用率、內存使用量、硬盤使用量。為vms個虛擬機中相應資源實際使用值的最大值,為vms個虛擬機中相應資源實際使用值的最小值;kmetric表示相應監控指標的權重值,可以根據實際使用場景,對CPU、內存、存儲等不同因素設置對應的權重值,權重范圍值為0~1,增加對應屬性的資源對整體優先級影響的比重。
將虛擬機j的分配資源得分加上其實際負載得分,計算出該虛擬機的最終得分:

根據最終得分,從小到大依次選擇虛擬機,為虛擬機選擇合適的目標物理主機并進行模擬遷移,遷移后,如果該虛擬機所在的源物理主機負載值仍高于負載閾值的閾值上限,則選擇下一個虛擬機進行模擬遷移。
2.2.3 目標物理主機選擇
目標物理主機的選擇對DRS算法至關重要,將直接關系到負載均衡的效果。假如選擇的目標物理主機不理想并造成不必要的遷移,則可能造成二次遷移甚至鏈式遷移,增加其他物理主機的工作負擔。選擇物理主機的負載值低于負載閾值的閾值下限,且虛擬機遷移到該物理主機后,該物理主機的負載值不超過負載閾值的閾值上限,作為虛擬機遷移的目標物理主機。
在不影響數據中心采用靜態調度算法對資源分配與運行的前提下,選擇目標物理主機時需要考慮諸多因素。
(1)基于虛擬機類型進行過濾,篩選滿足待遷移虛擬機類型的目標物理主機。

式(6)中,PM flavor(i)表示目標物理主機的實際物理資源,flavor表示CPU、內存、塊存儲等屬性,PM flavor_ratio表示目標物理主機對應屬性的超配比值,PMavail_flavor(i)表示該目標物理主機剩余可用資源,如果PMavail_flavor(i)的所有屬性值都大于待遷移虛擬機的對應屬性值,則該目標物理主機滿足虛擬機遷移條件,將其列入目標物理主機列表。
(2)虛擬機遷移到目標物理主機后,可能會導致該目標物理主機的負載超出負載閾值的上限。為此,在通過虛擬機類型篩選出滿足虛擬機資源分配的目標物理主機后,需在此基礎上根據待遷移的虛擬機負載值篩選出最終合適的目標物理主機。一臺虛擬機遷移到某個目標物理主機后,目標物理主機資源使用情況如式(7)。

(3)虛擬機遷移到目標物理主機后,目標物理主機的資源負載值若小于負載閾值的上限,即PM′metric(i)<PMmetric_avg·(1+ω),則該物理主機滿足該虛擬機的遷移條件,將其加入目標物理主機列表,再尋找下一個目標物理主機;否則,直接尋找下一個目標物理主機;直到沒有合適的目標物理主機為止。
根據式(8),對目標物理主機進行歸一化計算,并計算各物理主機的得分。從其中選擇得分最高的物理主機作為最終的目標物理主機。式(8)中,m為目標物理主機的數量。

(4)虛擬機遷移到目標物理主機后,該目標物理主機資源負載低于負載閾值的閾值上限,則將虛擬機添加到遷移列表,否則選擇下一個目標物理主機進行模擬遷移,直到所有物理節點的負載相對均衡為止。
在實驗中,每個物理主機具有相同的配置,CPU為32核,內存為256 GB。CPU和內存超配比分別為4.0和1.5,后端對接Ceph分布式存儲。每個物理主機的虛擬機在10~20臺間隨機分配,每個虛擬機的內存分配容量為2~128 GB,CPU在1~32核間隨機分配。物理主機的數量隨實驗要求而變化,負載均衡浮動值ω為平均負載值乘以5%,閾值范圍為平均負載值±ω,CPU和內存的權重值均為1.0。實驗中,使用的是共享存儲,因此沒有把硬盤使用量加入算法中。DRS算法主要采用Python語言編程實現。
在虛擬機中模擬計算密集型、I/O密集型等任務,產生不同的虛擬資源利用率。數據中心負載均衡與否可由負載均衡度(LB)的大小來判斷,LB越小,表示數據中心的負載越趨于均衡。LB可由式(9)計算。

式(9)中,M為物理主機數,CPUutil(i)表示第i個物理主機的CPU資源實際使用率,CPUavg表示數據中心中所有物理主機的CPU資源實際使用率的平均值,MEMusage(i)表示第i個物理主機的內存資源實際使用量,MEMavg表示數據中心中所有物理主機的內存資源實際使用量的平均值。
3.2.1 使用不同調度算法的負載均衡度
圖1是在物理主機數量為100臺,ω為平均負載值乘以5%的情況下,靜態調度算法和DRS算法的LB值對比。由于每個源物理主機分配的虛擬機數量有所區別,虛擬機所需要的資源也不同,各個算法的調度機制不同,對每個算法中的資源項進行歸一化處理。由圖1可以看出,使用DRS算法進行調整后的LB值始終低于使用靜態調度算法進行調整后的LB值。結果表明,DRS算法比靜態調度算法更加有效。

圖1 不同算法的負載均衡度對比
3.2.2 不同物理主機數量的負載均衡度
不同物理主機數量下,不同算法的負載均衡度比較如圖2所示。在物理主機數量分別為50臺、100臺、150臺、200臺,ω 為平均負載值乘以5%的情況下,隨著物理主機數量的變化,DRS算法能夠使LB值依舊保持較快的速度下降,進行多次負載均衡后,LB值在一定范圍內趨于穩定,說明DRS算法能夠將高負載物理主機上的部分虛擬機遷移到低負載物理主機上,可以有效改善數據中心的負載均衡度。LB值的下降速度由待遷移虛擬機的數量、遷移后物理主機的負載值來決定,因此,不同物理主機數量下LB值的下降速度均不一樣。由此可見,隨著數據中心規模的增大,基于DRS算法實現負載均衡的優勢更加明顯。

圖2 不同物理主機數下DRS算法的負載均衡度對比
3.2.3 使用DRS算法的物理主機資源使用狀態
圖3是物理主機數量為100臺的情況下未使用DRS算法的物理主機資源使用狀態圖。可以看出,采用靜態調度算法對虛擬機進行調度與分配,造成每個物理主機上負載差異很大,部分物理主機負載很高,可能導致虛擬機的工作質量得不到保障,部分物理主機上負載很低,造成數據中心資源使用率整體不高,從而導致數據中心負載不均衡。

圖3 未使用DRS算法的物理主機資源使用狀態
圖4是物理主機數量為100臺的情況下,使用DRS算法的物理主機資源使用狀態圖。采用DRS算法對虛擬機進行再調度與分配,每個物理主機的負載均處于負載浮動區間范圍內,與采用靜態調度算法相比,數據中心的負載更加趨于均衡,虛擬機的工作質量也可以得到有效保證。

圖4 使用DRS算法的物理主機資源使用狀態
本文基于DRS算法,使數據中心的負載均衡,并結合實際生產環境進行驗證。實驗結果表明,在相同物理主機數量情況下,采用DRS算法的負載均衡度始終低于靜態調度算法的負載均衡度;在不同物理主機數量情況下,采用DRS算法,隨著物理主機數量的增多,負載均衡度越低,數據中心的負載越趨于平衡。該算法具有有效性和穩定性,可以周期性地進行資源動態調度,實現數據中心的負載相對均衡。
由于數據中心不同,環境差異性較大,實際運行的業務系統類型也存在很大差異,因此,一些具體的監控指標需要根據實際環境進行調整。目前,該方案已在現場應用,取得了良好的應用效果。在今后的研究中,將進一步對各項指標的權值和影響因子進行研究與調整,結合人工智能等相應算法,通過對歷史數據的不斷學習,實現更高效的資源調度,進一步提升數據中心資源使用率和調度速度。