Setting up multipathing with Microsoft MPIO

Everpure Cloud Dedicated for Azure

Audience
Public
Source Type
Documentation

Microsoft's Multipath I/O (MPIO) feature in Windows Server provides redundancy and load balancing for connections to storage devices.To protect against a single point of failure, follow this procedure to allows multiple paths from the application host to the Everpure Cloud Dedicated instance. You only need to perform this procedure once on your Windows application host.

Note: Consider using our Everpure Cloud iSCSI Mount Azure VM Extension, it will configure all recommended values in guest OS automatically. For detailed information follow the guide here.

As per our Best practices, we recommend to change the default Microsoft MPIO configuration to following values:

Configuration item Description Default value Recommended value
MSDSMGlobalDefaultLoadBalancePolicy The default global load-balancing policy for Microsoft's Device Specific Module (MSDSM) for MPIO. Round-Robin with Subset LQD (Least Queue Depth)
PathRecoveryInterval It defines how long (in seconds) the system waits after a failed path is restored before attempting to fail back to it (if it is a preferred path). 40 20
UseCustomPathRecoveryInterval When UseCustomPathRecoveryInterval is enabled, the PathRecoveryInterval value becomes active. If it's disabled, Windows uses its built-in default path recovery behavior and may ignore the interval setting. Disabled (0) Enabled (1)
PDORemovePeriod The amount of time (in seconds) the multipath pseudo-LUN (the logical disk presented to Windows) will remain in system memory even after all paths to the device have failed. If no paths recover within this period, the disk is removed from the system. 20 120
DiskTimeoutValue The maximum length of time (in seconds) that the server waits before marking an I/O request as timed out. 120 240
PathVerifyEnabled Enables or disables periodic path verification (i.e., checking that paths are still alive). Disabled (0) Enabled (1)
LinkDownTime Determines how long (in seconds) I/O requests will be held in the device queue for a MPIO path and retried if the connection to the target is lost. 15 180
  1. Log onto the Windows host.
  2. To check if Microsoft MPIO is installed on the system, open an elevated PowerShell terminal (run as an administrator) and execute:
    PS C:\> Get-WindowsFeature -Name 'Multipath-IO'
    Display Name                                            Name         Install State
    ------------                                            ----         -------------
    [ ] Multipath I/O                                       Multipath-IO Available
  3. If it shows the install state as 'Available', follow the next steps to install Microsoft MPIO. If it shows as 'Installed', move on to step 7.
  4. In the same PowerShell terminal, execute:
    PS C:\> Add-WindowsFeature -Name 'Multipath-IO'
    Success Restart Needed Exit Code      Feature Result
    ------- -------------- ---------      --------------
    True    Yes       SuccessRest...     {Multipath I/O}
    WARNING: You must restart this server to finish the installation process.
    
  5. Reboot the Windows host.
  6. When the Windows host boots back up, verify that Microsoft MPIO is installed:
    PS C:\> Get-WindowsFeature -Name 'Multipath-IO'
    Display Name                                            Name         Install State
    ------------                                            ----         -------------
    [X] Multipath I/O                                       Multipath-IO Installed
  7. In the same PowerShell terminal, execute the following command to start the iSCSI service:
    PS C:\> Start-Service -Name msiscsi
  8. Set the iSCSI service to start on boot, execute:
    PS C:\> Set-Service -Name msiscsi -StartupType Automatic
  9. Add Pure FlashArray as an MPIO vendor. In the same PowerShell terminal, execute:
    PS C:\> New-MSDSMSupportedHw -VendorId PURE -ProductId FlashArray
    VendorId ProductId
    --------       ---------
    PURE        FlashArray
    
  10. Enable iSCSI support by Microsoft MPIO. In the same PowerShell terminal, execute:
    PS C:\> Enable-MSDSMAutomaticClaim -BusType iSCSI
    VendorId ProductId
    -------- ---------
    MSFT2005 iSCSIBusType_0x9
    False
    
  11. Set default MPIO path policy to Lowest Queue Depth:
    PS C:\> Set-MSDSMGlobalDefaultLoadBalancePolicy -Policy LQD
  12. Set MPIO Timer Values. In the same PowerShell terminal, run:
    PS C:\> Set-MPIOSetting -NewPathRecoveryInterval 20 -CustomPathRecovery Enabled -NewPDORemovePeriod 120 -NewPathVerificationState Enabled
  13. Both NewDiskTimeout and LinkDownTime parameters must be set by editing Windows registry settings.
    For NewDiskTimeout, open Windows Registry Editor (regedt32) and navigate to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Disk and select it. Find the entry named TimeOutValue and change the value (double click or right-click -> Modify) to 240 (decimal). Click OK to save.

  14. For LinkDownTime, open Windows Registry Editor (regedt32) and navigate to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet and select it.
    Next select Edit on the Title Bar and then Find. Input the text “iscsi” without quotes.

    The first search hit should be the Microsoft iSCSI Initiator. Select the subkey Parameters under the number, find the entry named LinkDownTime and change the value (double click or right-click -> Modify) to 180 (decimal). Click OK to save.

  15. It's required to reboot the Windows host to apply all settings.
MPIO and iSCSI setup is now complete.