Создаем своими руками Fiber Channel Target

Товарищ Virus, подаривший нам статьи про отказоустойчивый iSCSI-таргет и про установку ESX4i на офисных компах, снова на связи.

Как сделать Linux FC-target из компа, кучи SATA-дисков и FC-карты QLogic?

Что это нам дает:

  1. Возможность дешево получить дисковое место, подключаемое по Fibre Channel (вы возможно слышали о тормозах из-за latency при работе по iscsi?)
  2. Полное управление возможностями без дополнительных лицензий (опять же, возможно, слышали о Flashcache?)
  3. Полный контроль над ошибками и сбоями (а знали ли что mdadm умеет сам проверять состояние рейда и присылать письма в электронку если какой-то диск поломался?)
  4. Возможность подкрутить параметры и получить быстрый ребилд и лишние проценты производительности (Write-intent bitmap или stripe_cache_size?)

Что нам потребуется:

  1. Компьютер с PCIe 4,8 или 16х, желательно более 4ГБ ОЗУ и процессор новее, чем 2007 года выпуска (все же Gentoo будет компилировать свои кусочки).
  2. Карточка FC фирмы QLogic: 2400/2500/2600/8100/8300 (якобы с другими не работает, но я запускал на 2432. Список совместимых — http://linux-iscsi.org/wiki/Fibre_Channel#Hardware_support).
  3. Кроме дисков в RAID, нужен будет ещё диск под систему, все попытки запускать backstore на файлах заканчивались у меня зависаниями.

Первым делом необходимо установить ОС (в моем случае Gentoo, но технически можно любую – пропадет удобство сборки и обновления – из RPM/YUM не работает). Тут все банально, следует лишь учесть что ядро стоит брать самое новое (например, ловил глюки в TCM на версии 3.8.х которых не стало при переходе на 3.9-rc), а само ПО управления из GIT.

После установки нужно сконфигурировать ядро для поддержки Generic Target Core Mod (TCM). Я брал sys-kernel/Gentoo-sources версии 3.9.4 и настраивал следующим образом(Device Drivers / Generic Target Core Mod (TCM) and ConfigFS Infrastructure):clip_image001[4]
Если у вас меньше строчек в этой меню – вы что-то забыли активировать.

Наиболее вероятно, что нет строки TCM_FC и не активирован драйвер HBA QLogic – (что приводит к невозможности работы с FC и ошибкам при настройке) искать это тут (Device Drivers / SCSI device support / SCSI low-level drivers):clip_image003[4]

Собственно на этом с ядром все, собираем и перезагружаемся в него (genkernel all&&reboot).

После этого в файле /etc/modprobe.d/qla2xxx.conf необходимо указать что адаптер не должен инициализироваться в режиме инициатора:

options qla2xxx qlini_mode="disabled"

далее устанавливаем саму программу управления:

emerge -av sys-block/targetcli

RAID-массив у меня уже есть, нужно только к нему приделать bitmap:

# cat /proc/mdstat
md127 : active raid5 sde2[2] sdb2[0] sdc2[1] sdd2[3]
5860222464 blocks level 5, 256k chunk, algorithm 2 [4/4] [UUUU]
mdadm -G /dev/md127 -b /md127_intent

и видим что все получилось:

# cat /proc/mdstat
md127 : active raid5 sde2[2] sdb2[0] sdc2[1] sdd2[3]
5860222464 blocks level 5, 256k chunk, algorithm 2 [4/4] [UUUU]
bitmap: 466/466 pages [1864KB], 2048KB chunk, file: /md127_intent

добавим в автозапуск настройки (файл /etc/local.d/settings.start):

/sbin/mdadm --monitor --mail=ven@с***y.ru --daemonise /dev/md127
/usr/bin/setterm -powersave off -blank 0
sysctl -w dev.raid.speed_limit_min=500000
echo "2000000" > /sys/block/md127/md/sync_speed_max
blockdev --setra 16384 /dev/md127
echo 16384 > /sys/block/md127/md/stripe_cache_size

готово, теперь у нас отличный набор безумно дешевых SATA-дисков доступен, как RAID5, но пока только изнутри системы.

запускаем ПО:

 # targetcli

видим что инициализация прошла успешно (выделил болдом самое важное место):

Warning: Could not load preferences file /root/.targetcli/prefs.bin.
targetcli GIT_VERSION (rtslib GIT_VERSION)
Copyright (c) 2011 by RisingTide Systems LLC.
All rights reserved.
Loaded tcm_fc kernel module.
Created '/sys/kernel/config/target/fc'.
Loaded tcm_qla2xxx kernel module. Created '/sys/kernel/config/target/qla2xxx'.
Loaded tcm_loop kernel module.
Created '/sys/kernel/config/target/loopback'.
Loaded iscsi_target_mod kernel module.
Created '/sys/kernel/config/target/iscsi'.

Отлично, давайте настроим карту:

qla2xxx/ info
Fabric module name: qla2xxx
ConfigFS path: /sys/kernel/config/target/qla2xxx
Allowed WWNs list (free type): 21:00:00:e0:8b:94:2b:98 Fabric module specfile: /var/target/fabric/qla2xxx.spec
Fabric module features: acls
Corresponding kernel module: tcm_qla2xxx

С другим WWN карта создать вам не даст, это не Ethernet:

qla2xxx/ create 21:00:00:e0:8b:94:2b:98
Created target 21:00:00:e0:8b:94:2b:98.

Создаем хранилище:

backstores/iblock create sata-r5 /dev/md127
Generating a wwn serial.
Created iblock storage object sata-r5 using /dev/md127

Создаем LUN0:

/qla2xxx/21:00:00:e0:8b:94:2b:98/luns create /backstores/iblock/sata-r5
Selected LUN 0.
Successfully created LUN 0.

Добавляем доступ с инициаторов (не забудьте прописать зоны в FC-свитчах!):

/qla2xxx/21:00:00:e0:8b:94:2b:98/acls create 21:00:00:1b:32:1f:76:a0
Successfully created Node ACL for 21:00:00:1b:32:1f:76:a0
Created mapped LUN 0.

Смотрим, что получилось:

ls
o- / ......................................................................................................................... [...]
o- backstores .............................................................................................................. [...]
| o- fileio ................................................................................................... [0 Storage Object]
| o- iblock ................................................................................................... [1 Storage Object]
| | o- sata-r5 ............................................................................................ [/dev/md127 activated]
| o- pscsi .................................................................................................... [0 Storage Object]
| o- rd_dr .................................................................................................... [0 Storage Object]
| o- rd_mcp ................................................................................................... [0 Storage Object]
o- iscsi ............................................................................................................. [0 Targets]
o- loopback .......................................................................................................... [0 Targets]
o- qla2xxx ............................................................................................................ [1 Target]
| o- 21:00:00:e0:8b:94:2b:98 ........................................................................................... [enabled]
| o- acls ............................................................................................................. [3 ACLs]
| | o- 10:00:00:05:1e:fb:28:cc .................................................................................. [1 Mapped LUN]
| | | o- mapped_lun0 ............................................................................................... [lun0 (rw)]
| | o- 21:00:00:1b:32:1f:76:a0 .................................................................................. [1 Mapped LUN]
| | | o- mapped_lun0 ............................................................................................... [lun0 (rw)]
| | o- 21:00:00:1b:32:88:d8:eb .................................................................................. [1 Mapped LUN]
| | |  o- mapped_lun0 ............................................................................................... [lun0 (rw)]
| o- luns .............................................................................................................. [1 LUN]
| o- lun0 ...................................................................................... [iblock/sata-r5 (/dev/md127)]
o- tcm_fc ............................................................................................................ [0 Targets]

сохраняем настройки:

/> saveconfig
WARNING: Saving localhost current configuration to disk will overwrite your boot settings.
The current target configuration will become the default boot config.
Are you sure? Type 'yes': yes
Making backup of loopback/ConfigFS with timestamp: 2013-05-31_03:05:44.355635
Successfully updated default config /etc/target/loopback_start.sh
Making backup of qla2xxx/ConfigFS with timestamp: 2013-05-31_03:05:44.355635
Successfully updated default config /etc/target/qla2xxx_start.sh
Making backup of fc/ConfigFS with timestamp: 2013-05-31_03:05:44.355635
Successfully updated default config /etc/target/fc_start.sh
Making backup of LIO-Target/ConfigFS with timestamp: 2013-05-31_03:05:44.355635
Generated LIO-Target config: /etc/target/backup/lio_backup-2013-05-31_03:05:44.355635.sh
Making backup of Target_Core_Mod/ConfigFS with timestamp: 2013-05-31_03:05:44.355635
Generated Target_Core_Mod config: /etc/target/backup/tcm_backup-2013-05-31_03:05:44.355635.sh
Successfully updated default config /etc/target/lio_start.sh
Successfully updated default config /etc/target/tcm_start.sh

Собственно все, у вас в свойствах FC адаптера должен появится таргет с похожим именем:

LIO-ORG Fibre Channel Disk (naa.6001405d566ba0125e644df8007603ce)

Не забудьте проверить:

  1. На свитче настроены zone, это самая частая ошибка.
  2. Target прописан в автостарте и вообще запускается.
  3. Установлен пакет с firmware (sys-block/qla-fc-firmware)
  4. FC-адаптер на таргете виден в lspci, очень часто PCIe выпадывают из слота. (выполнить lspci | grep ibre ): 02:00.0 Fibre Channel: QLogic Corp. ISP2432-based 4Gb Fibre Channel to PCI Express HBA (rev 02).
  5. FC адаптер на esxi установился, некоторые требуют установки extension.

Далее можно использовать устройство в VMware, но для оптимального результата стоит отключить ускорение (конечно если у вас нет других СХД, поддерживающих эту фичу – посмотреть можно в storage, колонка «hardware acceleration») иначе ESXi будет при каждой операции его пытаться использовать и тормозить.

clip_image005[4]

9 комментариев к “Создаем своими руками Fiber Channel Target”

  1. Было бы очень интересно почитать об этом же в разрезе использования технологии
    Fibre Channel over Ethernet.

  2. Здравствуйте.
    А cкорость работы Вы с таким таргетом случайно не тестировали?
    Т.е. интересна скорость чтения/записи самого raid в сервере и скорость чтения/записи таргета этого же raid оver FС.

  3. я так понимаю вас интересуют накладные расходы? их полноценно не тестировали.
    однако эта инсталляция всю полосу FC забивала, когда данные лказывались на ssd кэше.

  4. Здравствуйте, почтеннейшие.

    Если имели опыт создания Shared Storage (общих LUN-ов на несколько узлов в кластере) через targetcli, то подскажите, что нужно «подкрутить» в свойствах LUN-а, чтобы не было проблем с его доступностью сразу с нескольких узлов кластера.

  5. Пока LUN, полученный из LIO-таргета захвачен одним инициатором — вроде как всё тихо-спокойно. Как только отдаём этот LUN второму, третьему и т.д. инициатору, все инициаторы начинают сходит с ума (у инициаторов поочерёдно отваливается/появляется не только этот LUN, но и другие). Как я понимаю, проблема в конкурентном доступе к LUN-у, и, как я понимаю, проблема связана с Persistent Reservation. Так вот вопрос в том, какие дополнительные шаги требуются при конфигурации LUN-а, если его планируется использовать в мульти-хостовых подключениях, например в качестве стораджа под CSV в кластере Hyper-V.

  6. Вопрос не про сторону Hyper-V. Там всё в порядке. Подключение выполнялось к действующему двух-узловому кластеру, где другие тома CSV (с HP 3PAR/MSA) подключены и работают без вопросов. После этого была попытка подключить LUN уже к кластеру oVirt из трёх узлов CentOS 7, и там с этим LUN-ом наблюдалась точно такая же картина. Очевидно, что не хватает каких-то настроек на стороне таргета, которые позволяли бы использовать LUN в качестве Shared Storage

  7. Боюсь что вопрос именно про сторону клиента.
    Если вы конечно не подняли lio на чемто древнем типа 7го центоса.
    Судя по документации все должно работать у вас.
    Ps: VMware судя по документации эти механизмы не использует, переходите на неё)))

Оставьте комментарий

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