Multipath

Материал из ALT Linux Wiki

Для поддержки multipath-устройств стоит воспользоваться стартеркитом server (20161212 или новее) либо вручную:

  1. apt-get install make-initrd-multipath;
  2. service multipathd enable; service multipathd start;
  3. исправить устройства в /etc/fstab по /dev/disks/by-id/wwn-*, /dev/mapper/* или /dev/dm-* (т.к. uuid тот же);
  4. добавить в /etc/initrd.mk следующие строки (актуально для Альт СП релиз 10):
    FEATURES += multipath
    PUT_FILES += $(shell ls /lib64/multipath/*.so)
  5. перегенерировать initrd командой make-initrd и перезагрузиться.

Информация о multipath-устройстве

После подключения, устройство хранения данных должно автоматически определиться как multipath-устройство:

# multipath -ll
mpatha (3600c0ff00014f56ee9f3cf6301000000) dm-0 HP,P2000 G3 FC
size=931G features='1 queue_if_no_path' hwhandler='1 alua' wp=rw
|-+- policy='service-time 0' prio=50 status=active
| |- 7:0:1:1  sde 8:64 active ready running
| `- 16:0:1:1 sdc 8:32 active ready running
`-+- policy='service-time 0' prio=10 status=enabled
  |- 7:0:0:1  sdd 8:48 active ready running
  `- 16:0:0:1 sdb 8:16 active ready running

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

  • Информация о multipath-устройстве:
    • mpatha (3600c0ff00014f56ee9f3cf6301000000) — алиас
    • dm-0 — имя устройства dm
    • HP,P2000 G3 FC — поставщик, продукт
    • size=931G — размер
    • features='1 queue_if_no_path' — функции
    • hwhandler='01 alua' — аппаратный обработчик
    • wp=rw — права на запись
  • Информация о группе маршрутов:
    • policy='service-time 0' — политика планирования
    • prio=50 — приоритет группы маршрутов
    • status=active — статус группы маршрутов
  • Информация о маршруте:
    • 7:0:1:1 — хост:канал:идентификатор:Lun
    • sde — диск
    • 8:80 — номера major:minor
    • active — статус dm
    • ready — статус маршрута
    • running — online статус

Статус маршрута:

  • ready, ghost — путь открыт и готов к вводу-выводу;
  • faulty, shaky — путь отключён;
  • i/o pending — средство проверки активно проверяет этот путь, и состояние будет обновлено в ближайшее время;
  • i/o timeout — средство проверки не вернуло успех/неуспех до истечения таймаута (рассматривается так же, как faulty);
  • removed — маршрут был удален из системы и вскоре будет удален из multipath-устройства (рассматривается так же, как faulty);
  • wild — multipathd не смог запустить проверку пути из-за внутренней ошибки или проблемы конфигурации (рассматривается так же, как faulty за исключением того, что multipath пропускает многие действия на пути);

unchecked — средство проверки не запускалось по этому пути либо потому, что он только что был обнаружен, либо ему не назначено средство проверки пути, либо в средстве проверки пути возникла ошибка (рассматривается так же, как wild);

  • delayed — средство проверки сообщает, что путь открыт, но multipath задерживает восстановление маршрута, поскольку в последнее время путь несколько раз выходил из маршрут, и в этом случае multipath режим настроен на задержку путей (рассматривается так же, как faulty).

Статус dm (аналогичен статусу маршрута, но только с точки зрения ядра):

  • active — аналогичен статусам ready и ghost маршрута;
  • failed — аналогичен всеми другим состояниям маршрута, за исключением i/o pending, который не имеет эквивалентного состояния dm.

Online статус:

  • running — устройство включено;
  • offline — устройство отключено.

Для получения дополнительной информации об используемых устройствах можно выполнить команду:

# multipath -v3

Другие команды multipath, которые используются для просмотра, создания или перезагрузки multipath-устройств, также отображают топологию устройства, но при этом некоторая информация может быть неизвестной и отображаться в выводе как undef.

Некоторые параметры команды multipath:

  • -l — отобразить текущую multipath-топологию, полученную из sysfs и устройства сопоставления устройств;
  • -ll — отобразить текущую multipath-топологию, собранную из sysfs, устройства сопоставления устройств и всех других доступных компонентов системы;
  • -f device — удалить указанное multipath-устройство;
  • -F — удалить все неиспользуемые multipath-устройства;
  • -w device — удалить WWID указанного устройства из файла wwids;
  • -W — сбросить файл wwids, чтобы включить только текущие multipath-устройства;
  • -r — принудительная перезагрузка multipath-устройства.


Идентификаторы multipath-устройств

Если устройство находится под контролем Multipath, то для этого устройства создаётся каталог в каталогах /dev/mapper/ и /dev/.

Примечание: Устройства /dev/dm-X предназначены только для внутреннего использования и не должны использоваться напрямую.


Настройки multipath содержатся в файле /etc/multipath.conf:

defaults {
    find_multipaths         yes
    user_friendly_names     yes
}

Если для параметра конфигурации user_friendly_names установлено значение no, для имени multipath-устройства задается значение World Wide Identifier (WWID). Имя устройства будет /dev/mapper/WWID:

# ls /dev/mapper/
3600c0ff00014f56ee9f3cf6301000000 
# lsblk 
NAME                                        MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
sda                                           8:0    0    59G  0 disk  
sdb                                           8:16   0 931,3G  0 disk  
└─3600c0ff00014f56ee9f3cf6301000000         253:0    0 931,3G  0 mpath 
sdc                                           8:32   0 931,3G  0 disk  
└─3600c0ff00014f56ee9f3cf6301000000         253:0    0 931,3G  0 mpath 
sdd                                           8:48   0 931,3G  0 disk  
└─3600c0ff00014f56ee9f3cf6301000000         253:0    0 931,3G  0 mpath 
sde                                           8:64   0 931,3G  0 disk  
└─3600c0ff00014f56ee9f3cf6301000000         253:0    0 931,3G  0 mpath

Если для параметра user_friendly_names установлено значение yes, то для имени multipath-устройства задаётся алиас (псевдоним), в форме mpathХ. Имя устройства будет /dev/mapper/mpathХ:

# ls /dev/mapper/
mpatha
# lsblk
NAME             MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
sda                8:0    0    59G  0 disk
sdb                8:16   0 931,3G  0 disk
└─mpatha         253:0    0 931,3G  0 mpath
sdc                8:32   0 931,3G  0 disk
└─mpatha         253:0    0 931,3G  0 mpath
sdd                8:48   0 931,3G  0 disk
└─mpatha         253:0    0 931,3G  0 mpath
sde                8:64   0 931,3G  0 disk
└─mpatha         253:0    0 931,3G  0 mpath

Однако не гарантируется, что имя устройства будет одинаковым на всех узлах, использующих данное multipath-устройство. Аналогично, если вы установите параметр псевдонима в файле /etc/multipath.conf, имя не будет автоматически согласовано на всех узлах кластера.

ОС при загрузке определяет пути к устройствам в изменяющейся среде выполнения (например, при новой загрузке в среде выполнения ОС появились новые устройства хранения или исчезли старые, и т.п.) по отношению к предыдущей загрузке или по отношению к заданной ранее конфигурации. Это может приводить к противоречиям при именовании устройств. Для того чтобы избежать такого поведения, рекомендуется:

  1. Сделать явное исключение для устройства (раздела) хранения (например, для 3600c0ff00014f56ee9f3cf6301000000, которое в настоящее время определяется как /dev/mapper/mpatha). Для этого в файл /etc/multipath.conf добавить секции:
    blacklist {
            wwid .*
    }
    
    blacklist_exceptions {
            wwid "3600c0ff00014f56ee9f3cf6301000000"
    }
    
    Данная настройка предписывается внести в черный список любые найденные устройства хранения данных, за исключением нужного.
  2. Создать еще одну секцию:
    multipaths {
      multipath {
            wwid "3600c0ff00014f56ee9f3cf6301000000"
            alias mpatha
      }
    }
    
    В этом случае устройство всегда будет доступно только по имени /dev/mapper/mpatha. Вместо mpatha можно вписать любое желаемое имя устройства.

В файл /etc/multipath.conf может также потребоваться внести рекомендованные производителем СХД параметры.

После внесения изменений в файл /etc/multipath.conf необходимо перезапустить службу multipathd для активации настроек:

# systemctl restart multipathd.service
Примечание: Проверить файл /etc/multipath.conf на наличие ошибок можно, выполнив команду:
# multipath -t