Fiber Channel — Настройка хоста (FC Target)
Fibre Channel (FC) (англ. fibre channel — волоконный канал) — семейство протоколов для высокоскоростной передачи данных. Fibre Channel Protocol (FCP) — транспортный протокол (как TCP в IP-сетях), инкапсулирующий протокол SCSI по сетям Fibre Channel. Является основой построения сетей хранения данных.
Ядро Linux имеет поддержку драйвера клиента FC. Однако, можно настроить и драйвер сервера (таргета) FC. Для этих целей можно воспользоваться драйвером Generic SCSI Target Subsystem for Linux (SCST) и устройством QLogic 22xx/23xx/24xx/25xx/26xx.
Данное руководство воспроизводилось на Rosa Enterprise Linux Server 7.3
Сборка драйвера
Ядро Linux не имеет встроенного драйвера SCST, а так же средства управления таргетами. В дистрибутиве RELS 7.3 (а так же в CentOS 7.3) готовых пакетов тоже нет. Их придется собрать. Разработчики SCST максимально упростили задачу.
Подготовка к сборке
Установка необходимых зависимостей (возможно придется подключать репозиторий Epel):
yum install bzip2 gcc kernel-devel or kernel-default-devel libelf-dev, libelf-devel perl-devel make perl perl-Data-Dumper perl-ExtUtils-MakeMaker rpm-build tar
Сборка
Необходимо перейти в каталог scst и выполнить с правами пользователя root сборку:
Каталог сборки находиться в /usr/src/packages.
Установка
После сборки нужно будет установить пакеты вида:
- scst-3.10.0-514.51.1.el7.x86_64-devel-3.5.0.9210-1.res7.noarch.rpm
- scst-3.10.0-514.51.1.el7.x86_64-3.5.0.9210-1.res7.x86_64.rpm
- scstadmin-1.0.0-1.x86_64.rpm
Необходимо отключить драйвер qla2xxx
echo blacklist qla2xxx >/etc/modprobe.d/blacklist-qla2xxx.conf rmmod qla2xxx
Необходимо подключить драйвер scst в ядаро
modeprob scst_cdrom scst_changer scst_disk scst_modisk scst_processor scst_raid scst_tape scst_user scst_vdisk
Для того, чтобы драйвера грузились автоматически нужно пересобрать initrd:
mkinitrd -f /boot/initramfs-`uname -r`.img `uname -r`
После пересборки initrd необходимо перезагрузить сервер.
Настройка
Добавляем загрузку конфига таргета
chmod +x /etc/rc.d/rc.local echo scstadmin -config /etc/scst.conf >> /etc/rc.d/rc.local
Конфиг SCST
Необходимо создать файл /etc/systemd/system/scst-config.service
[Unit] Description=SCST Configuration Service After=scst.service [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/sbin/scstadmin -config /etc/scst.conf StandardOutput=journal [Install] WantedBy=multi-user.target
HANDLER < DEVICE < filename size > > TARGET_DRIVER copy_manager < TARGET copy_manager_tgt >TARGET_DRIVER qla2x00t < TARGET < HW_TARGET enabled 0 rel_tgt_id 1 GROUP HOST-VM1 < LUN 0 INITIATOR > > TARGET < HW_TARGET enabled 1 rel_tgt_id 2 GROUP HOST-VM2 < LUN 0 INITIATOR > > >
DEVICE_HANDLER можно узнать командой:
TARGET_ID (по сути Mac-адрес) FC устройства можно получить командой
cat /sys/class/scsi_host/host*/device/fc_host/host*/node_name
Таким же способом узнается адрес таргета инициатора (только на клиенте). Адрес таргета вводиться в формате
Добавляются в автозагрузку сервисы scst и scst-config
systemnctl enable scst scst-config
Данные сервисы необходимо запустить.
systemnctl start scst scst-config
Если ошибок нет, то сервер перезагружается.
Пример конфига
HANDLER vdisk_blockio < DEVICE HDD-4TB-RAID-10 < filename /dev/sdd size 4000730669056 >DEVICE SSD-400-RAID-10 < filename /dev/sdb size 480047095808 >> TARGET_DRIVER copy_manager < TARGET copy_manager_tgt >TARGET_DRIVER qla2x00t < TARGET 50:01:43:80:09:ad:cd:00 < HW_TARGET enabled 0 rel_tgt_id 1 GROUP HOST-VM1 < LUN 0 SSD-400-RAID-10 LUN 1 HDD-4TB-RAID-10 >> TARGET 50:01:43:80:09:ad:cd:02 < HW_TARGET enabled 1 rel_tgt_id 2 GROUP HOST-VM2 < LUN 0 SSD-400-RAID-10 LUN 1 HDD-4TB-RAID-10 INITIATOR 50:01:43:80:06:2e:3b:be >> >
Создаем своими руками Fiber Channel Target
Товарищ Virus, подаривший нам статьи про отказоустойчивый iSCSI-таргет и про установку ESX4i на офисных компах, снова на связи.
Как сделать Linux FC-target из компа, кучи SATA-дисков и FC-карты QLogic?
- Возможность дешево получить дисковое место, подключаемое по Fibre Channel (вы возможно слышали о тормозах из-за latency при работе по iscsi?)
- Полное управление возможностями без дополнительных лицензий (опять же, возможно, слышали о Flashcache?)
- Полный контроль над ошибками и сбоями (а знали ли что mdadm умеет сам проверять состояние рейда и присылать письма в электронку если какой-то диск поломался?)
- Возможность подкрутить параметры и получить быстрый ребилд и лишние проценты производительности (Write-intent bitmap или stripe_cache_size?)
- Компьютер с PCIe 4,8 или 16х, желательно более 4ГБ ОЗУ и процессор новее, чем 2007 года выпуска (все же Gentoo будет компилировать свои кусочки).
- Карточка FC фирмы QLogic: 2400/2500/2600/8100/8300 (якобы с другими не работает, но я запускал на 2432. Список совместимых – http://linux-iscsi.org/wiki/Fibre_Channel#Hardware_support).
- Кроме дисков в 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):
Если у вас меньше строчек в этой меню – вы что-то забыли активировать.
Наиболее вероятно, что нет строки TCM_FC и не активирован драйвер HBA QLogic – (что приводит к невозможности работы с FC и ошибкам при настройке) искать это тут (Device Drivers / SCSI device support / SCSI low-level drivers):
Собственно на этом с ядром все, собираем и перезагружаемся в него (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, но пока только изнутри системы.
видим что инициализация прошла успешно (выделил болдом самое важное место):
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
/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)
- На свитче настроены zone, это самая частая ошибка.
- Target прописан в автостарте и вообще запускается.
- Установлен пакет с firmware (sys-block/qla-fc-firmware)
- FC-адаптер на таргете виден в lspci, очень часто PCIe выпадывают из слота. (выполнить lspci | grep ibre ): 02:00.0 Fibre Channel: QLogic Corp. ISP2432-based 4Gb Fibre Channel to PCI Express HBA (rev 02).
- FC адаптер на esxi установился, некоторые требуют установки extension.
Далее можно использовать устройство в VMware, но для оптимального результата стоит отключить ускорение (конечно если у вас нет других СХД, поддерживающих эту фичу – посмотреть можно в storage, колонка «hardware acceleration») иначе ESXi будет при каждой операции его пытаться использовать и тормозить.
9 thoughts on “Создаем своими руками Fiber Channel Target”
Было бы очень интересно почитать об этом же в разрезе использования технологии
Fibre Channel over Ethernet.
Здравствуйте.
А cкорость работы Вы с таким таргетом случайно не тестировали?
Т.е. интересна скорость чтения/записи самого raid в сервере и скорость чтения/записи таргета этого же raid оver FС.
я так понимаю вас интересуют накладные расходы? их полноценно не тестировали.
однако эта инсталляция всю полосу FC забивала, когда данные лказывались на ssd кэше.
Здравствуйте, почтеннейшие. Если имели опыт создания Shared Storage (общих LUN-ов на несколько узлов в кластере) через targetcli, то подскажите, что нужно “подкрутить” в свойствах LUN-а, чтобы не было проблем с его доступностью сразу с нескольких узлов кластера.
Пока LUN, полученный из LIO-таргета захвачен одним инициатором – вроде как всё тихо-спокойно. Как только отдаём этот LUN второму, третьему и т.д. инициатору, все инициаторы начинают сходит с ума (у инициаторов поочерёдно отваливается/появляется не только этот LUN, но и другие). Как я понимаю, проблема в конкурентном доступе к LUN-у, и, как я понимаю, проблема связана с Persistent Reservation. Так вот вопрос в том, какие дополнительные шаги требуются при конфигурации LUN-а, если его планируется использовать в мульти-хостовых подключениях, например в качестве стораджа под CSV в кластере Hyper-V.
Вопрос не про сторону Hyper-V. Там всё в порядке. Подключение выполнялось к действующему двух-узловому кластеру, где другие тома CSV (с HP 3PAR/MSA) подключены и работают без вопросов. После этого была попытка подключить LUN уже к кластеру oVirt из трёх узлов CentOS 7, и там с этим LUN-ом наблюдалась точно такая же картина. Очевидно, что не хватает каких-то настроек на стороне таргета, которые позволяли бы использовать LUN в качестве Shared Storage
Боюсь что вопрос именно про сторону клиента.
Если вы конечно не подняли lio на чемто древнем типа 7го центоса.
Судя по документации все должно работать у вас.
Ps: VMware судя по документации эти механизмы не использует, переходите на неё)))