VMware Cloud Director 放置引擎可確定將 vApp 中的虛擬機器 (VM) 放置在哪個資源 (包括資源集區、資料存放區以及網路或網路集區) 中。引擎會根據每個虛擬機器需求為 vApp 中的每個虛擬機器單獨做出放置決策。

放置引擎會在下列案例中執行。
備註: VMware Cloud Director 會根據每個虛擬機器的需求單獨放置 vApp 中的虛擬機器。
  • 建立虛擬機器時,放置引擎會確定要將虛擬機器放置在哪個資源集區、資料存放區和網路集區中。
  • 啟動虛擬機器時,如果虛擬機器無法開啟電源,則 VMware Cloud Director 會選擇性地將虛擬機器移至另一個資源集區、資料存放區或網路集區。
  • 編輯虛擬機器以變更其資料存放區、資源或網路組態時,VMware Cloud Director 可能會將該虛擬機器移至支援新虛擬機器設定的不同資料存放區和資源集區。僅當目前資源無法支援新需求時,VMware Cloud Director 才會移動虛擬機器。
  • 將虛擬機器移轉到不同的資源集區時。
  • 當組織虛擬資料中心 (VDC) 探索到在支援該 VDC 的任何 vCenter Server 資源集區中建立的虛擬機器時,系統會建構一個簡化 vApp 以包含每個探索到的虛擬機器。
放置引擎會使用下列準則選取虛擬機器適用的候選資源集區。
  • CPU 容量
  • 記憶體容量
  • 虛擬 CPU 數目
  • 主機支援且提供者 VDC 允許的硬體版本
  • 相似性規則

放置引擎會從候選清單中篩選出已停用的資源集區。如果可能,VMware Cloud Director 會將虛擬機器與組織 VDC 中的其他虛擬機器放置在同一主機叢集上。

放置引擎會使用下列準則選取虛擬機器適用的候選資料存放區。
  • 儲存容量
  • 儲存區原則
  • 虛擬機器之間的相似性需求
  • IOPS 容量和虛擬機器磁碟 IOPS (如果啟用了 IOPS)

在大多數情況下,放置引擎會從候選清單中篩選出已停用的資料存放區和達到紅色臨界值的資料存放區。從 vCenter Server 中匯入虛擬機器時,引擎不會篩選出這些資料存放區。

放置引擎會使用網路名稱選取 vApp 及其虛擬機器適用的候選網路集區。

放置引擎選取一組候選資源後,會為資源排列順序,然後根據每個虛擬機器的 CPU、虛擬 RAM 以及儲存空間組態,挑選每個虛擬機器的最佳位置。

排列資源的順序時,放置引擎會檢驗目前與預計的未來資源使用量。預計的未來使用量是根據目前放置在特定資源集區上的關閉虛擬機器,以及機器啟動後的預期使用量一起計算得出。對於 CPU 與記憶體,放置引擎會考慮目前未保留容量、最大使用量以及預計的未來未保留容量。對於儲存區,引擎會考慮每個資源集區所屬叢集提供的彙總佈建容量。然後,放置引擎會考慮每個資源集區目前適合性及未來適合性的加權度量。

需要移動時,放置引擎會偏好具有最多未保留 CPU、記憶體和儲存容量的資源集區。它也會給予黃色叢集較低的偏好,只有在沒有符合放置準則的可用健全叢集時,才會選取黃色叢集。從 vCenter Server 中匯入虛擬機器時,如果虛擬機器放置令人滿意,則為盡量減少移動,引擎會忽略臨界值。

開啟虛擬機器電源時,VMware Cloud Director 會嘗試在其目前位置開啟電源。如果 vCenter Server 報告主機 CPU 和記憶體容量錯誤,則 VMware Cloud Director 會嘗試資源集區兩次,然後再嘗試將虛擬機器移至組織 VDC 上的其他相容資源集區。重新執行放置引擎以嘗試找到相容的資源集區時,VMware Cloud Director 會排除之前嘗試過且失敗的資源集區。如果沒有合適的資源集區連線到 VMDK 所在的資料存放區,則將虛擬機器移至另一個資源集區可能會導致虛擬機器的 VMDK 移轉到其他資料存放區。如果虛擬機器無法放置在所有滿足虛擬機器需求的位置,則 VMware Cloud Director 將傳回一則錯誤訊息,指示放置不可行。如果與目前資料存放區具有相似性,但該資料存放區不可用,則放置引擎會傳回一則訊息,指示放置不可行。如果系統接近滿負荷運行,並且建議的解決方案目前不滿足所有需求,這是系統的正常狀態。若要修復錯誤,您可以新增或釋放資源並起始重試。當不需要特定的資料存放區時,放置引擎會在候選主機叢集或資源集區中選取滿足儲存區原則、儲存區容量和 IOPS 容量等其他需求的資料存放區。

在資源集區接近容量的同時部署情況中,即使資源集區缺少足以支援虛擬機器的資源,仍可能成功驗證該資源集區。在這種案例中,虛擬機器將無法開啟電源。如果在這種情況下虛擬機器無法開啟電源,並且有多個資源集區支援 VDC,若要提示 VMware Cloud Director 將虛擬機器移轉到其他資源集區,請再次啟動開啟電源作業。

當資源集區所屬的叢集接近容量時,如果沒有個別主機能為該資源集區上虛擬機器的開啟電源作業提供足夠的容量,此虛擬機器可能無法開啟電源。這種情形會因為叢集層級的容量分段而產生。在此類情況下,系統管理員必須將一些虛擬機器從叢集中移轉出來,使叢集維持足夠的可用容量。

虛擬機器放置引擎演算法

放置演算法會從主機叢集清單中挑選主機叢集,這些主機叢集具有所需的可用儲存區設定檔,並且滿足任何現有的虛擬機器-虛擬機器、虛擬機器-主機相似性或反相似性規則。 VMware Cloud Director 透過各種分數計算放置解決方案。若要變更引擎的行為,您可以使用儲存格管理工具來變更以底線 (_) 符號開頭的可設定參數。
  1. 對於每個主機叢集,工作負載放置引擎會計算 capacityScorefutureCapacityScorereservationScore。放置引擎會分別計算每個 CPU、記憶體和儲存區的分數。
    capacityScore: (not available in some cases ) 
    
    CPU = (cpuUnreservedCapacityMHz - (cupBurstMHz * _cpuBurstRatio)) / cpuRequirementMHz 
    Memory = (memoryUnreservedCapacityMB - (memBurstMB * _memoryBurstRatio)) / memRequirementMB 
    Storage = storageFreeCapacityMB / stgRequirementMB 
    
    futureCapacityScore (not available in some cases) 
    
    CPU = (cpuUnreservedCapacityMHz - (cpuUndeployedReservationMHz * _futureDeployRatio)) / cpuRequirementMHz 
    Memory = (memoryUnreservedCapacityMB - (memUndeployedReservationMB * _futureDeployRatio)) / memRequirementMB 
    Storage = storageFreeCapacityMB / stgRequirementMB 
    
    reservationScore: (used for capacityScore and futureCapacityScore when those scores are unavailable) 
    
    CPU = cpuUnreservedCapacityMHz / cpuRequirementMHz 
    Memory = memoryUnreservedCapacityMB / memRequirementMB 
    Storage = storageFreeCapacityMB / stgRequirementMB 
  2. 對於每個主機叢集,放置引擎會計算 CPU、記憶體和儲存區的 weightedCapacityScore
    weightedCapacityScore = capacityScore * _currentScoreWeight + futureCapacityScore * (1 - _currentScoreWeight)

    每個 weightedCapacityScore 都是介於 0 和 1 之間的比率,值越高表示可用資源越多。可以跨不同的資源類型 (例如 CPU、記憶體和儲存區) 比較 weightedCapacityScore 值,因為它們表示無單位的可用性度量。weightedCapacityScore 越高,表示主機叢集中相應資源的可用性越高。

  3. 放置引擎會驗證是否具有足夠的 CPU、記憶體和儲存區資源。
    totalAvailable * _[memory|cpu|storage]headRoom < free / UnreservedCapacity
  4. 放置引擎會根據 weightedCapacityScore 對主機叢集清單進行排序,將限制最小的主機叢集排在最前面,將限制最大的主機叢集排在最後。
  5. 放置引擎會處理清單中的每個主機叢集。
    • 如果必須避免使用主機叢集 (例如,由於反相似性規則),引擎會將其新增到 avoidHubList
    • 如果主機叢集沒有足夠的額外資源,引擎會將其新增到 noHeadRoomHubList
    • 如果主機叢集是慣用叢集 (例如,由於強相似性規則或目前主機叢集),引擎會將其新增到 preferredHubList
    • 所有其他主機叢集會移至 acceptableHubList

    在每個清單中,最慣用的主機叢集排在最前面,最不慣用的主機叢集排在最後。

  6. 引擎會整合這四個清單。

    preferredHubList + acceptableHubList + noHeadRoomHubList + avoidHubList

    引擎會對產生的清單進行排序 (將主機叢集按慣用度從高到低依次排序)。

  7. 放置引擎從清單中挑選排名最高的主機叢集作為目標集線器。

可調整的參數

若要影響各種選取演算法臨界值,可以自訂幾個參數。但是,只有對 VMware Cloud Director 作業有深入瞭解的服務提供者管理員才能嘗試變更這些參數的預設值,因為這可能會產生未預期的意外結果。首先在非生產環境中測試所有參數變更。

可使用儲存格管理工具自訂以下參數。

參數 描述
vcloud.placement.ranking.currentScoreWeight 主機叢集分數的目前組成部分的相對重要性。該值必須在 [0.1] 內。值為 0 時,引擎僅根據未來分數對主機叢集進行排名。值為 1 時,引擎僅根據目前分數對主機叢集進行排名。預設值為 0.5。

vcloud.placement.ranking.memoryBurstRatio

vcloud.placement.ranking.cpuBurstRatio

虛擬機器中配置超出保留的百分比,排名程式會使用該值來估算叢集負載。該值介於 0 到 1 之間。0 表示虛擬機器僅使用其保留區。1 表示虛擬機器非常繁忙。預設值為 0.67。
vcloud.placement.ranking.futureDeployRatio 該主機叢集上預計要部署並耗用記憶體和 CPU 的虛擬機器的百分比。該值介於 0 到 1 之間。預設值為 0.5。

vcloud.placement.ranking.memoryHeadRoom

vcloud.placement.ranking.cpuHeadRoom

vcloud.placement.ranking.storageHeadRoom

這些參數可控制在主機叢集上保留額外資源以用於增長。引擎將餘量定義為未保留資源的比率。例如,如果 vcloud.placement.ranking.memoryHeadRoom 為 0.2,則在主機叢集的可用資源低於 20% 後,引擎會將其視為記憶體餘量不足的叢集,並將其排在其他主機叢集後面。該值必須介於 0 到 1 之間。預設值為 0.2。

範例:
./cell-management-tool manage-config -n vcloud.placement.ranking.memoryHeadRoom -v 0.3