Заметки о Windows и других программных продуктах Microsoft...

Настройка MPIO для iSCSI в Windows Server 2012

Настройка MPIO для iSCSI в Windows Server 2012

При хранении критически важных данных обеспечение высокой доступности является одной из основных задач. Для высокодоступных решений необходимо обеспечить избыточность на разных уровнях: на уровне дисковой подсистемы, на уровне транспорта, на уровне сервера или системы хранения. Одним из механизмов, предназначенных для обеспечения высокой доступности на транспортном уровне, является технология многопутевого ввода-вывода (Multi-Path Input-Output, MPIO).

Как правило, каждый приличный сервер имеет несколько сетевых интерфейсов, да и системы хранения обычно оснащаются дополнительными адаптерами. Все это дает серверу возможность использовать одновременно несколько путей для подключения к устройству хранения, обеспечив избыточность на транспортном уровне и устранив единую точку сбоя, которой является подключение к хранилищу. Кроме того, подобный подход может обеспечить еще и распределение нагрузки между путями, для повышения производительности.

Однако недостаточно просто подключить к серверу один LUN по нескольким путям. Операционная система не сможет понять, что она видит одно и то же устройство и подключит его дважды. Это чревато тем, что данные на диске будут перезаписаны или повреждены.

Технология MPIO как раз и предназначена для того, чтобы система видела каждый из презентованных ей дисков в единственном экземпляре. При наличии нескольких путей между сервером и устройством хранения MPIO обеспечивает маршрутизацию операций ввода\вывода по этим путям и перенаправление запросов в случае сбоя одного из путей. MPIO в Windows Server 2012 позволяет операционной системе определять и использовать до 32 путей между сервером и устройством хранения.

MPIO не зависит от протокола и может использоваться с интерфейсами Fibre Channel, Internet SCSI (iSCSI) и Serial Attached SCSI (SAS). В Windows Server MPIO состоит из двух элементов: компонента операционной системы под названием Multipath I/O и специального программного модуля Device-Specific Module (DSM). Модуль DSM поставляется производителем СХД и обеспечивает работу Microsoft MPIO с данной конкретной моделью оборудования. Кроме того, в Windows Server 2012 есть встроенный DSM, который также можно использовать с различными СХД.

Примечание. Для работы с Microsoft DSM система хранения должна поддерживать SCSI Primary Commands-3 (SPC-3).

В предыдущей статье была описана настройка хранилища iSCSI на базе Windows Server 2012. Продолжая эту тему, я опишу настройку MPIO для обеспечения отказоустойчивости при подключении по iSCSI. В качестве хранилища выступает сервер SRV2 c установленной ролью iSCSI Target, в качестве клиента сервер SRV3. На каждом сервере несколько сетевых интерфейсов, подключенных к разным свичам для обеспечения большей надежности.

Все настройки будут производиться на клиенте, поэтому подключаемся к SRV3 и приступаем.

Установка компонента Multipath I/O

MPIO в Windows Server 2012 является дополнительным компонентом (Feature) и по умолчанию неактивен. Установить его можно из оснастки Server Manager, запустив мастер добавления ролей и компонентов и выбрав компонент Multipath I/O.

Установка компонента MPIO

 

Также для включения 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

 

Для включения поддержки MPIO для устройств iSCSI переходим на вкладку «Discover Multi-Paths», отмечаем чекбокс «Add support for iSCSI devices» и жмем кнопку Add.

Включение MPIO для iSCSI

 

После чего перезагружаем сервер.

Перезагрузка после включения MPIO для iSCSI

Настройка MPIO для iSCSI

Теперь, когда MPIO включен и доступен для использования, приступим к подключению iSCSI устройств. Открываем оснастку iSCSI Initiator, переходим на вкладку «Discovery», жмем кнопку «Discover Portal» и вводим один из IP-адресов (любой) сервера SRV2, на котором запущен iSCSI Target.

Подключение к порталу iSCSI

 

Переходим на вкладку Targets, выбираем наш таргет и жмем «Properties» для перехода к его свойствам.

выбор iSCSI Target

 

В свойствах откроем вкладку «Portal Groups», на которой отображены все доступные пути до выбраного таргета. Выберем два из них.

Выбор путей для MPIO

 

Теперь переходим на вкладку «Sessions» и жмем на кнопку «Add session».

Свойства iSCSI Target

 

Отмечаем чекбокс «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» можно посмотреть подробности этого подключения.

детали подключения MPIO

 

А по кнопке «Edit» — выбрать активный путь (для Fail Over Only) или указать вес пути (для Weighted Paths).

Выбор основного пути MPIO

Настройка MPIO с помощью PowerShell

Управлять MPIO можно и с помощью PowerShell, где для этого есть специальный модуль. Выведем все командлеты этого модуля командой:

Get-Command -Module MPIO

команды PowerShell для MPIO

 

Так например можно включить MPIO для iSCSI:

Enable-MSDSMAutomaticClaim -BusType iSCSI

Так настроить политику Fail Over Only :

Set-MSDSMGlobalDefaultLoadBalancePolicy -Policy FOO

А вот так посмотреть все доступные для MPIO устройства iSCSI:

Get-MPIOAvailableHW -BusType iSCSI

список iSCSI устройств

 

Также стоит упомянуть о дополнительных параметрах MPIO, доступных из консоли PowerShell. Вывести их можно командой Get-MPIOSetting. Это настройки таймера, которые отвечают за таймауты при переключении:

• PathVerificationState — определяет, нужна ли проверка доступности пути;
• PathVerificationPeriod — указывает время в секундах, в течение которого сервер будет проверять каждый путь. Этот параметр действует только при включенном параметре PathVerificationState;
• PDORemovePeriod — задает время в секундах, по истечении которого физическое устройство будет полностью удалено, если все пути к устройству недоступны;
• RetryCount — задает количество повторов запроса ввода\вывода;
• RetryInterval — задает период времени, по истечении которого сервер повторяет попытку запроса ввода\вывода;
• UseCustomPathRecoveryTime — указывает, задавать ли вручную период восстановления. Если этот параметр отключен, то используется удвоенное значение PDORemovePeriod;
• CustomPathRecoveryTime — задает период времени в секундах, по истечении которого выполняется попытка восстановления подключения. Этот параметр действует только при включенном UseCustomPathRecoveryTime;
• DiskTimeoutValue — указывает, сколько времени должен ожидать сервер перед тем, как считать запрос ввода\вывода к диску истекшим.

В большинстве случаев эти параметры можно оставить без изменения, однако в некоторых ситуациях для получения оптимальной производительности может потребоваться их изменить. К примеру, если используется отказоустойчивый кластер и балансировка нагрузки по нескольким путям, то уменьшение таймаута может ускорить переключение между узлами. И наоборот, для одиночного сервера некоторые из значений можно увеличить, для обеспечения большей надежности.

Для изменения этих параметров воспользуемся командой Set-MPIOSetting. Для примера изменим таймаут переключения диска:

Set-MPIOSetting -NewDiskTimeout 30

Напомню, что при изменении параметров MPIO может потребоваться перезагрузка сервера.

настройка MPIO из PowerShell

 

Примечание. Также сконфигурировать MPIO можно c помощью утилиты командной строки mpclaim.exe. Для просмотра ее возможностей наберите в командной строке mpclaim /?.

Отработка отказа

После завершения настройки необходимо протестировать получившуюся конфигурацию. Для этого запускаем копирование на общий диск, а затем отключаем один сетевой интерфейс, обеспечивавший активный путь. Копирование приостанавливается, скорость падает до нуля

Остановка при копировании

 

Но по истечении таймаута процесс возобновляется и успешно завершается.

Продолжение копирования

 

А если теперь посмотреть в настройки устройства, то мы увидим, что переключение произошло и запасной путь стал активным.

Переключение на запасной путь

 

Таким образом с помощью MPIO мы настроили отказоустойчивое подключение к хранилищу iSCSI.

В завершение напомню, что в данной статье приведен вариант настройки MPIO с использованием встроенного модуля Microsoft DSM. При использовании системы хранения других производителей рекомендуется использовать DSM, поставляемое с этим оборудованием, соответственно процедура настройки будет отличаться.

 
 
Комментарии

вот есть сервер на Windows Server 2012 R2, дисковое пространство на котором я хочу презентовать кластеру Hyper-V для хранения вирт.машин. На этом сервере есть адаптер на 4 гигабитных порта Ethernet, сейчас они работают как один сетевой интерфейс с одним ip-адресом. Читал про рекомендации отделять сеть, обеспечивающую доступ к хранилищу от других подсетей. Как это реализовать? Выделить пару портов ethernet из team, назначить каждому свой iP и подсеть, прокинуть эти подсети в кластер Hyper-V и через эти адреса презентовать iSCSI — хранилище?

Я бы разбил порты на две группы, одну выделил под схд.

Читаю с большим удовольствием.

балаев

У меня от такой хуйни сервер умер!

Балаев, спасибо я поржал так что суп не разлил на себя

Ответить