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