First off, I want to say I am not a VMWare expert. Nor do I even have my VCP (Yet, I’m going to school next month) but I have been screwing with vSphere long enough to learn some things and figure things out. A few months ago our resident VCP had to go on an extended leave of absence, so I was thrown rather abruptly into the VMWare admin role among many others I have.
One of the latest things I have been trying to do lately is getting three stand-alone ESXi servers into a cluster in vSphere. As long as you are properly licensed, and all servers have shared storage you can do it. Oh yeah, and if you have miss-matched processors, you have to enable EVC mode on the cluster. Here is the gotcha.
According to VMPros:
Enhanced VMotion Compatibility (EVC) simplifies VMotion compatibility issues across CPU generations. EVC automatically configures server CPUs with Intel FlexMigration or AMD-V Extended Migration technologies to be compatible with older servers. After EVC is enabled for a cluster in the VirtualCenter inventory, all hosts in that cluster are configured to present identical CPU features and ensure CPU compatibility for VMotion. The features presented by each host are determined by selecting a predefined EVC baseline. VirtualCenter does not permit the addition of hosts that cannot be automatically configured to be compatible with the EVC baseline.
So what’s the problem? Well, what I was trying to do when creating this cluster was minimize downtime. Actually, I was trying to not have any if possible. So what I initially did was create a cluster, then I dragged and dropped in the three servers I wanted in that cluster. Since the VM’s were still running I couldn’t have EVC enabled. Why? Because the VM’s that were running were using features not supported by the EVC mode I wanted to set. Ok, no problem, so I disabled EVC, and was able to put all three servers in the cluster.
Here is my second gotcha, all servers were in the cluster, but only two of them had the same processors (Intel Xeon E5420) the third little black sheep had an Intel Xeon E5345. I could vMotion machines around between the two E5420’s, but if I tried to vMotion to the E5345 I would get the following error:
Host CPU is incompatible with the virtual machine’s requirements at CPUID level 0x1 register ‘ecx’. Host bits: 0000:0100:0000:1000:0010:0010:0000:0001
Required: x000:0x0x:00x0:0xx0:xx10:xx1x:xxxx:xx01
Mismatch detected for these features:
*SSE4.1; refer to KB article 1993 for a possible solution.
Now, in a pinch, you can shutdown the host you want to vMotion, edit the properties, click on the Options tab > CPUID Mask > Advanced and copy the required information from your error, for example:
x000:0x0x:00x0:0xx0:xx10:xx1x:xxxx:xx01
And place it in the Level 1 ecx line as shown here:
Once that is done, you can power the VM back up and do your vMotion. Do you want to do that for all VM’s? I didn’t think so. I didn’t either.
So what to do? Well, first you have to find out which mode of EVC your CPU’s will support. It turns out that both E5420’s and E5345’s support the Intel Xeon Core 2 setting. Great, but since all are in the cluster already, and EVC was disabled, I can’t enable that EVC mode, at least not while VM's are running (There goes my zero downtime plan!). Here is what I had to do.
- Power off all VM’s off the E5345 ESX server
- Power off all the VM’s on the two E5420’s
- Set the cluster in Intel Xeon Core 2 mode
- Power back on all the VM's
- Done
Now all machines can vMotion around like nobody’s business! Now I just have to make sure that any new VMWare heads I want to put in the cluster later support the Intel Xeon Core 2 EVC setting.
If you are a VCP, and know if a better way of doing this, please let me know in the comments.