Установка и настройка iSCSI Target & Initiator на Centos/RHEL 5/6

iSCSI — это способ соединения устройств хранения данных через сеть с использованием протокола TCP/IP. Он может быть использован в локальной сети (LAN), глобальной сети (WAN) или Интернете. Устройства iSCSI — это дисковые накопители, накопители на магнитных лентах, компакт-дисках и другие устройства хранения, расположенные на сетевом компьютере (storage), к которому можно подключиться. Иногда эти устройства хранения составляют часть сети, называемой сетью хранения (SAN). В отношении между компьютером и устройством хранения компьютер называется инициатором (initiator — iSCSI-клиент), поскольку он инициирует подключение к устройству, которое называется целевым устройством (target — iSCSI-сервер). Процесс, в ходе которого инициатору становятся известны доступные ему таргеты называедся – discovery. Далее под катом все необходимые инструкции и описания.

Вступление

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

Обычно, связка (iSCSI Initiator )клиент-сервер(iSCSI Target) происходит с помощью обычного сетевого кабеля (витой пары RJ-45) или в более идеальном варианте через оптику (Optical fiber cable)

6a00e552e53bd28833010536ee264c970b

Мы отдельно рассмотрим настройку iSCSI Target и отдельно iSCSI Initiator и пожалуй давайте начнем с настройки iSCSI Target и как я уже сказал раньше, этот шаг необходим вам только в том случае, если у вас нет специализированного стораджа, типа Dell MD3000I или чего покруче, а имеется просто компьютер с рейдом и парочкой теробайтов на борту.

Скорость работы такой связки:
Единичная сессия iSCSI:

450MB/s Чтение и 450 MB/s запись для 64KB блоков
510 MB/s Чтение и 550 MB/s запись для 256KB блоков
65,000 IOPS – 1K, 58,000 IOPS – 2K, 50,000 IOPS с 4KB Чтением

Две сессии iSCSI:
550 MB/s Чтение и 810 MB/s запись для 256KB блоков
75,000 IOPS для 1K блока

Настройка iSCSI Target

Для примера структура будет такова:
[10.0.0.30] – iSCSI Target
[10.0.0.31] – iSCSI Initiator

Создаем саму партицию:

pvcreate /dev/sdb1 
Physical volume "/dev/sdb1" successfully created
pvcreate /dev/sdb1 
Physical volume "/dev/sdb1" successfully created

Теперь создаем группу волюмов:
1) Первый том с именем lv_target00:

vgcreate -s 32M vg_target00 /dev/sdb1 
Volume group "vg_target00" successfully created
vgcreate -s 32M vg_target00 /dev/sdb1 
Volume group "vg_target00" successfully created

2) Второй том с именем: lv_target01:

lvcreate -L 100G -n lv_target00 vg_target00 
Logical volume "lv_target00" created
lvcreate -L 100G -n lv_target00 vg_target00 
Logical volume "lv_target00" created

Теперь когда готов непосредственно сам диск, ставим пакет:

yum -y install scsi-target-utils
yum -y install scsi-target-utils

И редактируем конфиг:

vi /etc/tgt/targets.conf 
 
# if you set some devices, add - and set the same way with follows
# как формируется правило : [ iqn.yaer-month.domain:any name ]
 
    # provided devicce as a iSCSI target
    backing-store /dev/vg_target00/lv_target00
    # iSCSI Initiator's IP address you allow to connect
    initiator-address 10.0.0.31
    # ( укажите ваши логины и пароль "username", "password" )
    incominguser user123 1234567890
vi /etc/tgt/targets.conf 

# if you set some devices, add - and set the same way with follows
# как формируется правило : [ iqn.yaer-month.domain:any name ]

    # provided devicce as a iSCSI target
    backing-store /dev/vg_target00/lv_target00
    # iSCSI Initiator's IP address you allow to connect
    initiator-address 10.0.0.31
    # ( укажите ваши логины и пароль "username", "password" )
    incominguser user123 1234567890

Далее рестартуем демон и добавляем в автозагрузку:

/etc/rc.d/init.d/tgtd restart 
chkconfig --levels 235 on
/etc/rc.d/init.d/tgtd restart 
chkconfig --levels 235 on

Теперь проверяем статус:

iscsiadm -m node -o show
Target 1: iqn.2013-10.linuxspace.server:target0
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB
            Online: Yes
            Removable media: No
            Backing store type: rdwr
            Backing store path: None
    Account information:
        username
    ACL information:
        10.0.0.31
iscsiadm -m node -o show
Target 1: iqn.2013-10.linuxspace.server:target0
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB
            Online: Yes
            Removable media: No
            Backing store type: rdwr
            Backing store path: None
    Account information:
        username
    ACL information:
        10.0.0.31

Еше проверить состояние таргета можно так:

tgt-admin --show
tgt-admin --show

Настройки файрволла такие (порт для работы iSCSI 3260):

iptables -I INPUT -p tcp -m tcp --dport 3260 -j ACCEPT
service iptables save
service iptables restart
iptables -I INPUT -p tcp -m tcp --dport 3260 -j ACCEPT
service iptables save
service iptables restart

Настраиваемый iSCSI Initiator

Тут все проще, особенно в том случае, если в роли стораджа у вас не домашний компьютер а настоящий сторадж.

yum -y install iscsi-initiator-utils
yum -y install iscsi-initiator-utils

Если делали аутентификацию. Опять таки в случае если кабель соединяет сторадж и сервер напрямую, в аутентификации нет смысла, так как в вашей условной сети всего два объекта:

vi /etc/iscsi/iscsid.conf
 
# строка 49: расскоментируйте 
node.session.auth.authmethod = CHAP
 
# строка 53,54: расскоментируйте и подставте свои логин и пароль iSCSI Target
node.session.auth.username = username
node.session.auth.password = password
vi /etc/iscsi/iscsid.conf

# строка 49: расскоментируйте 
node.session.auth.authmethod = CHAP

# строка 53,54: расскоментируйте и подставте свои логин и пароль iSCSI Target
node.session.auth.username = username
node.session.auth.password = password

Делаем дисковери:

iscsiadm -m discovery -t sendtargets -p 10.0.0.30
iscsiadm -m discovery -t sendtargets -p 10.0.0.30

Или так:

iscsiadm --mode discovery -t sendtargets --portal 10.0.0.30
iscsiadm --mode discovery -t sendtargets --portal 10.0.0.30

Листинг команды:

Starting iscsid: Loading iSCSI transport class v2.0-870.
iscsi: registered transport (tcp)
iscsi: registered transport (iser)
cxgb3i: tag itt 0x1fff, 13 bits, age 0xf, 4 bits.
iscsi: registered transport (cxgb3i)
cnic: Broadcom NetXtreme II CNIC Driver cnic v2.1.2 (May 26, 2010)
Broadcom NetXtreme II iSCSI Driver bnx2i v2.1.1 (Mar 24, 2010)
iscsi: registered transport (bnx2i)
iscsi: registered transport (be2iscsi)
[ OK ]
10.0.0.30:3260,1 iqn.2013-10.linuxspace.server:target0
Starting iscsid: Loading iSCSI transport class v2.0-870.
iscsi: registered transport (tcp)
iscsi: registered transport (iser)
cxgb3i: tag itt 0x1fff, 13 bits, age 0xf, 4 bits.
iscsi: registered transport (cxgb3i)
cnic: Broadcom NetXtreme II CNIC Driver cnic v2.1.2 (May 26, 2010)
Broadcom NetXtreme II iSCSI Driver bnx2i v2.1.1 (Mar 24, 2010)
iscsi: registered transport (bnx2i)
iscsi: registered transport (be2iscsi)
[ OK ]
10.0.0.30:3260,1 iqn.2013-10.linuxspace.server:target0

И под шумок добавляем сервис в автозагрузку:

chkconfig --levels 235 iscsid on
chkconfig --levels 235 iscsi on
chkconfig --levels 235 iscsid on
chkconfig --levels 235 iscsi on

Статус нодов после дисковери можно посмотреть так:

iscsiadm -m node -o show
iscsiadm -m node -o show

# BEGIN RECORD 2.0-872
node.name = iqn.2013-10.linuxspace.server:target0
node.tpgt = 1
node.startup = automatic
iface.hwaddress =
iface.ipaddress =
iface.iscsi_ifacename = default
iface.net_ifacename =
iface.transport_name = tcp
iface.initiatorname =
node.discovery_address = 10.0.0.30
node.discovery_port = 3260
node.discovery_type = send_targets
node.session.initial_cmdsn = 0
node.session.initial_login_retry_max = 8
node.session.xmit_thread_priority = -20
node.session.cmds_max = 128
node.session.queue_depth = 32
node.session.auth.authmethod = CHAP
node.session.auth.username = username
node.session.auth.password = ********
node.session.auth.username_in =
node.session.auth.password_in =
node.session.timeo.replacement_timeout = 120
node.session.err_timeo.abort_timeout = 15
node.session.err_timeo.lu_reset_timeout = 30
node.session.err_timeo.tgt_reset_timeout = 30
node.session.err_timeo.host_reset_timeout = 60
node.session.iscsi.FastAbort = Yes
node.session.iscsi.InitialR2T = No
node.session.iscsi.ImmediateData = Yes
node.session.iscsi.FirstBurstLength = 262144
node.session.iscsi.MaxBurstLength = 16776192
node.session.iscsi.DefaultTime2Retain = 0
node.session.iscsi.DefaultTime2Wait = 2
node.session.iscsi.MaxConnections = 1
node.session.iscsi.MaxOutstandingR2T = 1
node.session.iscsi.ERL = 0
node.conn[0].address = 10.0.0.30
node.conn[0].port = 3260
node.conn[0].startup = manual
node.conn[0].tcp.window_size = 524288
node.conn[0].tcp.type_of_service = 0
node.conn[0].timeo.logout_timeout = 15
node.conn[0].timeo.login_timeout = 15
node.conn[0].timeo.auth_timeout = 45
node.conn[0].timeo.noop_out_interval = 5
node.conn[0].timeo.noop_out_timeout = 5
node.conn[0].iscsi.MaxXmitDataSegmentLength = 0
node.conn[0].iscsi.MaxRecvDataSegmentLength = 262144
node.conn[0].iscsi.HeaderDigest = None
node.conn[0].iscsi.IFMarker = No
node.conn[0].iscsi.OFMarker = No
# END RECORD

Делаем логин в таргет:

iscsiadm -m node --login
iscsiadm -m node --login

Или делаем логин по имени таргета:

iscsiadm --mode node --targetname iqn.2013-10.linuxspace.server:target0 --portal 10.0.0.30 --login
iscsiadm --mode node --targetname iqn.2013-10.linuxspace.server:target0 --portal 10.0.0.30 --login

У обоих команды вывод будет такой:

Logging in to [iface: default, target: iqn.2013-10.linuxspace.server:target0, portal: 10.0.0.30,3260]
scsi2 : iSCSI Initiator over TCP/IP
scsi 2:0:0:0: RAID IET Controller 0001 PQ: 0 ANSI: 5
scsi 2:0:0:1: Direct-Access IET VIRTUAL-DISK 0001 PQ: 0 ANSI: 5
Login to [iface: default, target: iqn.2013-10.linuxspace.server:target0, portal: 10.0.0.30,3260] successful.
Logging in to [iface: default, target: iqn.2013-10.linuxspace.server:target0, portal: 10.0.0.30,3260]
scsi2 : iSCSI Initiator over TCP/IP
scsi 2:0:0:0: RAID IET Controller 0001 PQ: 0 ANSI: 5
scsi 2:0:0:1: Direct-Access IET VIRTUAL-DISK 0001 PQ: 0 ANSI: 5
Login to [iface: default, target: iqn.2013-10.linuxspace.server:target0, portal: 10.0.0.30,3260] successful.

Подтверждаем сессию:

iscsiadm -m session -o show 
tcp: [1] 10.0.0.30:3260,1 iqn.2013-10.linuxspace.server:target0
iscsiadm -m session -o show 
tcp: [1] 10.0.0.30:3260,1 iqn.2013-10.linuxspace.server:target0

Теперь можно посмотреть не появился ли наш таргет в виде партиции:

cat /proc/partitions 
major minor #blocks name
8031457280sda
81512000sda1
8230944256sda2
253020971520dm-0
25316160384dm-1
25323809280dm-2
80104857600sdb
81104857600sdb1   # добавленный сторадж
cat /proc/partitions 
major minor #blocks name
8031457280sda
81512000sda1
8230944256sda2
253020971520dm-0
25316160384dm-1
25323809280dm-2
80104857600sdb
81104857600sdb1   # добавленный сторадж

Далее стоит отформатировать партицию:

fdisk -l 
Disk /dev/sdb: 800 GB, 17171480576 bytes
64 heads, 32 sectors/track, 16376 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
 
fdisk /dev/sdb
mkfs.ext4 /dev/sdb1
fdisk -l 
Disk /dev/sdb: 800 GB, 17171480576 bytes
64 heads, 32 sectors/track, 16376 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

fdisk /dev/sdb
mkfs.ext4 /dev/sdb1

Когда все готово, добавляем теперь маунт в фстаб:
Смотрим UUID диска:

blkid /dev/sdb1
/dev/sdb1: UUID="71e86162-011d-49f1-9b4a-9f95a277e6b5" TYPE="ext4"
blkid /dev/sdb1
/dev/sdb1: UUID="71e86162-011d-49f1-9b4a-9f95a277e6b5" TYPE="ext4"

Добавляем в фстаб через UUID диска:

vim /etc/fstab
UUID=71e86162-011d-49f1-9b4a-9f95a277e6b5 /mnt/data ext4 _netdev,rw 0 0
vim /etc/fstab
UUID=71e86162-011d-49f1-9b4a-9f95a277e6b5 /mnt/data ext4 _netdev,rw 0 0

Смотрим статус: (должен быть 345)

chkconfig --list netfs
netfs 0:off 1:off 2:off 3:on 4:on 5:on 6:off
chkconfig --list netfs
netfs 0:off 1:off 2:off 3:on 4:on 5:on 6:off

Как удалить или отключить iSCSI target

Отключить можно так:

iscsiadm --m node -T iqn.2013-10.linuxspace.server:target0 --portal 10.0.0.30:3260 -u
iscsiadm --m node -T iqn.2013-10.linuxspace.server:target0 --portal 10.0.0.30:3260 -u

Удалить рекорд ID можно так:

iscsiadm -m node -o delete -T iqn.2013-10.linuxspace.server:target0 --portal 10.0.0.30:3260
iscsiadm -m node -o delete -T iqn.2013-10.linuxspace.server:target0 --portal 10.0.0.30:3260

Выйти из всех сессий можно так:

iscsiadm -m node -U all
iscsiadm -m node -U all

Выключить сервис iSCSI:

service iscsi stop
/etc/init.d/iscsi stop
service iscsi stop
/etc/init.d/iscsi stop

База данных iSCSI с таргетами и нодами тут /var/lib/iscsi