Multipathd что это
Перейти к содержимому

Multipathd что это

  • автор:

Многопутевая (multipath) модификация для протокола TCP: первый эксперимент

В TCP/IP мы устанавливаем соединение с определённым IP-адресом, после чего обмениваемся пакетами только с этим адресом. Разработчики нового расширения для протокола Multipath TCP (RFC 6824) предлагают снять это историческое ограничение. По их мнению, использование многопутевой (multipath) модификации TCP упростит использование этого протокола во многих прикладных задачах, таких как прозрачное перенаправление трафика с одного устройства на другое и балансировка нагрузки.

Многопутевая модификация Multipath TCP или MPTCP позволяет легко подключать сервер сразу к нескольким каналам Ethernet, а на смартфоне использовать одновременно WiFi и 3G, да и вообще появляется много других интересных возможностей.

Конечно, под Linux и сейчас можно вручную распределить трафик по нескольким каналам, но это не слишком эффективно: см. статью «Объединение пропускной способности двух интернет-каналов и простая отказоустойчивость»

Если соединение установлено по Multipath TCP (MPTCP), то возможен обмен пакетами с несколькими адресами/интерфейсами одновременно, в рамках одного соединения. В то же время соединение MPTCP сохраняет обратную совместимость со старыми версиями TCP и допускает подключение устройства по обычному TCP. Другими словами, если ваш компьютер поддерживает MPTCP, то вы можете подключиться к трём провайдерам без поддержки MPTCP — и установить соединение с другим клиентом MPTCP на тройной скорости.

Разработчики MPTCP приводят типичные примеры его использования (pdf).

  • Увеличение скорости доступа за счёт подключения к нескольким провайдерам (например, подключение сервера по нескольким интерфейсам).
  • Улучшение качества мобильной связи за счёт подключения к нескольким точкам доступа одновременно.
  • Одновременное использование WiFi и 3G.

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

Один из авторов спецификаций MPTCP с коллегами недавно провёл первый эксперимент MPTCP, установив прямое соединение между двумя серверами HP DL380p G7. В каждом из них было установлено по три двухпортовые карточки Intel 82599EB 10Gb Ethernet, так что в итоге канал состоял из шести параллельных кабелей 10Gb. В результате, на единственном TCP-соединении была зафиксирована скорость 51,8 Гбит/с.

Для эксперимента разработчикам пришлось вручную внести изменения в ядро Linux, добавив туда поддержку MPTCP.

multipath

Multipath — способ доступа к устройству массового хранения, при котором к нему от центрального процессора ведёт несколько путей. Типичный пример — хранилище, одновременно подключенное к нескольким SCSI-портам компьютера.

Используется для повышения отказоустойчивости и распределения нагрузки.

В Linux реализован при помощи специального драйвера device-mapper’а. В NetBSD используется он же, то есть драйвер dm, который фактически является драйвером device-mapper из Linux. В FreeBSD при помощи модулей GEOM_MULTIPATH и GEOM_FOX.

[править] Пример использования multipath в Linux

Cek HBA WWN nya # cat /proc/scsi/qla2xxx/2 |grep port scsi-qla1-adapter-port=210000145e24e4d5; # cat /proc/scsi/qla2xxx/1 |grep port scsi-qla0-adapter-port=210000145e24e4d4; Cek Aplikasi Device mapper & Installasi # rpm -qa|grep device-mapper # wget ftp://ftp.pbone.net/mirror/ftp.centos.org/4.6/os/i386/ CentOS/RPMS/device-mapper-multipath-0.4.5-27.RHEL4.i386.rpm # wget ftp://ftp.pbone.net/mirror/ftp.centos.org/4.6/os/i386/ CentOS/RPMS/sysfsutils-1.2.0-1.i386.rpm # rpm -ivh sysfsutils-1.2.0-1.i386.rpm # rpm -ivh device-mapper-multipath-0.4.5-27.RHEL4.i386.rpm ModProbe ke Kernel # modprobe dm-multipath Startup Config # chkconfig multipathd on # service multipathd start Inisialisasi Multipathing untuk Pertama Kali # dmsetup ls --target=multipath 360060e80042ab00000002ab00000010b (253, 0) Cek Multipathingnya # multipath -ll 360060e80042ab00000002ab00000010b [size=50 GB][features=”0″][hwhandler=”0″] \_ round-robin 0 [prio=1][active] \_ 1:0:0:0 sdb 8:16 [active][ready] \_ round-robin 0 [prio=1][enabled] \_ 2:0:0:0 sdc 8:32 [active][ready] Verifikasi # scsi_id -g -s /block/sdb 360060e80042ab00000002ab00000010b # scsi_id -g -s /block/sdc 360060e80042ab00000002ab00000010b '''. Внимание''' для последних версий изменился синтаксис команды scsi_id, теперь нужно писать # scsi_id -g -d /dev/sdb и # scsi_id -g -d /dev/sdс Edit Konfigurasi, Untuk menambahkan device yang akan di”black list” dari multipathing, penggunaan “Friendly Name”, di Multipathnya # vi /etc/multipath.conf ————-add config—————– # Blacklist all devices by default. Remove this to enable multipathing # on the default devices. devnode_blacklist < devnode cciss devnode fd devnode hd devnode md devnode sr devnode scd devnode st devnode ram devnode raw devnode loop devnode sda # internal disk saya >## Use user friendly names, instead of using WWIDs as names. defaults < user_friendly_names yes path_grouping_policy multibus failback immediate >—————end config—————– Simpan Konfigurasinya # multipath -F Cek Disknya # multipath -v2 create: mpath0 (360060e80042ab00000002ab00000010b) [size=50 GB][features=”0″][hwhandler=”0″] \_ round-robin 0 [prio=1] \_ 1:0:0:0 sdb 8:16 [active][ready] \_ round-robin 0 [prio=1] \_ 2:0:0:0 sdc 8:32 [active][ready] Cek “friendly namesnya” sudah jalan Pa belum # multipath -ll mpath0 (360060e80042ab00000002ab00000010b) [size=50 GB][features=”0″][hwhandler=”0″] \_ round-robin 0 [prio=1][active] \_ 1:0:0:0 sdb 8:16 [active][ready] \_ round-robin 0 [prio=1][enabled] \_ 2:0:0:0 sdc 8:32 [active][ready] Tambahkan Nama devices ke database Multipath # multipath -v3|egrep "vendor|product" vendor = HITACHI product = OPEN-V vendor = HITACHI product = OPEN-V # vi /etc/multipath.conf ——–add config——— devices < device < vendor “HITACHI” product “OPEN-V.” getuid_callout “/sbin/scsi_id -g -u -p0×80 -s /block/%n” >> ———end config——– # multipath -F # multipath -ll mpath0 (SHITACHI_OPEN-V_________10928_) [size=50 GB][features=”0″][hwhandler=”0″] \_ round-robin 0 [prio=1][active] \_ 1:0:0:0 sdb 8:16 [active][ready] \_ round-robin 0 [prio=1][enabled] \_ 2:0:0:0 sdc 8:32 [active][ready] Bikin Mount Point Baru # fdisk -l /dev/mapper/mpath0 Disk /dev/mapper/mpath0: 53.6 GB, 53688664064 bytes 64 heads, 32 sectors/track, 51201 cylinders Units = cylinders of 2048 * 512 = 1048576 bytes # pvcreate /dev/mapper/mpath0 Physical volume “/dev/mapper/mpath0″ successfully created # vgcreate vg00 /dev/mapper/mpath0 Volume group “vg00″ successfully created # lvcreate -L 25G -n lvol1 vg00 Logical volume “lvol1″ created # mkfs.ext3 /dev/vg00/lvol1 # mkdir /archive # mount /dev/vg00/lvol1 /archive # vi /etc/fstab ——–add config——— /dev/mapper/vg00-lvol1 /archive ext3 defaults 1 2 ——–end config——— # df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 20G 9.2G 9.2G 50% / /dev/sda1 190M 18M 163M 10% /boot none 2.0G 0 2.0G 0% /dev/shm /dev/sda6 15G 4.7G 9.0G 35% /home /dev/sda7 9.7G 56M 9.1G 1% /opt /dev/sda8 3.9G 59M 3.6G 2% /tmp /dev/sda5 15G 7.2G 6.6G 53% /var /dev/mapper/vg00-lvol1 25G 77M 24G 1% /archive Extend MountPoint Barunya # lvdisplay /dev/vg00/lvol1 — Logical volume — LV Name /dev/vg00/lvol1 VG Name vg00 LV UUID uRNOWC-2OQ8-SNSD-BgB1-3i1y-eYVe-21Y11n LV Write Access read/write LV Status available # open 1 LV Size 35.00 GB Current LE 8960 Segments 1 Allocation inherit Read ahead sectors 0 Block device 253:1 # lvextend -L +10G /dev/vg00/lvol1 Extending logical volume lvol1 to 35.00 GB Logical volume lvol1 successfully resized # ext2online /archive ext2online v1.1.18 - 2001/03/18 for EXT2FS 0.5b # df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 20G 9.2G 9.2G 50% / /dev/sda1 190M 18M 163M 10% /boot none 2.0G 0 2.0G 0% /dev/shm /dev/sda6 15G 4.7G 9.0G 35% /home /dev/sda7 9.7G 56M 9.1G 1% /opt /dev/sda8 3.9G 59M 3.6G 2% /tmp /dev/sda5 15G 7.2G 6.6G 53% /var /dev/mapper/vg00-lvol1 35G 81M 33G 1% /archive
  • Отсюда: Linux Multipath Setup Howto (индонез.)

Устройства множественного связывания

Без DM-Multipath каждый канал от серверного узла к контроллеру накопителя рассматривается системой как отдельное устройство, даже когда канал ввода/вывода соединяет тот же сервер с тем же контроллером накопителя. DM-Multipath предоставляет возможность организации каналов ввода/вывода локально через создание единого устройства множественного связывания поверх основных устройств.

Идентификаторы устройств множественного связывания

Каждое устройство множественного связывания имеет международный идентификатор (WWID), который гарантирует глобальную уникальность и неизменность. По умолчанию в имя устройства множественного связывания вставляется его WWID. В качестве альтернативы вы можете установить опцию user_frendly_names в конфигурационном файле, который предписывает DM-Multipath использовать алиас node-unique формы mpathn в качестве имени. Например, узел с двумя адаптерами шины (HBA) подключенными к контроллеру накопителя с двумя портами через единый беззоновый волоконный канал (FC) увидит четыре устройства: /dev/sda, /dev/sdb, /dev/sdc и /dev/sdd. DM-Multipath создает единое устройство с уникальным WWID, которое перенаправляет ввод/вывод на эти четыре зависимых устройства в зависимости от конфигурации. Когда настроечная опция user_friendly_names установлена в yes, имя множественного устройства устанавливается в mpathn. Когда новые устройства попадает под управление DM-Multipath, их можно увидеть в двух разных местах в каталоге /dev: /dev/mapper/mpathn и /dev/dm-n.

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

Устройства в виде /dev/dm-n только для внутреннего использования и никогда не должны использоваться.

Для информации о настройках по умолчанию для множественных устройств, включая опцию настройки user_friendly_names, смотрите секцию Конфигурационный файл DM-Multipath.

Согласованные имена множественных устройств в кластере

Когда опция user_friendly_names установлена в yes, имя множественного устройства уникально для узла, но не гарантируется то же самое на всех узлах, использующих это устройство. Также, если вы установили опцию алиаса для устройства в секции multipaths конфигурационного файла multipath.conf, имя не будет автоматически согласовано со всеми узлами кластера. Это не вызовет сложностей при использовании LVM для создания логических устройств на множественном устройстве, но если вам требуется согласовать имена множественных устройств на всех узлах, рекомендуется оставить user_friendly_names значение no и не настраивать алиасы для устройств. По умолчанию, если у вас не установлено user_friendly_names в yes и не настроен алиас для устройства, имя для этого устройства будет совпадать с WWID, которое всегда одно и то же. Если же вы хотите согласованные дружественные имена, определяемые системой для всех узлов в кластере, следуйте данной процедуре:

Установите все множественные устройства на одной машине.
Заблокируйте все ваши множественные устройства на других машинах, выполнив команды:

# service multipath-tools stop # multipath -F

Скопируйте файл /etc/multipath/bindings с первой машины на все остальные в кластере.
Восстановите работу сервиса multipathd на всех остальных машинах командой:

# service multipath-tools start

Если вы добавляете новое устройство, вам потребуется повторить этот процесс.

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

Настройте алиасы для множественных устройств в файле multipath.conf на одной машине.
Заблокируйте все ваши множественные устройства на других машинах, выполнив команды:

# service multipath-tools stop # multipath -F

Скопируйте файл multipath.conf с первой машины на все остальные в кластере.
Восстановите работу сервиса multipathd на всех остальных машинах командой:

# service multipath-tools start

Если вы добавляете новое устройство , вам потребуется повторить процесс.

Атрибуты множественных устройств

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

Множественные устройства в логических томах

После создания множественных устройств вы можете использовать их имена так же как и имя физического устройства при создании физических томов LVM. Например, если /dev/mapper/mpatha имя множественного устройства, следующая команда пометит /dev/mapper/mpatha как физический том:

# pvcreate /dev/mapper/mpatha

Вы можете использовать полученный физический том LVM при создании группы томов LVM так же, как вы использовали бы другое физическое устройство.

Если вы пытаетесь создать физический том LVM на все устройство, на котором у вас сконфигурированы разделы, команда pvcreate приведет к ошибке.

Когда вы создаете логический том LVM, который использует массив носителей как активно/пассивное множественное устройство в качестве зависимых физических устройств, вы должны включить фильтры в lvm.conf для исключения дисков, на которых основано множественное устройство. Это нужно для ситуации, когда массив автоматически меняет активный маршрут на пассивный при получении [ошибки] ввода/вывода и множественное устройство будет обходить ошибку и восстанавливаться после сбоя всякий раз как LVM сканирует пассивный маршрут, если устройство не отфильтровано. Для активно/пассивных массивов, которые требуют команду для перевода пассивного маршрута в активное состояние, LVM каждый раз выводит предупреждение. Для фильтрования всех SCSI устройств в конфигурационном файле LVM (lvm.conf), включите следующий фильтр в секцию devices файла:

filter = [ "r/block/", "r/disk/", "r/sd.*/", "a/.*/" ]

После изменений в /etc/lvm.conf необходимо обновить initrd так, чтобы этот файл был скопирован туда, где фильтры имеют максимальную важность, во время загрузки. Выполните:

update-initramfs -u -k all

Каждый раз, как меняется /etc/lvm.conf или /etc/multipath.conf, initrd должен быть создан заново для отражения этих изменений. Это обязательно когда «черные списки» и фильтры необходимы для поддержания стабильной настройки хранилища.

  • Сайт
  • Об Ubuntu
  • Скачать Ubuntu
  • Семейство Ubuntu
  • Новости
  • Форум
  • Помощь
  • Правила
  • Документация
  • Пользовательская документация
  • Официальная документация
  • Семейство Ubuntu
  • Материалы для загрузки
  • Совместимость с оборудованием
  • RSS лента
  • Сообщество
  • Наши проекты
  • Местные сообщества
  • Перевод Ubuntu
  • Тестирование
  • RSS лента

© 2018 Ubuntu-ru — Русскоязычное сообщество Ubuntu Linux.
© 2012 Canonical Ltd. Ubuntu и Canonical являются зарегистрированными торговыми знаками Canonical Ltd.

Multipath I/O для программного iSCSI

Multipath I/O — технология, позволяющая задействовать нескольких контроллеров или шин для доступа к одному устройству хранения данных. Например, один SCSI диск может быть подсоединён к двум SCSI контроллерам. В случае отказа одного из них, операционная система будет продолжать работать по другому. Это дает возможность повысить производительность и отказоустойчивость среды передачи данных.
В случае с iSCSI, принципиальная схема не меняется т.к. подключенные по сети блочные устройства (iSCSI-Target) для операционной системы не чем не отличаются от локальных устройств хранения данных. Единственное, что вместо SCSI контроллеров и шлейфов, используются компоненты обычного Ethernet — сетевые карты, медные или оптические кабеля. В продуктах VMware и Citrix данную технологию можно встретить под именем Multipathing.

Device-Mapper Multipath (DM Multipath, множественное связывание устройств) — название реализации технологии Multipath I/O в Linux доступной во всех современных дистрибутивах. Реализован в виде модуля ядра. Прозрачно для приложений, представляет массив, доступный по нескольким путям, в виде одного мета-устройства.

Использование DM Multipath позволяет достичь следующего:

• Отказоустойчивость — в случае сбоя любого маршрута (кабеля, контроллера или коммутатора) DM-Multipath начнет использовать альтернативный путь из числа не активных.
• Балансировка нагрузки – запросы ввода и вывода распределяюся между путями по очереди, что равномерно загружает все доступные сетевые контроллеры и каналы.


Рис №1. Типовая схема применения DM Multipath

Основные компоненты DM Multipath

dm_multipath — перенаправляет ввод-вывод
dm_round_robin — обеспечивает отказоустойчивость маршрутов и их груп

mpathconf — Используется для настройки возможностей DM-Multipath.
multipath — Позволяет просмотреть топологию маршрутов, принудительно переключаться между режимами.

multipathd — Следит за маршрутами, инициализирует переключение групп маршрутов при их сбое и восстановлении и позволяет изменять устройства интерактивно.

Как работает DM Multipath

Работу Multipath I/O лучше всего проиллюстрировать на примере. Допустим есть сеть хранения данных (СХД) с двумя сетевыми контроллерами (хотя их может быть сколько угодно) eth0 — 192.168.0.10/24, eth1 — 192.168.1.10/24. Тип СХД не принципиален, возможно это Fibre Chanel (FC), Fibre Chanel over Ethernet (FCoE) или iSCSI — который мы и будем использовать в качестве примера. На СХД имеется дисковый массив доступный как iSCSI-Target на обоих сетевых интерфейсах. При подключении к нему на другом сервере, так же с двумя сетевыми интерфейсами eth0-192.168.0.130/24, eth1-192.168.1.130/24 получим два, как будто бы разных массива, но фактически, он один.

# iscsiadm -m discovery -t sendtargets -p 192.168.0.10:3260

# iscsiadm -m discovery -t sendtargets -p 192.168.1.10:3260

После выполнения этих команд и перезагрузки сервиса iscsi, мы обнаружим в выводе fdisk -l два новых блочных устройства. Убедиться в том, что оба диска являются одним и тем же массивом СХД, можно сравнив идентификаторы iSCSI ID.

# scsi_id -g /dev/sdb

# scsi_id -g /dev/sdc

Такая ситуация происходит из-за того, что программный iSCSI-Initiator с помощью которого выполняется подключение устройств iSCSI, не умеет работать с одним блочным устройством используя несколько путей. Даже если это одно и тоже устройство. Другой канал, значит и устройство тоже другое.

Вот здесь на помощь и приходит DM Multipath, понимающий, что к разным маршрутам подключен один и тот же массив. При этом количество путей, может быть произвольным и даже не одинаковым на обеих сторонах. Например если у сервера на котором подключается iSCSI-Target больше сетевых контроллеров чем у самой СХД. Но они настроены на работу в одной подсети и через них так же доступен дисковый массив. Они будут сгруппированы DM Multipath и настроены в соответствии с выбранным режимом о которых пойдет речь ниже.

Исходные данные

В качестве СХД используется StarWind iSCSI SAN со свободной лицензией, установленный на Windows Server 2008 R2. В сервере имеются два контроллера Gigabit Ethernet (192.168.0.10/24, 192.168.1.10/24). Тестовый iSCSI-Traget, одинаково доступен по двум маршрутам.

В качестве сервера на котором будет задействован DM-Multipath при подключении iSCSI-Target’a используется CentOS 6.3 с двумя контроллерами Gigabit Ethernet (192.168.0.130/24, 192.168.1.130/24)
В ходе настройки понадобится ряд утилит установить которые не составит труда из стандартных репозиториев.

В CentOS для их установки вводим команду:

# yum –y install device-mapper-multipath iscsi-initiator-utils

# apt-get install open-iscsi open-iscsi-utils multipath-tools

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

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

Настройка

Первым делом, необходимо подключить iSCSI-Target доступный по нескольким маршрутам используя iscsiadm с параметрами указанными в примере выше.
Перезапускаем службу iscsi для того что бы обнаруженные iSCSI-Targets были подключены как локальные диски.

Далее как и во вступительном примере, обнаруживаем два как будто бы разных диска (/dev/sdb, /dev/sdс).

Диск /dev/sda: 8589 МБ, 8589934592 байт

(листинг локальных дисков не приводится для сокращения объемов статьи)

Диск /dev/sdb: 536 МБ, 536870912 байт
17 heads, 61 sectors/track, 1011 cylinders
Units = цилиндры of 1037 * 512 = 530944 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Диск /dev/sdc: 536 МБ, 536870912 байт
17 heads, 61 sectors/track, 1011 cylinders
Units = цилиндры of 1037 * 512 = 530944 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Теперь, когда наш дисковый массив подключен, настроим для него Multipath I/O.
Все действия сводятся к правке конфигурационного файла multipathd.conf который после установки пакета device-mapper-multipath должен находиться в /etc, но в некоторых дистрибутивах может отсутствовать.
По этому, сами возьмем шаблон multipathd.conf с настройками по умолчанию и поместим его в нужный каталог.

# cp /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf /etc/multipath.conf

Предназначение секций конфигурационного файла, а так же исчерпывающие описание параметров можно найти по ссылке [1] в конце статьи. По умолчанию, все разделы файла закомментированы. Для нормальной работы DM Multipath необходимо раскомментировать секцию defaults и для пункта path_grouping_policy указать предпочитаемую политику. Наиболее часто используемыми значениями являются:

failover = Режим активный/пассивный. В таком случае будет использоваться один из доступных маршрутов, а второй — является резервом на случай отказа первого. Данный режим используется по умолчанию.
multibus = Активный/активный. Все маршруты будут использоваться одновременно.

Так же, можно смело включить секцию blacklist с перечислением тех устройств для которых DM Multipath выключен. В этот список попадают локальные флопи и ide диски и другие не используемые в нашем случае устройства.

В результате, multipathd.conf должен принять примерно следующий вид. Остальные настройки сейчас не важны.

defaults udev_dir /dev
polling_interval 10
path_selector «round-robin 0»
path_grouping_policy failover
getuid_callout «/lib/udev/scsi_id —whitelisted —device=/dev/%n»
prio alua
path_checker readsector0
rr_min_io 100
max_fds 8192
rr_weight priorities
failback immediate
no_path_retry fail
user_friendly_names yes
>

blacklist wwid 26353900f02796769
devnode «^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*»
devnode «^hd[a-z]»

После внесения изменений в конфигурационный файл, запускаем сервис multipathd

И добавляем службу multipathd в автозагрузку

# chkconfig multipathd on

Вместе с запуском службы, происходит автоматическая загрузка модулей ядра.
Проверяем их наличие.

# lsmod | grep dm_

dm_round_robin 2717 2
dm_multipath 17649 2 dm_round_robin

Если по какой то причине модули на загружены, то можно выполнить это в ручную.

# modprobe dm_multipath
# modprobe dm_round_robin

Если все сделано правильно, то в списке дисков выводимых fdisk –l должно появиться новое устройство, с тем же идентификатором (Disk identifier: 0x00000000).

Диск /dev/mapper/mpathb: 536 МБ, 536870912 байт
255 heads, 63 sectors/track, 65 cylinders
Units = цилиндры of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Далее, как и на любом другом диске, на нем нужно создать разделы. Но делать это нужно на оригинальном устройстве /dev/sdb или /dev/sdc, а не на новом мета-устройстве /dev/mapper/mpathb появившемся после настройки DM Multipath!

Если реальный диск еще не размечен, это можно сделать любым удобным средством.
Разметки дисков в Linux, посвящено достаточно много статей. Как это сделать конкретно с помощью fdisk, можно посмотреть по ссылке [2]. В случае если на подключенном диске уже существуют разделы, их можно просто смонтировать с помощью утилиты mount как показано ниже и использовать по назначению.
После разметки можно выполнить команду partprobe, что бы таблица разделов была перечитана или перезагрузить сервер.
После синхронизации, разделы созданные на одном из реальных дисков, появятся и на новом мета-устройстве;

….
Устр-во Загр Начало Конец Блоки Id Система
/dev/mapper/mpathbp1 1 1011 524173 83 Linux
….

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

# mkfs.ext3 /dev/mapper/mpathbp1
# mount /dev/mapper/mpathbp1 /test-dm

Тестирование

Тестирование работы DM Multipath проводилось в двух наиболее часто используемых режимах, применение которых мне кажется достаточным для решения большинства задач.

Режим failover

May 04 04:50:24 | sdb: alua not supported
May 04 04:50:24 | sdc: alua not supported
mpathb (210f6e58300000000) dm-2 ROCKET,RAM DISK 512 MB
size=512M features=’0′ hwhandler=’0′ wp=rw
|-+- policy=’round-robin 0′ prio=-1 status=active
| `- 4:0:0:0 sdb 8:16 active ready running
`-+- policy=’round-robin 0′ prio=-1 status=enabled
`- 3:0:0:0 sdc 8:32 active ready running

Утилита multipath с ключами -ll, отображает текущее состояние путей. Из данного листинга видно, что один из маршрутов находится в состоянии (status) active, а второй доступен, но не используется (status=enable).
В данном режиме, один из путей, автоматически выбирается активным. Оставшиеся маршруты, могут свободно использоваться при любом сетевом взаимодействии, но для multipathd они являются резервными и при доступе к блочному устройству не используются до выхода из строя основного маршрута.

Если настройка выполнена верно, то доступ к устройству /dev/mapper/mpathbp1 не должен быть потерян в случае проблем с одним из путей. Такую ситуацию легко симулировать путем физического отключения сетевого кабеля или выключения сетевого контроллера средствами ОС. В случае, отказа одного из резервных маршрутов, то нечего подозрительного в работе приложений использующих блочное устройство, замечено не будет. Все будет работать как и работало.
Если же произойдет отключение активного маршрута, то доступ к блочному устройству будет прерван на несколько секунд, после чего будет восстановлен через резервный. При этом приложение интенсивно работающее с блочным устройством, в момент отказа может зависнуть.

Режим multibus

May 04 04:10:16 | sdc: alua not supported
May 04 04:10:16 | sdb: alua not supported
mpathb (210f6e58300000000) dm-2 ROCKET,RAM DISK 512 MB
size=512M features=’0′ hwhandler=’0′ wp=rw
`-+- policy=’round-robin 0′ prio=-1 status=active
|- 3:0:0:0 sdc 8:32 active ready running
`- 4:0:0:0 sdb 8:16 active ready running

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

Производительность

ВАЖНО: Если основной решаемой задачей является не отказоустойчивость а повышение производительности операций вводавывода. То применять Multipath I/O стоит только в том случае, если в вашем хранилище, достаточно быстрый массив, полностью загружающий один канал. В случае, если единственный маршрут ведущий к массиву не загружается полностью хотя бы под пиковыми нагрузками, добавление еще одного маршрута лишь приведет к потере производительности и увеличению задержек(latency)!

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

Результаты работы утилиты dd;

# time -p dd if=/dev/ of=/dev/null bs=1024k

При одном канале, по стандартной схеме без Multipath I/O;

1073741824 bytes (1.1 GB) copied,
29.0323 s 37 Mb/s

А это уже dd с Multipath I/O поверх двух гигабитных каналов

1073741824 bytes (1.1 GB) copied,
23.4791 s, 48.0 Mb/s

Кроме утилиты dd были выполнены тесты с помощью утилиты fio (flexible I/O tester), информацию о которой можно найти по ссылке[3] в конце статьи.

Вкратце отмечу, что по результатам тестирования было выявлено примерно одинаковое количество iops(число операция вводавывода в секунду) как в случае с одним каналом так и при Multipath I/O. Такая же ситуация и с latency(время ответа от массива). То есть количество маршрутов увеличивает суммарную пропускную способность но не как не улучшает остальные характеристики каналов.

Выводы

DM Multipath является низкоуровневым средством для оптимизации и повышения надежности сетевого ввода/вывода. Даже при использовании дешевого оборудования и стандартного Ethernet, можно построить достаточно производительную и надежную среду передачи данных. Особенно это эффективно в случае с iSCSI в контексте виртуализации.
В данной статье я использовал по два сетевых контроллера с каждой стороны, но их число может быть произвольным. Причем не обязательно одинаковым на обеих сторонах.
При более тонкой настройке, можно добиться любой желаемой производительности и обеспечить необходимый уровень резервирования. Особенно, удобно то, что настройки требует только та сторона на которой выполняется подключение блочного устройства.
При сравнении возможных режимов, наиболее оптимальным мне показался режим multibus т. к. он позволяет задействовать всю пропускную способность, при этом не уступая в надежности режиму failover.

Ссылки

1. Исчерпывающее описание секций и параметров конфигурационного файла multipathd.conf — http://link.ac/dm-multipath-config
2. Разметка диска с помощью fdisk — http://jack.kiev.ua/docs/slackbook/installation-partitioning.html
3. Утилита fio и методика тестирования дисковой подсистемы —http://habrahabr.ru/post/154235/

Помогла ли вам статья?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *