Usually this is a pretty straightforward fix: correct whatever network issue is preventing communication between the vmkernel ports. However, I recently encountered an issue where the network was configured properly, traffic was flowing, and vMotion still failed.

Everything with the multi-NIC vMotion config checked out:

Two separate VMkernel ports on the relevant vSwitch with IPs on the same subnet.

One vmnic active and one standby for each VMkernel port.

Active/standby adapters on the second VMkernel port were the inverse of the first.

So if vMotion was configured properly, why did it fail? It turns out, a non-vMotion vmkernel port was mistakenly configured for vMotion as well (in this case, one of the iSCSI vmkernel ports):

So while everything checked out with the vMotion vmkernel port configuration, vSwitch configuration, and physical switch configuration, that one mistakenly checked box broke vMotion.

This was actually clearly stated in the logs:

Migration [169353221:1428542576352168] failed to connect to remote host <10.24.4.2> from host <10.24.32.5>: Network unreachable.
vMotion migration [169353221:1428542576352168] failed to create a connection with remote host <10.24.4.2>: The ESX hosts failed to connect over the VMotion network
The vMotion migrations failed because the ESX hosts were not able to connect over the vMotion network. Check the vMotion network settings and physical network configuration.
The vMotion failed because the destination host did not receive data from the source host on the vMotion network. Please check your vMotion network settings and physical network configuration and ensure they are correct.

However, the IP scheme of the vMotion subnet was very similar to the iSCSI subnet so I overlooked it initially.

"The incorrect vmkernel interface may be selected for vMotion. The ESX/ESXi host uses only the selected interface for vMotion. If a vmkernel interface is in the incorrect IP subnet, or if the physical network is not configured correctly, the vMotion vmkernel interface may not be able to communicate with the destination host."