iSCSI (англ. Internet Small Computer System Interface) — протокол, который базируется на TCP/IP и разработан для установления взаимодействия и управления системами хранения данных, серверами и клиентами. В своей работе использует среду Ethernet (1Gb/s, 10Gb/s) для передачи данных
То есть по сути: мы имеем хранилище в сети и хотим быстро обмениваться с ним данными. Для этого можно FTP/HTTP, но этот протокол новее и лучше.
Неплохой обзор для Linux описан здесь , а здесь аналог под FreeBSD
Тестовый стенд: Solaris 10/11.
Примечание.
Установка ISCSI осуществляется ТОЛЬКО В ГЛОБАЛЬНОЙ ЗОНЕ. Если попробовать в неглобальной зоне, то получим такое сообщение:
pkgadd: ERROR: The package <SUNWiscsir> may only be installed by the global zone administrator
Отдельно расскажу об установке на версии 10 и 11, так как установка и настройка отличаются.
Solaris 10
1) Установка пакетов.
Для нормального функционирования нам потребуются такие пакеты: SUNWiscsir, SUNWiscsitgtr, SUNWiscsitgtr, SUNWiscsiu.
После установки добавится 2 службы, одна из который будет не запущена:
# svcs -a | grep -i iscsi
disabled 7:02:49 svc:/network/iscsi_initiator:default
online 19:21:01 svc:/system/iscsitgt:default
2) Создание файловой системы
Создадим файловую систему для нового iscsi-диска
#zfs create rpool/test_iscsi
#zfs set shareiscsi=on rpool/test_iscsi
#zfs set mountpoint=/test_iscsi rpool/test_iscsi
3) Создания ресурсов.
Теперь создадим iscsi-диск
#iscsitadm modify admin -d /test_iscsi/
#iscsitadm create target --size 2g test-iscsi
и запустим службу:
# svcadm enable svc:/network/iscsi_initiator:default
# svcs -a | grep iscsi
online 14:25:11 svc:/network/iscsi/initiator:default
online 14:28:25 svc:/system/iscsitgt:default
посмотрим список iscsi-ресурсов на текущем сервере:
# iscsitadm list target -v test-iscsi
Target: test-iscsi
iSCSI Name: iqn.1986-03.com.sun:02:e237557f-657d-e0ce-d674-f4e74f5f078b.test-iscsi
Connections: 1
Initiator:
iSCSI Name: iqn.1986-03.com.sun:01:2a85def5ffff.4eb429b5
Alias: skel-solaris
ACL list:
TPGT list:
LUN information:
LUN: 0
GUID: 600144f04ecb956800000c2905c9a700
VID: SUN
PID: SOLARIS
Type: disk
Size: 2.0G
Status: unknown
Теперь посмотрим на клиенте, список ресурсов на сервере 10.10.10.10 с клиента
# iscsiadm add isns-server 10.10.10.10:3205
# iscsiadm modify discovery --static enable
# iscsiadm list discovery-address -v
Discovery Address: 10.10.10.10:3260
Target name: iqn.1986-03.com.sun:02:e237557f-657d-e0ce-d674-f4e74f5f078b.test-iscsi
Target address: 10.10.10.10:3260, 1
Target name: iqn.1986-03.com.sun:02:e237557f-657d-e0ce-d674-f4e74f5f078b.test-iscsi
Target address: 10.10.10.10:3260, 1
Solaris 11
1) Установка пакетов.
В 11 версии теперь iscsi является частью пакета storage-server (который в себя включает Samb’y, X11, ruby и другие) и отдельно поставить нельзя.
#pkg install storage-server SUNWiscsit
2) Создание файловой системы
Создаём файловую систему:
#zfs create -V 2g rpool/iscsi
Запустим сервис:
# svcs -a | grep stmf
disabled 18:55:03 svc:/system/stmf:default
# svcadm enable stmf
# svcs -a | grep stmf
online 18:56:30 svc:/system/stmf:default
Создаём LUN
# stmfadm create-lu /dev/zvol/rdsk/rpool/iscsi Logical unit created: 600144F0515DC30000004EDE49830001
# stmfadm list-lu LU Name: 600144F0515DC30000004EDE49830001
# stmfadm add-view 600144F0C49A050000004CC84BE20001
# stmfadm list-view -l 600144F0C49A050000004CC84BE20001 View Entry: 0 Host group : All Target group : All LUN : 0
# sbdadm list-lu Found 1 LU(s) GUID DATA SIZE SOURCE -------------------------------- ------------------- ---------------- 600144f0515dc30000004ede49830001 2147483648 /dev/zvol/rdsk/rpool/iscsi
# stmfadm list-lu -v LU Name: 600144F0515DC30000004EDE49830001 Operational Status: Online Provider Name : sbd Alias : /dev/zvol/rdsk/rpool/iscsi View Entry Count : 0 Data File : /dev/zvol/rdsk/rpool/iscsi Meta File : not set Size : 2147483648 Block Size : 512 Management URL : not set Vendor ID : SUN Product ID : COMSTAR Serial Num : not set Write Protect : Disabled Writeback Cache : Enabled Access State : Active LU Name: 600144F0C49A050000004CC84BE20001 Operational Status: unregistered Provider Name : unregistered Alias : - View Entry Count : 1
Запустим службу и создадим iscsi-target
#svcadm enable -r svc:/network/iscsi/target:default
#itadm create-target
Target iqn.1986-03.com.sun:02:f5de6642-3611-ed59-c3d1-811b39cf571d successfully created
# itadm list-target TARGET NAME STATE SESSIONS iqn.1986-03.com.sun:02:f5de6642-3611-ed59-c3d1-811b39cf571d online 0
Но лучше поставить защиту, что бы к target’y нельзя было подключиться кому-угодно:
# itadm create-target -l alias_name -a chap
# itadm create-initiator -s -u username iqn.1986-03.com.sun:01:e00000000000.83647254
где iqn.1986-03.com.sun:01:e00000000000.83647254 – iqn нашего initiatora. При это будет запрошен пароль.
Примечание.
(Спасибо одному из наших постоянных читателей)
Если ваша материнская плата поддерживает VT-d (IOMMU IO виртуализация), то нужно его выключить и переходить сразу ко 2-му этапу (это баг, который oracle не спешит исправлять). Если же не поддерживается — тогда обязательно следует выполнить 1-ый этап, а за ним 2-ой.
Что бы перевести порт в режим, например, target’a делаем это в 2 этапа:
– первый этап
# update_drv -a -i '/pci@0,0/pci1002,5a1f@b/pci1077,138@0,1/fp@0,0' qlt
devfsadm: driver failed to attach: qlt
Warning: Driver (qlt) successfully added to system but failed to attach.
где путь берётся из вывода команды (luxadm -e port) и/pci@0,0/pci1002,5a1f@b/pci1077,138@0,1/fp@0,0 – путь относительно каталога /devices.
Ошибка значит лишь то, что в данный момент оно не может выгрузить драйвер – он будет выгружен при ребуте.
После изменения выполним
# init 6
– второй этап
# update_drv -d -i 'pciex1077,2432' qlc
Cannot unload module: qlc
Will be unloaded upon reboot.
# update_drv -a -i 'pciex1077,2432' qlt
devfsadm: driver failed to attach: qlt
Warning: Driver (qlt) successfully added to system but failed to attach
и ребут
# init 6
Вот теперь они правильно переведутся в режим Target’a. проверяем:
# fcinfo hba-port HBA Port WWN: 21000024ff2f301c Port Mode: Target Port ID: 10600 OS Device Name: Not Applicable Manufacturer: QLogic Corp. Model: QLE2462 Firmware Version: 5.2.1 FCode/BIOS Version: N/A Serial Number: not available Driver Name: COMSTAR QLT Driver Version: 20100505-1.05 Type: F-port State: online Supported Speeds: 1Gb 2Gb 4Gb Current Speed: 4Gb Node WWN: 20000024ff2f301c HBA Port WWN: 21000024ff2f301d Port Mode: Target Port ID: 0 OS Device Name: Not Applicable Manufacturer: QLogic Corp. Model: QLE2462 Firmware Version: 5.2.1 FCode/BIOS Version: N/A Serial Number: not available Driver Name: COMSTAR QLT Driver Version: 20100505-1.05 Type: unknown State: offline Supported Speeds: 1Gb 2Gb 4Gb Current Speed: not established Node WWN: 20000024ff2f301d
3) Подключение target’ов на initiator’e.
# iscsiadm add static-config iqn.1986-03.com.sun:02:f5de6642-3611-ed59-c3d1-811b39cf571d,1.2.3.4
где UID-берём из target’a, ip – соответственно IP-target’a.
Смотрим, что получилось:
# iscsiadm list static-config
Static Configuration Target: iqn.1986-03.com.sun:02:f5de6642-3611-ed59-c3d1-811b39cf571d,1.2.3.4:3260
Если вы у вас подключено несколько iSCSI и подключаете ещё новые, то разобраться, где какой просто так не получится. Что бы решить эту проблему, посмотрите в /var/adm/messages и увидите такие строки:
Sep 23 13:31:40 sr600 iscsi: [ID 559844 kern.info] NOTICE: iscsi session(49) iqn.1986-03.com.sun:02:a476023a-d971-ea8a-9c0a-95282fc52ddc online
Sep 23 13:31:40 sr600 scsi: [ID 583861 kern.info] sd43 at scsi_vhci0: unit-address g600144f054bc4800000052403c400001: f_tpgs
Sep 23 13:31:40 sr600 genunix: [ID 936769 kern.info] sd43 is /scsi_vhci/disk@g600144f054bc4800000052403c400001
Sep 23 13:31:40 sr600 genunix: [ID 408114 kern.info] /scsi_vhci/disk@g600144f054bc4800000052403c400001 (sd43) online
Sep 23 13:31:40 sr600 genunix: [ID 483743 kern.info] /scsi_vhci/disk@g600144f054bc4800000052403c400001 (sd43) multipath status: degraded: path 10 iscsi0/disk@0000iqn.1986-03.com.sun:02:a476023a-d971-ea8a-9c0a-95282fc52ddc0001,0 is online
Sep 23 13:32:36 sr600 iscsi: [ID 559844 kern.info] NOTICE: iscsi session(54) iqn.1986-03.com.sun:02:1965e5d0-d6c5-c58c-f4e4-837afee50606 online
Sep 23 13:32:36 sr600 scsi: [ID 583861 kern.info] sd44 at scsi_vhci0: unit-address g600144f0d825cd00000052403d520001: f_tpgs
Sep 23 13:32:36 sr600 genunix: [ID 936769 kern.info] sd44 is /scsi_vhci/disk@g600144f0d825cd00000052403d520001
Sep 23 13:32:36 sr600 genunix: [ID 408114 kern.info] /scsi_vhci/disk@g600144f0d825cd00000052403d520001 (sd44) online
Sep 23 13:32:36 sr600 genunix: [ID 483743 kern.info] /scsi_vhci/disk@g600144f0d825cd00000052403d520001 (sd44) multipath status: degraded: path 11 iscsi0/disk@0000iqn.1986-03.com.sun:02:1965e5d0-d6c5-c58c-f4e4-837afee506060001,0 is online
Теперь можно понять, кто есть кто: наши target’ы увидятся как 600144f054bc4800000052403c4, 600144f0d825cd00000052403d52 через команду format или iostat -En
Вот пример, когда работает подключение через iSCSI(запускаем команду на target’e):
# stmfadm list-target -v Target: iqn.1986-03.com.sun:02:314701c8-2d45-4530-c0c5-c96bf790241d Operational Status: Online Provider Name : iscsit Alias : - Protocol : iSCSI Sessions : 1 Initiator: iqn.1986-03.com.sun:01:e00000000000.4eefe7ae Alias: - Logged in since: Mon Oct 14 21:01:38 2013 Target: wwn.21000024FF2EB9F9 Operational Status: Online Provider Name : qlt Alias : qlt1,0 Protocol : Fibre Channel Sessions : 0 Target: wwn.21000024FF2EB9F8 Operational Status: Online Provider Name : qlt Alias : qlt0,0 Protocol : Fibre Channel Sessions : 0
Multipathing
Пару слов хочется сказать о multipathing: это механизм, который предоставляет системе несколько путей до устройства с применением технологии отказоустойчивости и балансировки . Устройством может быть как хранилище, так и сетевое устройство (например, удалённый сервер).
При настройке разного рода FC/iSCSI очень желательно настроить и multipathing.
Очень неплохой tutorial по multipathing описан здесь