One of the common misconceptions about iSCSI is the difference between NIC teaming and MPIO. MPIO stands for Multi Path Input/Output (or at least I think it does) and is a protocol designed to manage multiple links to the same SAN. Think of it this way, if you had redundant paths between and HBA and a storage controller, the HBA would see the same LUN presented to it twice. MPIO is a means to make sure that the host only sees one copy and make use of both redundant links. This is far different than NIC teaming or NIC bonding. iSCSI storage communication is generally one to one. So even if you were using an etherchannel, the traffic would always take the same path.
So let’s configure MPIO for our iSCSI SAN. So Im using a LeftHand VSA as my virtual iSCSI storage. Currently, we have a single VMkernel on each host that allows us to talk to the storage controller. Here’s what the IP’s look like
Host1 (vmk1) – 10.10.10.2
Host2 (vmk2) – 10.10.10.3
Storage Controller – 10.10.10.15
There are a couple of items that need to be configured before we turn on MPIO. Let’s get those out of the way.
NIC Configuration
Since the NIC’s need to multipath, they cant be part of the same team. That is, we need to create to VMkernel ports and associate one with one NIC, and on with the other. Since we are using distributed switches, our best bet is to create a second storage port-group and associate one vmnic(uplink) with one and one with the other. So let’s do that first. Login into vCenter, go to home, inventory, and networking. Right click on your DVS and select the ‘New port Group’ option…
As we did before, create a new port-group for the secondary storage vmnic…
Now we should have two storage port-groups…
Now, let’s change the setting so that only one uplink is used for each port-group. Right click on the first port-group and edit settings. Select the NIC teaming setting and remove all but one of the uplinks for the Active Uplinks tab. In my case, we have two uplinks (dvuplink1 and dvuplink2). When you are done, you should only have one in the ‘Active Uplinks’ area as shown below…
Make the same changes on the second storage port-group but leave the second uplink in the ‘Active Uplinks’ container…
At this point we need to configure our secondary storage VMkernel interfaces that will make up the second path in our multipath configuration. To do this, go back to the host configuration, select the distributed switch, and click on the ‘Manage Virtual Adapters’ link…
In the next window, click the ‘add’ button…
Leave the default option of ‘New Virtual Adapter’ and click next…
Hit next on the next screen leaving the default option (there is only one)…
On the next screen select your secondary port-group out of the drop down and click next…
These are the IP addresses we’ll be using for the rest of the config…
Host1 (vmk1) – 10.10.10.2
Host1 (vmk2) – 10.10.10.12
Host2 (vmk1) – 10.10.10.3
Host2 (vmk2) – 10.10.10.13
Storage Controller – 10.10.10.15
So enter the appropriate IP address for your new VMkernel interface and click next…
Review the final layout and click Finish…
Perform the same step for your second host as well. At this point, we should be all set to enable MPIO…
MPIO Configuration
The worst part of the config is now over. The MPIO part is easy. Let’s take a look at our current storage adapters…
Note how we have one iSCSI device registered and it’s showing as one device with one path. Now click the ‘Properties…’ link in the details panel and on the following windows select the ‘Network Configuration’ tab…
Now select the first adapter and click OK. It should now show up in the iSCSCI initiator properties window. Click add again and select the second adapter and click ok…
Both adapters should show up and the policy should show as compliant. Click the close button to apply the changes. It will prompt you for a rescan, click yes…
When the scan finished your view should now look like….
Notice how we now have two paths. If your right click on the device name, you can select ‘Manage Paths’ option…
This brings up the manage paths control screen…
This is where we can change the path selection method (default is Fixed) as well as enable and disable paths. This is the preferred way to take a path down for maintenance….