There is a fair amount of confusion about the state of using Windows network load balancing (NLB) when it comes to Microsoft virtual machines. Today I am (hopefully) going to set the record straight. When using NLB with Microsoft virtual machines you need to be aware of the following issues:
- Virtual Server / Virtual PC will not utilize any NLB capabilities on the host operating system. This is because Virtual Server / Virtual PC perform their network operations at a lower layer on the host network stack than NLB. Note – Virtual Server and Virtual PC will function correctly when NLB is present on the host – they will just not benefit from it.
- Virtual Server / Virtual PC have some network optimizations that actually cause problems when running NLB systems inside of virtual machines. These optimizations are simply that if we see a network packet that is going from the host to a virtual machine, or from a virtual machine to another virtual machine, we will send the packet directly to that virtual machine – without sending a copy of it on to the physical network connection. Similarly if we see a network packet coming into the physical computer that is destined for the host operating system – we will not send it on to any of the virtual machines.
Now – these optimizations cause problems with NLB because NLB creates its own virtual MAC address that is shared amongst all the NLB servers – which means that we cannot tell when a packet should go just to the host, a virtual machine or everyone. Because of this we see the following results:
- NLB works with virtual machines – if everything (client and NLB servers) is on separate host systems. It also works if some systems are physical computers, and some virtual machines – as long as each server / client is on a separate computer.
- NLB works when all the NLB servers are virtualized and placed on the same physical computer. Obviously this is only useful for non-production environments.
- Any other configuration will fail (e.g. having a virtualized client hosted on a physical NLB server node, having a virtualized client and virtualized NLB server node on one box, with other NLB server nodes on remote systems)