Построение и настройка сетевого хранилища на базе iSCSI
iSCSI протокол базируется на TCP/IP и разработан для установки взаимодействия и управления системами хранения данных, серверами и клиентами.
В терминах iSCSI, сервер предоставляющий ресурсы хранилища называется target
, а клиент подключённый к серверу и использующий эти ресурсы initiator
.
Основные термины
IQN WWID (iSCSI Qualified Name) - уникальный идентификатор устройства.
LUN - номер «части» диска, к которому идёт обращение. Ближайший аналог — раздел на жёстком диске.
Portal - несколько target’ов, которые анонсируются одним сервером.
Установка пакетов
Установим необходимые пакеты для работы iSCSI
yum install targetcli scsi-target-utils |
Запустим сервис и добавим в автозагрузку:
systemctl enable target.service |
Добавим правила на Firewall:
# firewall-cmd --permanent --zone=public --add-port=3260/tcp |
Первоначальная очистка настроек в случае наличия прошлых установок:
# targetcli clearconfig confirm=true |
Поскольку targetcli
является интерактивной оболочкой аналогичной bash
, то запускаем её командой targetcli
.
# targetcli |
Просмотрим существующие ресурсы:
/> ls |
Подключаем блочное устройство к iSCSI ресурсу:
cd /backstores/block/ |
Отключение устройства выполняется командой:
/> delete <имя> |
Создание iSCSI таргета
/> cd /iscsi |
Удаление ресурса выполняется командой:
delete <имя ресурса> |
Создание портала
/> cd /iscsi/<имя ресурса>/tpg1/portals |
Подключение устройств в качестве логических «юнитов» (LUNs):
/> cd /iscsi/<имя ресурса>/tpg1/luns |
Определение имён iSCSI-ресурсов (IQN) для узлов кластера:
Host-01
$ cat /etc/iscsi/initiatorname.iscsi |
Host-02
$ cat /etc/iscsi/initiatorname.iscsi |
Создаем список доступа (ACL) для узлов:
cd /iscsi/<имя ресурса>/tpg1/acls> |
Подключение на стороне клиента (Initiator)
Установим необходимые пакеты:
yum install iscsi-initiator-utils |
Найдем доступные iSCSI устройства:
iscsiadm -m discovery -t sendtargets -p [IP-адрес или имя хранилища] |
Отредактируем идентификатор устройства в соответствии с результатами выполнения предыдущей команды:
nano /etc/iscsi/initiatorname.iscsi |
Запустим сервис и добавим в автозагрузку:
# systemctl restart iscsid.service |
Проверяем состояние на ноде:
[ceph@node-01 ~]$ sudo iscsiadm -m discovery -P 1 |
И на сервере:
# targetcli sessions |
Для удаления связи используем команду:
iscsiadm -m node -o delete -T [идентификатор хранилища] -p [адрес или имя хранилища] |
Для закрытия сессии:
iscsiadm -m node -u -T [идентификатор хранилища] -p [адрес или имя хранилища] |
Для удаления доступных записей:
iscsiadm -m discoverydb -t sendtargets -p [адрес или имя хранилища] -o delete |
Данный пример подходит для настройки в локальной сети. Для работы с внешним миром лучше использовать CHAP авторизацию.
Конфигурация с CHAP авторизацией
Повторяем предыдущие действия. На шаге настроек списков доступа настриваем авторизацию по логину и паролю.
/iscsi/<имя ресурса>/tpg1/acls> cd <iqn.YYYY-MM-SN-1> |
Сохраняем настройки и выходим из оболочки:
/> cd / |
/> exit |
Перезагружаем сервис:
systemctl restart target.service |
Настроим клиент для работы с CHAP, для этого изменим конфигурационный файл /etc/iscsi/iscsid.conf
:
# To enable CHAP authentication set node.session.auth.authmethod |
И подлкючаемся:
iscsiadm -m node -T [идентификатор хранилища] -p [адрес или имя хранилища] -l |
Для снижения вычислительных затрат на создание и обработку SCSI-команд был создан TCP/IP offload engine (TOE). Для достижения наилучшей производительности рекомендуется использовать iSCSI-адаптеры, в которых кроме TOE аппаратно реализован и уровень iSCSI