VMware EVC 模式的工作原理:完整概述

如果您熟悉vMotion功能,您可能还记得建议的做法是在所有ESXi服务器上使用相同的处理器进行虚拟机实时迁移。如果您想在集群中使用具有不同处理器型号的服务器,最好部署同一代的处理器。此外,严格的要求是处理器必须由同一供应商制造,例如英特尔或AMD。否则,在使用vMotion时可能会出现错误。

VMware设计了他们的vSphere软件,考虑到在生产环境中可能出现的情况,包括通过添加具有不同处理器的新服务器来扩展集群。这是一种常见情况——想象一下,您有一个5个ESXi节点的集群,您在3年前购买了,您需要添加两个节点来运行更多的虚拟机以满足业务需求。您在3年前购买的处理器目前已不再生产,并且不再在市场上销售;您只能购买最新系列的处理器。没有理由担心——您可以在vSphere中使用高可用性集群,在具有不同处理器的主机之间使用vMotion进行虚拟机实时迁移。这是可能的,因为VMware vSphere中的集群可以启用增强的vMotion功能(EVC)

VMware EVC模式的工作原理

每一代新一代的處理器都包含了新增的指令集,除了上一代處理器的指令集。新功能通常會提高執行應用程序的性能或安全性。例如,與Haswell世代的處理器相比,SkyLake世代的處理器有一個新的指令集(SGX)。讓我們來看看這兩個處理器世代的指令集並探索其細節。

Haswell(2013)指令集:

x86-64,MMX,AES-NI,CLMUL,FMA3,SSE,SSE2,SSE3,SSSE3,SSE4,SSE4.1,SSE4.2,AVX,AVX2,TXT,VT-x,VT-d。 由於一個錯誤,Haswell處理器的TSX指令通過微碼被禁用,除了Haswell-EX。

SkyLake(2017)指令集:

x86-64,MMX,AES-NI,CLMUL,FMA3,SSE,SSE2,SSE3,SSSE3,SSE4,SSE4.1,SSE4.2,AVX,AVX2,TXT,TSXSGX,VT-x,VT-d。

這意味著如果您在EVC設置中選擇Haswell兼容級別,那麼在擁有Skylake處理器的伺服器上必須禁用(屏蔽,更準

一方面,在啟用 Haswell EVC 模式時,SGX 指令集的優勢會喪失,但另一方面,如果您向叢集添加具有更新處理器的主機,現有叢集的性能不會降低。如果您向現有叢集添加具有舊處理器的 ESXi 主機,則在特定情況下可能會注意到性能降低。

注意: SGX(軟件保護擴展)允許您為保護應用程序中的受保護代碼和數據片段(也稱為飛地)組織,以確保應用程序對抗駭客攻擊時擁有高水平的數據保護。使用 SGX 指令來開發其應用程序的開發人員可以保護應用程序免受未經許可的訪問或修改,即使攻擊者應用程序具有更高的權限也是如此。

注意: TSX(事務同步擴展)確保將運行任務的大部分移至處理器核心之間的資源分配到硬件層面(CPU 本身)。如果處理器不支援 TSX 指令,則此分配將由操作系統和應用程序在軟件層面上執行。如果通過微碼為 Haswell 處理器禁用了 TSX 指令集,則您可能需要將 EVC 模式設置為舊版(Ivy Bridge)。

一般而言,運行中的虛擬機器必須關機並重新啟動,以應用更改的 EVC 模式設置。如果您使用 vCenter 4.1 或更新版本,則在具有最老處理器的 ESXi 主機上運行的虛擬機器可能不會關機(您可以讓它們保持運行狀態)。在這種情況下,EVC 模式必須與該最老處理器的世代相等。必須在整個集群中啟用 EVC 模式之前,必須關閉具有更新 CPU 功能的虛擬機器,這些虛擬機器運行在具有更新 CPU 功能的 ESXi 主機上。當 ESXi 主機從集群中排除時,它將繼續使用禁用的 EVC 模式。

VMware vSphere 版本 / EVC 的 CPU 兼容性

所需的 EVC 模式取決於處理器型號和vCenter Server版本。最新版本的 vCenter Server 上的 EVC 模式支持最新的處理器。如果您的服務器使用最新世代的處理器,請考慮使用最新版本的 vCenter。在下表中,您可以查看哪些組合的 Intel 處理器世代和 vCenter 版本支持確定環境的 EVC 集群基準。

最適合的EVC模式是由集群內ESXi伺服器中最老處理器的型號確定的。從技術上講,可以選擇比最老處理器的世代更老(更低)的EVC模式,但通常沒有理由進行這樣的設置。舊版本的ESXi和vSphere支持新的處理器,但在釋出該vSphere版本時被認為是最新的那些舊處理器的EVC基線是保留在那個級別上的。

當您改變EVC模式的級別時,您應該關閉並重新啟動運行中的虛擬機以將這些設置應用到這些虛擬機;重新啟動虛擬機是不夠的。

VMware兼容性指南

您可以在 VMware 的网站上检查您的处理器的兼容性以及您的 vCenter 服务器的最高可能的 EVC 模式。为了检查兼容性,请打开VMware 兼容性指南页面,在下拉菜单中选择CPU 系列(即您要查找的内容),在产品发布版本列表中选择您的 ESXi 版本,在CPU 系列列表中按住Ctrl按钮并选择已安装在您的 ESXi 主机上的处理器(单击鼠标左键)。一旦您选择了必要的参数,点击CPU/EVC 矩阵按钮即可查看您的 ESXi 服务器可用 EVC 模式的表格。在下面截图所示的示例中,已选择了 ESXi 6.5(由 vCenter 6.5 管理),Intel Xeon E3-1500-v5、Xeon E5-4600-v3 和 Xeon Platinum 8100 处理器。所有选择的处理器支持的 EVC 模式的最高级别是Intel Haswell 世代

要求

启用 EVC 模式后使 vMotion 正常工作,必须满足以下要求:

  • 所有 ESXi 主机的处理器必须仅为 Intel 或 AMD。
  • ESXi 主机的 UEFI/BIOS 中必须启用处理器虚拟化功能,如 Intel VT-x 或 AMD-V。
  • ESXi 主机必须由同一 vCenter 服务器管理。
  • ESXi 主机必须配置为使用 vMotion。如何启用和配置 EVC

如何啟用和配置EVC

在熟悉了理論之後,讓我們來實際檢視EVC模式的配置。您可能需要關閉在其EVC等級必須降級的ESXi主機上的虛擬機器。請確保在UEFI/BIOS中沒有禁用處理器功能,以避免可能出現的問題。

通過在瀏覽器的地址欄中輸入vCenter Server的IP地址來在網頁瀏覽器中打開VMware vSphere Web Client。轉到vCenter > 主機和叢集,並選擇每個ESXi主機以驗證CPU(中央處理器)配置。在當前示例中,我們考慮兩個運行ESXi 5.5的主機,它們已添加到叢集並由vCenter Server 5.5管理。如下面的屏幕截圖所示,第一個ESXi主機的處理器型號是Intel Xeon E3110,第二個ESXi主機上安裝的處理器是Intel Xeon X3430

如果ESXi主機已經添加到叢集中,請選擇您的叢集(在我們的示例中為temp-cluster),點擊管理選項卡,然後打開設置選項卡,選擇配置 > VMware EVC,並點擊編輯按鈕。

在 vCenter 中選擇 EVC 模式之前,在您的網頁瀏覽器中開啟一個新的標籤,並像這篇部落格文章中所示開啟 VMware 相容性指南。在當前的範例中,我們應該選擇 ESXi 5.5、Intel Xeon 31xx 系列和 Intel Xeon 34xx 系列。點擊 CPU/EVC 矩陣按鈕後,您可以在螢幕截圖中看到應該在 EVC 模式設定中選擇 Intel Penryn 世代。

回到您的網頁瀏覽器標籤,打開該叢集的 EVC 模式設定。點擊啟用 Intel 主機的 EVC。在 VMware EVC 模式的下拉選單中,我們應該選擇 Intel Penryn 世代。在視窗底部,您應該在相容性部分看到驗證成功的訊息。現在您可以按下確定來保存 EVC 模式設定。

之後,在 VMware EVC 部分,將顯示 VMware EVC 已啟用的資訊。點擊目前 CPUID 詳細資訊以展開包含有關寄存器和遮罩值的部分。

在建立新叢集時也可以啟用 EVC 模式;VMware 將此可能性宣揚為推薦作法。在建立新叢集時啟用 EVC 模式可防止您遇到與關閉和遷移叢集中正在運行的 VM 相關的問題(您記得,通常必須關閉並啟動 VM 以應用新的 EVC 設定)。

CPUID 遮罩

除了應用於整個叢集中所有VM和ESXi主機的全局EVC模式外,vCenter Server還允許您為自定義VM手動配置CPUID標誌。vCenter會將為VM設置的CPUID參數與目標ESXi主機上可用的CPUID參數進行比較。如果這些參數相同,則允許使用vMotion進行VM遷移。CPUID遮罩功能比EVC模式功能更老。

為了為VM配置CPUID遮罩,請執行以下操作:

選擇必要的VM,右鍵單擊VM並選擇編輯設置。在打開的編輯設置窗口中,打開虛擬硬件> CPU,選擇 CPUID遮罩,並點擊高級

CPU識別遮罩窗口中,選擇必要的寄存器字符串,並點擊值以在位級別上編輯遮罩。點擊說明按鈕以查看用於設置遮罩的每個字符的含義。

注意!請在熟悉VMware知識庫或VMware支持說明之前不要編輯遮罩。手動編輯CPU兼容性遮罩可能導致不受支持的VM配置。例如,Windows VM可能會出現藍屏。

檢查PowerCLI中EVC模式的配置

您可以使用以下命令在VMware PowerCLI中檢查整個叢集和自定義VM的EVC模式配置:

Get-VM | 選擇名稱,硬件版本,

@{Name=’VM_EVC_Mode’;Expression={$_.ExtensionData.Runtime.MinRequiredEVCModeKey}},

@{Name=’Cluster_Name’;Expression={$_.VMHost.Parent}},

@{Name=’Cluster_EVC_Mode’;Expression={$_.VMHost.Parent.EVCMode}} | ft

您也可以在运行以下命令后检查集群中所有主机支持的最大 EVC 级别:

Get-VMHost | Select-Object Name,ProcessorType,MaxEVCMode

每个 VM 的 EVC 模式

上述考虑的 EVC 模式是一个集群级选项。VMware vSphere 6.7 提供了设置每个 VM 的 EVC 模式的能力,这对于在不同集群或 vCenter 服务器之间迁移 VM 并为您提供更多细粒度的控制是有用的。每个 VM 的 EVC 模式被设置为虚拟机设置的属性,并为必须使用 vMotion 迁移的 VM 提供更多灵活性。VM 硬件兼容性必须是版本 14 或更高。每个 VM 的 EVC 模式的配置保存在 VM 的 VMX 配置文件中,其中包含 featMask.vm.cpuid 字符串的行。当具有配置的每个 VM 的 EVC 模式的 VM 迁移时,存储在 VMX 文件中的 EVC 配置也会随 VM 迁移。当 VM 关闭电源时,可以更改每个 VM 的 EVC 模式设置(关闭并重新打开 VM 以应用更改的每个 VM 的 EVC 模式设置)。

如果您為已配置全局 EVC 模式的叢集中的虛擬機啟用每個虛擬機 EVC 模式,則每個虛擬機 EVC 模式可以等於或低於整個叢集中設置的 EVC 模式。因此,可以同時配置全局和每個虛擬機 EVC 模式。克隆虛擬機後,每個虛擬機 EVC 設置將與虛擬機一起克隆。

為了配置每個虛擬機的 EVC 模式,打開 VMware vSphere HTML5 客戶端,轉到主機和叢集,然後選擇必要的虛擬機。打開配置選項卡,選擇更多 > VMware EVC,然後點擊編輯

如何在叢集中啟用 EVC 模式而無需停機

在某些情況下,您可以在整個叢集中啟用 EVC 模式而無需任何虛擬機停機(通常,必須關閉虛擬機並啟動才能應用叢集 EVC 模式設置)。如果滿足以下要求,則可以實現這一點:

  • 運行的虛擬機位於具有最老處理器的 ESXi 主機上
  • 叢集中的 EVC 模式配置為使用與最老處理器世代匹配的 CPU 指令集

為 vCenter VM 啟用 EVC 模式

您可能會在 VMware vSphere 環境中遇到以下常見情況:

vCenter Server 作為一個 VM 在必須將其添加到已啟用 EVC 模式的叢集的 ESXi 主機上運行。

問題在於啟用 EVC 後,具有運行 VM(包括運行 vCenter 的 VM)的 ESXi 主機無法添加到集群中,直到所有 VM 都被關閉。另一方面,需要運行 vCenter 的 VM 來管理集群,我們不能關閉 vCenter VM,因為它目前正在使用中。當 vCenter VM 運行在具有更新處理器的 ESXi 主機上時,這個問題尤為嚴重。

注意:建議在這種情況下使用標準 vSwitch(而不是分佈式 vSwitch)將運行 vCenter 的 VM 連接到網絡。

A possible solution. Consider the algorithm that can help you to resolve the issue for VMware vSphere 5.5:

  1. 如果集群中還沒有 ESXi 伺服器,將另一個未運行 vCenter VM 的 ESXi 伺服器移至集群。必須關閉要移至集群的 ESXi 伺服器上的 VM。
  2. 關閉運行 vCenter Server 的 VM。使用 VMware Host Client 連接到 vCenter VM 所在的 ESXi 主機,以注銷 VM,或使用 SSH 客戶端進行文件複製。在 VMware Host Client 中,右鍵單擊 vCenter VM,然後點擊 注銷。手動將 vCenter VM 的所有文件複製到已經移至集群的 ESXi 伺服器上的數據存儲中。如果兩個 ESXi 主機都使用 NFS 或 iSCSI 共享存儲,則無需將 VM 文件複製到另一個位置。

注意:在將 VM 從一個 ESXi 主機移至另一個主機之前,您可能需要手動設置運行 vCenter Server 的虛擬網絡適配器的 MAC 地址。

  1. 將已移至叢集的 ESXi 主機上的 vCenter VM 註冊(使用 VMware Host Client 連線至 ESXi 主機,開啟資料存放區,找到 vCenter VM 的檔案,選取 VMX 檔案,右鍵點擊該檔案並點擊 註冊 VM)。在此 ESXi 主機上的叢集中執行 vCenter VM。使用 VMware vSphere Client 登入 vCenter,確保您可以使用 vCenter 管理您的 vSphere 環境。您可能需要暫時停用入場控制。
  2. 將原本運作 vCenter VM 的來源 ESXi 主機移至叢集。在移動主機之前,如有需要,請關閉該 ESXi 主機上的其他 VM。

結論

增強的 vMotion 能力(EVC)是一項有用的 VMware vSphere 功能,可使您的叢集具有可擴展性,並允許您將具有不同世代處理器的節點添加到叢集中,以在支援 vMotion 的 ESXi 主機之間執行 VM 的即時遷移。EVC 模式遮蔽了新一代處理器的功能,以建立與叢集中 ESXi 主機使用的最老一代處理器功能相匹配的統一基準。因此,您將擁有一個同質環境,其中所有處理器使用相同的指令集,運行中的 VM 可以透過 vMotion 遷移。許多使用叢集的 VMware 客戶使用 EVC 模式。建議您在叢集建立階段啟用 EVC 模式,以避免添加 ESXi 主機和遷移運行中的 VM(包括執行 vCenter Server 的 VM)可能出現的問題。

無論您使用叢集與否,都不要忘記備份 VMware VM。NAKIVO Backup & Replication 是一個快速、可靠且價格合理的數據保護方案,即使這些 VM 在叢集中的 ESXi 主機之間遷移,也能保護您的 VMware VM。

Source:
https://www.nakivo.com/blog/how-vmware-evc-mode-works-overview/