Iscsi

Материал из pNp Wiki
Перейти к: навигация, поиск

Конфигурирование iscsi

Предварительные требования

  • Две виртуальная машины с сетевыми интерфейсами
  • На виртуальную машину vm-01 необходимо подключить второй неразмеченный диск примерно на 5Gb.
  • Установленные пакеты: bash-completion

Общая информация и терминология

iSCSI - протокол передачи SCSI команд поверх TCP/IP, для управления устройствами хранения данных.

Терминология iSCSI во многом основывается на терминологии, использующейся в SCSI:

  • initiator — тот, кто устанавливает соединение с целью(target). Чаще всего это узел (в общем случае) осуществляет ввод/вывод на блочные устройства.
  • target — экспортируемый объект. В зависимости от контекста цель(target) называют или целиком экспортирующий узел, или только экспортируемый объект. Сам объект может делиться на lun’ы.
  • Портал — группа целей(targets), которые анонсируются вместе. Чаще всего один узел хранения — один портал.
  • IQN — полное имя участника взаимодействия. На практике существует iqn у инициатора и у цели(target).
  • endpoint — уточнённое имя ресурса, чаще всего включает в себя iqn, номер LUN’а и указание на конкретный метод доступа к нему (например, номер соединения, LUN и IP-адрес, с которого следует получать доступ к устройству).
  • LUN (Logical Unit Number) — номер объекта внутри цели(target). Ближайшим аналогом является раздел диска или отдельный том.
  • ACL (Access Control List) — список доступа, основанный на iqn инициатора, позволяющий предоствить доступ к конкретной цели.


По iscsi можно подключить как отдельный неразмеченный диск, так и том LVM или даже файл, который будет выполнять роль хранилища информации. Поэтому алгоритм действий следующий:

  • Создаем хранилище
  • Присваеваем iqn хранилищу и создаем группу порталов
  • Конфигурируем acl для группы порталов
  • Создаем lun'ы, через которые будем предоставлять доступ к хранилищу
  • Создаем сетевой интерфейс, через который инициатор(ы) будут получать доступ к хранилищу

Настройка target'а

Установим пакет targetcli и запустим сервис:

[root@vm-01 ~]# yum install -y targetcli 
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Package targetcli-2.1.fb41-3.el7.noarch already installed and latest version
Nothing to do
[root@vm-01 ~]# systemctl enable target.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/target.service to /usr/lib/systemd/system/target.service.
[root@vm-01 ~]# systemctl start target.service 
[root@vm-01 ~]#

Проверяем наличие диска в системе:

[root@vm-01 ~]# lsblk 
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0            11:0    1  3.5G  0 rom  
vda           252:0    0   20G  0 disk 
├─vda1        252:1    0  512M  0 part /boot
└─vda2        252:2    0 19.5G  0 part 
  └─rhel-root 253:0    0 19.5G  0 lvm  /
vdb           252:16   0    5G  0 disk 
[root@vm-01 ~]#

targetcli - это оболочка с иерархической системой, в каждом иерархическом элементе которой существует собственный набор команд (по смыслу похожа на оболочку Mikrotik). Однако, можно вводить команды не в интерактивном режиме. Итак, нашим хранилищем будет устройство /dev/vdb, которое следует создать:

[root@vm-01 ~]# targetcli --help
Usage: /usr/bin/targetcli [--version|--help|CMD]
  --version		Print version
  --help		Print this information
  CMD			Run targetcli shell command and exit
  <nothing>		Enter configuration shell
See man page for more information.
# targetcli 'backstores/block/ create vm-01-disk /dev/vdb'
Created block storage object vm-01-disk using /dev/vdb.
[root@vm-01 ~]#

Присваеваем iqn хранилищу и создаем группу порталов:

[root@vm-01 ~]# targetcli 'iscsi/ create iqn.2017-11.com.example:target1'
Created target iqn.2017-11.com.example:target1.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
[root@vm-01 ~]#

Создаем acl. Указываем имя клиента (initiator) которому можно подключаться к нашему серверу (target):

[root@vm-01 ~]# targetcli 'iscsi/iqn.2017-11.com.example:target1/tpg1/acls create iqn.2017-11.com.example:client1'
Created Node ACL for iqn.2017-11.com.example:client1
[root@vm-01 ~]#

Создаем lun. acl ему присваивается автоматически:

[root@vm-01 ~]# targetcli 'iscsi/iqn.2017-11.com.example:target1/tpg1/luns create storage_object=/backstores/block/vm-01-disk'
Created LUN 0.
Created LUN 0->0 mapping in node ACL iqn.2017-11.com.example:client1
[root@vm-01 ~]#

Удалим прослушиваение всех адресов iSCSI сервисом, и разрешим принимать соединение только на определенном интерфейсе:

[root@vm-01 ~]# targetcli 'iscsi/iqn.2017-11.com.example:target1/tpg1/portals delete ip_address=0.0.0.0 ip_port=3260'
Deleted network portal 0.0.0.0:3260
[root@vm-01 ~]# targetcli 'iscsi/iqn.2017-11.com.example:target1/tpg1/portals create ip_address=192.168.122.158 ip_port=3260'
Using default IP port 3260
Created network portal 192.168.122.158:3260.
[root@vm-01 ~]

Откроем соедниения по протоколу tcp для порта 3260:

[root@vm-01 ~]# firewall-cmd --add-port=3260/tcp --permanent
success
[root@vm-01 ~]# firewall-cmd --reload
success
[root@vm-01 ~]#

Настройка initiator'а

Устанавливаем пакет iscsi-initiator-utils:

[root@vm-02 ~]# yum install -y iscsi-initiator-utils.x86_64

Приводим файл /etc/iscsi/initiatorname.iscsi к следующему виду:

[root@vm-02 ~]# cat /etc/iscsi/initiatorname.iscsi 
InitiatorName=iqn.2017-11.com.example:client1
[root@vm-02 ~]#

Теперь поищем, есть ли доступные подключения к нашему таргету на виртуальной машине vm-01:

[root@vm-02 ~]# iscsiadm -m discovery --type sendtargets --portal 192.168.122.158 --discover
192.168.122.158:3260,1 iqn.2017-11.com.example:target1
[root@vm-02 ~]#

Подключаемся к таргету:

[root@vm-02 ~]# iscsiadm --mode node --targetname iqn.2017-11.com.example:target1 --portal 192.168.122.158:3260 --login
Logging in to [iface: default, target: iqn.2017-11.com.example:target1, portal: 192.168.122.158,3260] (multiple)
Login to [iface: default, target: iqn.2017-11.com.example:target1, portal: 192.168.122.158,3260] successful.
[root@vm-02 ~]#

Посмотрим информацию о соединении:

[root@vm-02 ~]# iscsiadm --mode session -P 3
iSCSI Transport Class version 2.0-870
version 6.2.0.873-21
Target: iqn.2017-11.com.example:target1 (non-flash)
	Current Portal: 192.168.122.158:3260,1
	Persistent Portal: 192.168.122.158:3260,1
		**********
		Interface:
		**********
		Iface Name: default
		Iface Transport: tcp
		Iface Initiatorname: iqn.2017-11.com.example:client1
		Iface IPaddress: 192.168.122.179
		Iface HWaddress: <empty>
		Iface Netdev: <empty>
		SID: 1
		iSCSI Connection State: LOGGED IN
		iSCSI Session State: LOGGED_IN
		Internal iscsid Session State: NO CHANGE
		*********
		Timeouts:
		*********
		Recovery Timeout: 120
		Target Reset Timeout: 30
		LUN Reset Timeout: 30
		Abort Timeout: 15
		*****
		CHAP:
		*****
		username: <empty>
		password: ********
		username_in: <empty>
		password_in: ********
		************************
		Negotiated iSCSI params:
		************************
		HeaderDigest: None
		DataDigest: None
		MaxRecvDataSegmentLength: 262144
		MaxXmitDataSegmentLength: 262144
		FirstBurstLength: 65536
		MaxBurstLength: 262144
		ImmediateData: Yes
		InitialR2T: Yes
		MaxOutstandingR2T: 1
		************************
		Attached SCSI devices:
		************************
		Host Number: 8	State: running
		scsi8 Channel 00 Id 0 Lun: 0
			Attached scsi disk sda		State: running
[root@vm-02 ~]#

Проверим блочные устройства, доступные на нашей виртуальной машине:

[root@vm-02 ~]# lsblk --scsi -m
NAME HCTL       TYPE VENDOR   MODEL             REV TRAN   NAME  SIZE OWNER GROUP MODE
sda  8:0:0:0    disk LIO-ORG  vm-01-disk       4.0  iscsi  sda     5G root  disk  brw-rw----
sr0  2:0:0:0    rom  QEMU     QEMU DVD-ROM     2.5+ sata   sr0   3.5G root  cdrom brw-rw----
[root@vm-02 ~]#

Далее отформатируем устройство и прописываем монтирование в /etc/fstab

[root@vm-02 ~]# mkfs.xfs /dev/sda 
meta-data=/dev/sda               isize=256    agcount=8, agsize=163840 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0
data     =                       bsize=4096   blocks=1310720, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@vm-02 ~]# lsblk --scsi -o NAME,HCTL,TYPE,VENDOR,MODEL,REV,TRAN,SIZE,OWNER,GROUP,MODE,UUID
NAME HCTL       TYPE VENDOR   MODEL             REV TRAN    SIZE OWNER GROUP MODE       UUID
sda  8:0:0:0    disk LIO-ORG  vm-01-disk       4.0  iscsi     5G root  disk  brw-rw---- 2740f870-02c3-42e6-a808-0b6227e92ca5
sr0  2:0:0:0    rom  QEMU     QEMU DVD-ROM     2.5+ sata    3.5G root  cdrom brw-rw---- 2014-05-07-03-58-46-00
[root@vm-02 ~]# cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Wed Nov 22 11:45:46 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/rhel-root				/                       xfs     defaults        1 1
UUID=cc10fe05-aa22-42d6-a18e-39d1eb5ad338	/boot                   xfs     defaults        1 2
UUID=2740f870-02c3-42e6-a808-0b6227e92ca5	/media			xfs	_netdev        0 2
[root@vm-02 ~]#

Проверим, правильно ли мы заполнили /etc/fstab

[root@vm-02 ~]# mount -a
[root@vm-02 ~]# findmnt -A -t xfs
TARGET   SOURCE                FSTYPE OPTIONS
/        /dev/mapper/rhel-root xfs    rw,relatime,seclabel,attr2,inode64,noquota
├─/boot  /dev/vda1             xfs    rw,relatime,seclabel,attr2,inode64,noquota
└─/media /dev/sda              xfs    rw,relatime,seclabel,attr2,inode64,noquota
[root@vm-02 ~]#

Ссылки

Управление онлайн хранилищами