Сетевое хранилише iSCSI в CentOS 7

Сетевое хранилише iSCSI в CentOS 7

Roman Bogachev VMware Specialist | Drone Pilot | Traveler

Построение и настройка сетевого хранилища на базе iSCSI

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

В терминах iSCSI, сервер предоставляющий ресурсы хранилища называется target, а клиент подключённый к серверу и использующий эти ресурсы initiator.

Основные термины

IQN WWID (iSCSI Qualified Name) - уникальный идентификатор устройства.

LUN - номер «части» диска, к которому идёт обращение. Ближайший аналог — раздел на жёстком диске.

Portal - несколько target’ов, которые анонсируются одним сервером.

Установка пакетов

Установим необходимые пакеты для работы iSCSI

1
yum install targetcli scsi-target-utils

Запустим сервис и добавим в автозагрузку:

1
2
systemctl enable target.service
systemctl start target.service

Добавим правила на Firewall:

1
# firewall-cmd --permanent --zone=public --add-port=3260/tcp

Первоначальная очистка настроек в случае наличия прошлых установок:

1
2
# targetcli clearconfig confirm=true
All configuration cleared

Поскольку targetcli является интерактивной оболочкой аналогичной bash, то запускаем её командой targetcli.

1
2
3
4
5
6
# targetcli
targetcli shell version 2.1.fb41
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.

/>

Просмотрим существующие ресурсы:

1
2
3
4
5
6
7
8
9
/> ls
o- / ......................................................................................................................... [...]
o- backstores .............................................................................................................. [...]
| o- block .................................................................................................. [Storage Objects: 0]
| o- fileio ................................................................................................. [Storage Objects: 0]
| o- pscsi .................................................................................................. [Storage Objects: 0]
| o- ramdisk ................................................................................................ [Storage Objects: 0]
o- iscsi ............................................................................................................ [Targets: 0]
o- loopback ......................................................................................................... [Targets: 0]

Подключаем блочное устройство к iSCSI ресурсу:

1
2
3
cd /backstores/block/
/backstores/block> create <имяX> /dev/<устройствоX>
Created block storage object <имяX> using /dev/<устройствоX>

Отключение устройства выполняется командой:

1
/> delete <имя>

Создание iSCSI таргета

1
2
3
4
/> cd /iscsi
/iscsi> create
Created target <имя ресурса>
Created TPG 1.

Удаление ресурса выполняется командой:

1
delete <имя ресурса>

Создание портала

1
2
3
4
5
6
/> cd /iscsi/<имя ресурса>/tpg1/portals
/iscsi/<имя ресурса>/tpg1/portals/> create
Using default IP port 3260
Binding to INADDR_ANY(0.0.0.0)
Create network portal 0.0.0.0:3260
/iscsi/<имя ресурса>/tpg1/portals/> cd /iscsi

Подключение устройств в качестве логических «юнитов» (LUNs):

1
2
3
/> cd /iscsi/<имя ресурса>/tpg1/luns
/iscsi/<имя ресурса>/tpg1/luns> create /backstores/block/<имя1>
Created LUN 0.

Определение имён iSCSI-ресурсов (IQN) для узлов кластера:

Host-01

1
2
$ cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.YYYY-MM-SN-1

Host-02

1
2
$ cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.YYYY-MM-SN-2

Создаем список доступа (ACL) для узлов:

1
2
3
4
cd /iscsi/<имя ресурса>/tpg1/acls>
/iscsi/<имя ресурса>/tpg1/acls> create <iqn.YYYY-MM-SN-1>
Created Node ACL for <iqn.YYYY-MM-SN-1>
Created mapped LUN 0.

Подключение на стороне клиента (Initiator)

Установим необходимые пакеты:

1
yum install iscsi-initiator-utils

Найдем доступные iSCSI устройства:

1
iscsiadm -m discovery -t sendtargets -p [IP-адрес или имя хранилища]

Отредактируем идентификатор устройства в соответствии с результатами выполнения предыдущей команды:

1
2
nano /etc/iscsi/initiatorname.iscsi
InitiatorName=[идентификатор хранилища]

Запустим сервис и добавим в автозагрузку:

1
2
# systemctl restart iscsid.service
# systemctl enable iscsid.service

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[ceph@node-01 ~]$ sudo iscsiadm -m discovery -P 1
SENDTARGETS:
DiscoveryAddress: 10.0.10.71,3260
Target: iqn.2003-01.org.linux-iscsi.storage.x8664:sn.f21ewa8e92de
Portal: 10.11.10.71:3260,1
Iface Name: default
iSNS:
No targets found.
STATIC:
No targets found.
FIRMWARE:
No targets found.
[ceph@node-01 ~]$ sudo iscsiadm -m node -P 1
Target: iqn.2003-01.org.linux-iscsi.storage.x8664:sn.f21ewa8e92de
Portal: 10.11.10.71:3260,1
Iface Name: default

И на сервере:

1
2
# targetcli sessions
alias: node-01 sid: 1 type: Normal session-state: LOGGED_IN

Для удаления связи используем команду:

1
iscsiadm -m node -o delete -T [идентификатор хранилища] -p [адрес или имя хранилища]

Для закрытия сессии:

1
iscsiadm -m node -u -T [идентификатор хранилища] -p [адрес или имя хранилища]

Для удаления доступных записей:

1
iscsiadm -m discoverydb -t sendtargets -p [адрес или имя хранилища] -o delete

Данный пример подходит для настройки в локальной сети. Для работы с внешним миром лучше использовать CHAP авторизацию.

Конфигурация с CHAP авторизацией

Повторяем предыдущие действия. На шаге настроек списков доступа настриваем авторизацию по логину и паролю.

1
2
3
4
5
/iscsi/<имя ресурса>/tpg1/acls> cd <iqn.YYYY-MM-SN-1>
/iscsi/<iqn.YYYY...N-1> set auth userid=user
Parameter userid is now 'user'.
/iscsi/<iqn.YYYY...N-1> set auth password=password
Parameter password is now 'password'.

Сохраняем настройки и выходим из оболочки:

1
2
3
4
/> cd /
/> saveconfig
Last 10 configs saved in /etc/target/backup.
Configuration saved to /etc/target/saveconfig.json
1
2
3
4
/> exit
Global pref auto_save_on_exit=true
Last 10 configs saved in /etc/target/backup.
Configuration saved to /etc/target/saveconfig.json

Перезагружаем сервис:

1
systemctl restart target.service

Настроим клиент для работы с CHAP, для этого изменим конфигурационный файл /etc/iscsi/iscsid.conf:

1
2
3
4
5
6
7
8
# To enable CHAP authentication set node.session.auth.authmethod
# to CHAP. The default is None.
node.session.auth.authmethod = CHAP

# To set a CHAP username and password for initiator
# authentication by the target(s), uncomment the following lines:
node.session.auth.username = user
node.session.auth.password = password

И подлкючаемся:

1
iscsiadm -m node -T [идентификатор хранилища] -p [адрес или имя хранилища] -l

Для снижения вычислительных затрат на создание и обработку SCSI-команд был создан TCP/IP offload engine (TOE). Для достижения наилучшей производительности рекомендуется использовать iSCSI-адаптеры, в которых кроме TOE аппаратно реализован и уровень iSCSI