Установка компонента Multipath I/O
MPIO в Windows Server 2012 является дополнительным компонентом (Feature) и по умолчанию неактивен. Установить его можно из оснастки Server Manager, запустив мастер добавления ролей и компонентов и выбрав компонент Multipath I/O.
Также для включения MPIO мы можем воспользоваться PowerShell. Сначала проверяем состояние компонента:
Get-WindowsOptionalFeature -Online -FeatureName MultiPathIO
И если он неактивен (disabled), устанавливаем его:
Enable-WindowsOptionalFeature -Online -FeatureName MultiPathIO
Включение MPIO для iSCSI
Сама по себе установка компонента еще не означает, что система определит диски правильно. Поэтому следующим шагом является включение MPIO для iSCSI, для чего нам понадобится оснастка MPIO. Для ее запуска в Server Manager открываем меню Tools и выбираем пункт MPIO, либо нажимаем Win+R и вводим команду mpiocpl.exe.
Для включения поддержки MPIO для устройств iSCSI переходим на вкладку «Discover Multi-Paths», отмечаем чекбокс «Add support for iSCSI devices» и жмем кнопку Add.
После чего перезагружаем сервер.
Настройка MPIO для iSCSI
Теперь, когда MPIO включен и доступен для использования, приступим к подключению iSCSI устройств. Открываем оснастку iSCSI Initiator, переходим на вкладку «Discovery», жмем кнопку «Discover Portal» и вводим один из IP-адресов (любой) сервера SRV2, на котором запущен iSCSI Target.
Переходим на вкладку Targets, выбираем наш таргет и жмем «Properties» для перехода к его свойствам.
В свойствах откроем вкладку «Portal Groups», на которой отображены все доступные пути до выбраного таргета. Выберем два из них.
Теперь переходим на вкладку «Sessions» и жмем на кнопку «Add session».
Отмечаем чекбокс «Enable multi-path» и жмем «Advanced» для перехода к дополнительным настройкам.
В дополнительных настройках в поле «Initiator IP» выбираем адрес локального интерфейса, а в поле «Target portal IP» — соответствующий адрес iSCSI-сервера. Как видите, оба IP находятся в одной подсети. Таким образом мы определяем путь, по которому будет производиться подключение к iSCSI Target на SRV2. Жмем OK, затем таким же способом добавляем второй путь.
Теперь надо сконфигурировать диск iSCSI для использования MPIO. Возвращаемся на вкладку «Sessions», выбираем обе сессии и жмем кнопку «Devices».
В списке у нас одно устройство — Disk 1. Выбираем его и жмем кнопку MPIO.
Здесь нам надо настроить политику использования путей. Выбирать можно из следующих вариантов:
• Fail Over Only — используется только один путь, указанный в качестве основного (active), остальные пути находятся в режиме ожидания (standby). При недоступности основного пути все подключения переводятся на резервный путь. Как только основной путь становится доступен, все подключения возвращаются обратно на основной путь;
• Round Robin — все возможные пути используются по очереди, для балансировки нагрузки;
• Round Robin with Subset — можно указать несколько основных путей, используемых как в предыдущем режиме Round Robin, а также один или несколько дополнительных путей. Пока доступен хотя бы один из основных путей, система использует их в режиме Round Robin. Если же ни один из основных путей недоступен, то используются дополнительные пути в порядке уменьшения приоритета. Когда восстанавливается работоспособность хотя бы одного из основных путей, система возвращается в режим балансировки.
• Least Queue Depth — запросы направляются на тот путь, который в данный момент имеет наименьшее число запросов в очереди;
• Weighted Paths — для каждого пути назначается некий вес (или стоимость), которая обозначает приоритет использования данного пути. Чем больше вес, тем ниже приоритет, соответственно для операций выбирается доступный путь с наименьшим приоритетом;
• Least Blocks — все запросы направляются на тот путь, в очереди которого на передачу стоит наименьшее число блоков данных.
Для обеспечения отказоустойчивости выберем самый простой вариант — политику Fail Over Only.
Кроме того, выбрав путь и кликнув на «Details» можно посмотреть подробности этого подключения.
А по кнопке «Edit» — выбрать активный путь (для Fail Over Only) или указать вес пути (для Weighted Paths).
Настройка MPIO с помощью PowerShell
Управлять MPIO можно и с помощью PowerShell, где для этого есть специальный модуль. Выведем все командлеты этого модуля командой:
Get-Command -Module MPIO
Так например можно включить MPIO для iSCSI:
Enable-MSDSMAutomaticClaim -BusType iSCSI
Так настроить политику Fail Over Only :
Set-MSDSMGlobalDefaultLoadBalancePolicy -Policy FOO
А вот так посмотреть все доступные для MPIO устройства iSCSI:
Get-MPIOAvailableHW -BusType iSCSI
Также стоит упомянуть о дополнительных параметрах MPIO, доступных из консоли PowerShell. Вывести их можно командой Get-MPIOSetting. Это настройки таймера, которые отвечают за таймауты при переключении:
• PathVerificationState — определяет, нужна ли проверка доступности пути;
• PathVerificationPeriod — указывает время в секундах, в течение которого сервер будет проверять каждый путь. Этот параметр действует только при включенном параметре PathVerificationState;
• PDORemovePeriod — задает время в секундах, по истечении которого физическое устройство будет полностью удалено, если все пути к устройству недоступны;
• RetryCount — задает количество повторов запроса ввода\вывода;
• RetryInterval — задает период времени, по истечении которого сервер повторяет попытку запроса ввода\вывода;
• UseCustomPathRecoveryTime — указывает, задавать ли вручную период восстановления. Если этот параметр отключен, то используется удвоенное значение PDORemovePeriod;
• CustomPathRecoveryTime — задает период времени в секундах, по истечении которого выполняется попытка восстановления подключения. Этот параметр действует только при включенном UseCustomPathRecoveryTime;
• DiskTimeoutValue — указывает, сколько времени должен ожидать сервер перед тем, как считать запрос ввода\вывода к диску истекшим.
В большинстве случаев эти параметры можно оставить без изменения, однако в некоторых ситуациях для получения оптимальной производительности может потребоваться их изменить. К примеру, если используется отказоустойчивый кластер и балансировка нагрузки по нескольким путям, то уменьшение таймаута может ускорить переключение между узлами. И наоборот, для одиночного сервера некоторые из значений можно увеличить, для обеспечения большей надежности.
Для изменения этих параметров воспользуемся командой Set-MPIOSetting. Для примера изменим таймаут переключения диска:
Set-MPIOSetting -NewDiskTimeout 30
Напомню, что при изменении параметров MPIO может потребоваться перезагрузка сервера.
Примечание. Также сконфигурировать MPIO можно c помощью утилиты командной строки mpclaim.exe. Для просмотра ее возможностей наберите в командной строке mpclaim /?.