Как известно, при использовании существующей сетевой инфраструктуры 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 комментариев:
у iscsi сервера может быть несколько клиентов ?
Конечно. На то оно и SAN...
т.е. между серверов на котором крутится приложение и iscsitarget должен быть промежуточный сервер например расшаривающий тот же диск по gnbd ?
на сколько возрастают при это задержки ?
А вот если бы вы написали гайд по использованию IDE/SATA DVD-RW в качестве таргета, было бы просто замечательно. Или Linux реазлизации iSCSI так не умеют?
А можно ли с сервера просмотреть раздел который экспортируется клиентам: удалить, создать, переписать файлы?
между целью и инициатором промежуточные сервера не нужны - просто маршрутизация
IDE/SATA DVD-RW в качестве цели?
если для целей резервирования данных, то для этого в Unix/Linux есть специальное ПО как Open source так и коммерческое
с сервера работать с разделами тоже можно.
Натолкнулся на такой косяк.
Массив HP MSA2012i DualController.
Подключаю к RHEL/CentOS 5 соответственно через iscsi. Инициирую, запрашиваю, подключаю через LVM, все нормально. Перезагружаем сервер, подключеный раздел теряется. В GUI LVM раздел есть, но без файловой системы и в /dev/mapper пусто. В чем может быть проблема? Может кто сталкивался?
В вашем примере Вы показали как экспортировать раздел xvda5. А можно ли то же самое сделать с loop-device (я имею в виду возможность создать ФС внутри одного файла и экспортировать потом уже его)?
кончно можно...
кстати есть файл настройки у tgtd
/etc/tgt/target.conf тут имеено с с файлом пример внутри
backing-store /usr/storage/disk.img ну если раздел то /dev/sda1
соотвественно tgtd старнтует с уже нормално созданными и подключенными дисками что удобно
Настроил таргет под FC11, есть две виндовые машины с Microsoft iSCSI Initiator.
Проблема: не получается использовать таргет для обмена контетном между компами. т.е. С одной машины заливаю файл на таргет, другая не увидит его пока не сделаешь реконнект Microsoft iSCSI Initiator.
где копать?
Нужно использовать кластерную файловую систему. Если вы используете NTFS то так и должно быть. Вы не можете просто подключить том к 2-м машинам и работать одновременно с одной и той-же ФС с двух узлов.
А можно про "кластерную файловую систему" поподробней.
И как оптимально реализовать доступ к одному файловому серверу для 300 сотрудников. Первоначальная идея была такая-же как у Владимира выше...
2 Steven13. В вашем случае не нужен доступ на уровне блоков, а нужен на уровне файловой системы. SMB/CIFS или NFS решит ваши задачи. Думаю вам нужно начать с основ, и почитать что такое SAN и NAS и в чем различие, а также чем отличается кластерная файловая система от сетевой. В Google вы найдете кучу ссылок и информации, в том числе и на русском языке.
кстати, у меня тоже после tgtd restart пропали все созданные луны, но их пересоздание данные не потеряло. Выставление 777 на /etc/tgt/* ничего не дало. Только руками прописывание всех дисков в конфиг.
Отправить комментарий