09 ноября 2008

Настройка iSCSI target и initiator в RHEL/Fedora

Как известно, при использовании существующей сетевой инфраструктуры iSCSI представляет собой недорогую альтернативу FC, а для целей обучения и тестирования вообще не заменим, поскольку, в ряде случаев, можно обойтись без дорогостоящего оборудования. Безусловно, существует и множество "боевых" конфигураций, когда по тем или иным причинам стоит отдать предпочтение iSCSI. В этом посте я хочу кратко описать настройку iSCSI target и iSCSI initiator в Red Hat Enterprise Linux и Fedora. Нужно отметить, что до версии RHEL 5.2 поддержка iSCSI target присутствовала в статусе Technology Preview. Поддержка же iSCSI initiator присутствует в полном объеме еще с Red Hat Enterprise Linux 4.

Для тестов используем две машины: vm01, которая будет экспортировать раздел /dev/xvda5, и vm02, на которой настроим инициатор.

1) Настройка iSCSI target

Для начала устанавливаем пакет scsi-target-utils и запускаем демон tgtd:
[root@vm01 ~]# yum install scsi-target-utils
...
[root@vm01 ~]# service tgtd start
[root@vm01 ~]# chkconfig tgtd on

Теперь создаем наше целевое устройство. В качестве имени я выбрал iqn.2003-12.net.markelov:disk1

[root@vm01 ~]# tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2003-12.net.markelov:disk1

В моем случае я добавляю к целевому устройству свежесозданный раздел /dev/xvda5:

[root@vm01 ~]# tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/xvda5

Теперь разрешим доступ хосту vm02 с IP-адресом 192.168.0.109:

[root@vm01 ~]# tgtadm --lld iscsi --op bind --mode target --tid 1 -I 192.168.0.109

Проверяем:

[root@vm01 ~]# tgtadm --lld iscsi --op show --mode target
Target 1: iqn.2003-12.net.markelov:disk1
System information:
Driver: iscsi
Status: running
I_T nexus information:
LUN information:
LUN: 0
Type: controller
SCSI ID: deadbeaf1:0
SCSI SN: beaf10
Size: 0
Backing store: No backing store
LUN: 1
Type: disk
SCSI ID: deadbeaf1:1
SCSI SN: beaf11
Size: 964M
Backing store: /dev/xvda5
Account information:
ACL information:
192.168.0.109
[root@vm01 ~]#

Под конец не забудьте прорубить "дырку" в брандмауэре для порта 3260/tcp, который используется по умолчанию.

2) Настройка iSCSI initiator

Устанавливаем пакет iscsi-initiator-utils и запускаем демон iscsi:
[root@vm02 ~]# yum install iscsi-initiator-utils
...
[root@vm02 ~]# service iscsi start
iscsid is stopped
Turning off network shutdown. Starting iSCSI daemon: [ OK ]
[ OK ]
Setting up iSCSI targets: iscsiadm: No records found!
[ OK ]
[root@vm02 ~]# chkconfig iscsi on

При запуске мы получаем совершенно справедливое сообщение, что не сконфигурирована ни одна из целей. Запускаем процесс обзора для поиска целей на хосте vm01 c IP-адресом 192.168.0.100:

[root@vm02 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.0.100:3260
192.168.0.100:3260,1 iqn.2003-12.net.markelov:disk1

В итоге будут созданны две поддиректории с информацией о цели и хосте:

[root@vm02 ~]# ls /var/lib/iscsi/nodes/
iqn.2003-12.net.markelov:disk1
[root@vm02 ~]# ls /var/lib/iscsi/send_targets/
192.168.0.100,3260

Просмотреть информацию можно командой:

[root@vm02 ~]# iscsiadm -m node -T iqn.2003-12.net.markelov:disk1 -p 192.168.0.100:3260
node.name = iqn.2003-12.net.markelov:disk1
node.tpgt = 1
...

Теперь, используя содержимое /var/lib/iscsi/nodes/ и /var/lib/iscsi/send_targets/, демон iscsi при каждом перезапуске будет подключать наши ранее обнаруженные цели. Также процессом подключения/отключения можно управлять при помощи утилиты iscsiadm:

[root@vm02 ~]# iscsiadm -m node -T iqn.2003-12.net.markelov:disk1 -p 192.168.0.100:3260 -l
Login session [iface: default, target: iqn.2003-12.net.markelov:disk1, portal: 192.168.0.100,3260]
[root@vm02 ~]#

Теперь команда fdisk покажет наш раздел /dev/sda, экспортированный с vm01:

[root@vm02 ~]# fdisk -l

Disk /dev/xvda: 17.1 GB, 17179869184 bytes
255 heads, 63 sectors/track, 2088 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
...
Disk /dev/sda: 1011 MB, 1011677184 bytes
32 heads, 61 sectors/track, 1012 cylinders
Units = cylinders of 1952 * 512 = 999424 bytes

Disk /dev/sda doesn't contain a valid partition table

После команды

[root@vm02 ~]# iscsiadm -m node -T iqn.2003-12.net.markelov:disk1 -p 192.168.0.100:3260 -u
Logout session [sid: 2, target: iqn.2003-12.net.markelov:disk1, portal: 192.168.0.100,3260]

в выводе fdisk мы увидим только /dev/xvda. Однако, после рестарта демона iscsi, цель снова появиться в списке устройств. Для удаления всей информации о цели воспользуйтесь командой:

[root@vm02 ~]# iscsiadm -m node -T iqn.2003-12.net.markelov:disk1 -p 192.168.0.100:3260 -o delete
[root@vm02 ~]# ls /var/lib/iscsi/nodes/
[root@vm02 ~]#

Если у вас несколько целей, то вы не можете заранее знать, под каким именем после следующей перезагрузки/рестарта сервиса будет доступна конкретная цель. Для того, чтобы каждая цель всегда была доступна под одним и тем же именем устройства, вы можете написать соответствующее правило udev или воспользоваться монтированием по метке и UUID файловой системы ext3. При монтировании файловых систем не забывайте использовать опцию _netdev.

Для того, чтобы лучше понять лог выполненных команд, рекомендую ознакомиться со следующими источниками:
  • /usr/share/doc/scsi-target-utils-*
  • tgtadm(8)
  • iscsiadm(8)

14 комментариев:

Dyoma комментирует...

у iscsi сервера может быть несколько клиентов ?

Andrey Markelov комментирует...

Конечно. На то оно и SAN...

Dyoma комментирует...

т.е. между серверов на котором крутится приложение и iscsitarget должен быть промежуточный сервер например расшаривающий тот же диск по gnbd ?
на сколько возрастают при это задержки ?

Uni комментирует...

А вот если бы вы написали гайд по использованию IDE/SATA DVD-RW в качестве таргета, было бы просто замечательно. Или Linux реазлизации iSCSI так не умеют?

Анонимный комментирует...

А можно ли с сервера просмотреть раздел который экспортируется клиентам: удалить, создать, переписать файлы?

Andrey Markelov комментирует...

между целью и инициатором промежуточные сервера не нужны - просто маршрутизация

IDE/SATA DVD-RW в качестве цели?
если для целей резервирования данных, то для этого в Unix/Linux есть специальное ПО как Open source так и коммерческое

с сервера работать с разделами тоже можно.

eugeen комментирует...

Натолкнулся на такой косяк.
Массив HP MSA2012i DualController.
Подключаю к RHEL/CentOS 5 соответственно через iscsi. Инициирую, запрашиваю, подключаю через LVM, все нормально. Перезагружаем сервер, подключеный раздел теряется. В GUI LVM раздел есть, но без файловой системы и в /dev/mapper пусто. В чем может быть проблема? Может кто сталкивался?

Артемий комментирует...

В вашем примере Вы показали как экспортировать раздел xvda5. А можно ли то же самое сделать с loop-device (я имею в виду возможность создать ФС внутри одного файла и экспортировать потом уже его)?

Twoboots комментирует...

кончно можно...
кстати есть файл настройки у tgtd
/etc/tgt/target.conf тут имеено с с файлом пример внутри
backing-store /usr/storage/disk.img ну если раздел то /dev/sda1
соотвественно tgtd старнтует с уже нормално созданными и подключенными дисками что удобно

Владимир комментирует...

Настроил таргет под FC11, есть две виндовые машины с Microsoft iSCSI Initiator.
Проблема: не получается использовать таргет для обмена контетном между компами. т.е. С одной машины заливаю файл на таргет, другая не увидит его пока не сделаешь реконнект Microsoft iSCSI Initiator.
где копать?

Andrey Markelov комментирует...

Нужно использовать кластерную файловую систему. Если вы используете NTFS то так и должно быть. Вы не можете просто подключить том к 2-м машинам и работать одновременно с одной и той-же ФС с двух узлов.

Steven13 комментирует...

А можно про "кластерную файловую систему" поподробней.

И как оптимально реализовать доступ к одному файловому серверу для 300 сотрудников. Первоначальная идея была такая-же как у Владимира выше...

Andrey Markelov комментирует...

2 Steven13. В вашем случае не нужен доступ на уровне блоков, а нужен на уровне файловой системы. SMB/CIFS или NFS решит ваши задачи. Думаю вам нужно начать с основ, и почитать что такое SAN и NAS и в чем различие, а также чем отличается кластерная файловая система от сетевой. В Google вы найдете кучу ссылок и информации, в том числе и на русском языке.

playnet комментирует...

кстати, у меня тоже после tgtd restart пропали все созданные луны, но их пересоздание данные не потеряло. Выставление 777 на /etc/tgt/* ничего не дало. Только руками прописывание всех дисков в конфиг.