Centos 7 iscsi initiator настройка

Обновлено: 06.07.2024

По прочтении данной главы вы научитесь настраивать сервер, являющийся целевым сервером iSCSI (iSCSI target), и клиент, являющийся инициатором iSCSI (iSCSI initiator).

12.1. Терминология iSCSI

iSCSI является протоколом, который позволяет передавать команды SCSI посредством протокола IP. Это означает, что вы можете использовать локальные файлы устройств SCSI (такие, как /dev/sdb) в условиях отсутствия представленных ими дисковых накопителей в локальном компьютере.

Компьютер, в котором установлены физические устройства для хранения данных, называется целевым сервером iSCSI (iSCSI Target). Каждое отдельное адресуемое устройство iSCSI на целевом сервере получает индивидуальный номер LUN .

Компьютер-клиент iSCSI, который взаимодействует с целевым сервером называется инициатором (iSCSI Initiator). Инициатор отправляет команды SCSI по протоколу IP вместо непосредственного взаимодействия с аппаратным устройством. Инициатор должен соединяться с целевым сервером посредством сети.

12.2. Целевой сервер iSCSI в дистрибутиве RHEL/CentOS

В данном разделе описана методика настройки целевого сервера iSCSI в дистрибутивах RHEL6, RHEL7 и CentOS.

Настройку следует начинать с установки пакета с программными компонентами, выполняющими функции целевого сервера iSCSI .

В данном примере в файле /etc/tgt/targets.conf указаны пути к файлам устройств, представляющим три локальных диска, которым должны быть присвоены номера LUN.

Стандартным локальным портом целевого сервера iSCSI должен являться порт номер 3260, причем при необходимости вы можете удостовериться в этом с помощью утилиты netstat .

Теперь при использовании команды tgt-admin -s вы можете получить подробную информацию об устройствах с тремя номерам LUN (а также о контроллере с номером LUN 0).

12.3. Инициатор iSCSI в дистрибутиве RHEL/CentOS

В данном разделе описана методика настройки инициатора iSCSI в дистрибутивах RHEL6, RHEL7 и CentOS.

Настройку следует начинать с установки пакета с программными компонентами, выполняющими функции инициатора iSCSI.

После этого необходимо запросить у целевого сервера iSCSI список идентификаторов всех целевых серверов.

Мы получили информацию о целевом сервере с идентификатором iqn.2014-04.be.linux-training:centos65.target1 .

Используем этот идентификатор iqn для указания имени пользователя и пароля (paul и hunter2 соответственно), которые были ранее установлены нами на целевом сервере.

В дистрибутивах RHEL и CentOS эта информация хранится в файлах из директории /var/lib/iscsi/nodes/ .

После перезапуска службы iscsi в нашей системе появятся три новых устройства.

Вы можете получить информацию о состоянии службы iscsi, воспользовавшись следующей командой:

12.4. Целевой сервер iSCSI в дистрибутиве Debian

Процесс подготовки программного обеспечения для целевого сервера в дистрибутивах Ubuntu и Debian заключается в установке пакета программного обеспечения iscsitarget в обоих дистрибутивах, а также в установке дополнительного пакета программного обеспечения iscsitarget-dkms для сборки модулей ядра ОС исключительно в дистрибутиве Debian.

При работе с дистрибутивом Debian 6 вам также придется выполнить команду aptitude install iscsitarget-dkms для установки программных компонентов, предназначенных для сборки модулей ядра ОС. В случае дистрибутива Debian 5 аналогичная команда будет выглядеть следующим образом: aptitude install iscsitarget-modules-`uname -a` . В дистрибутиве Ubuntu все необходимые модули ядра ОС включены в состав основного пакета программного обеспечения.

Целевой сервер iSCSI по умолчанию деактивирован, поэтому нам придется активировать его.

12.5. Использование технологии iSCSI для доступа к файлам, созданным с помощью утилиты dd

Вы можете использовать тома LVM (/dev/md0/lvol0), физические разделы дисков (/dev/sda), устройства RAID (/dev/md0), а также обычные файлы в качестве источников данных. В данном примере мы будем использовать файлы, созданные с помощью утилиты dd .

Ниже показана методика создания трех файлов небольших размеров (100 МБ, 200 МБ и 300 МБ).

Мы должны объявить эти три файла источниками данных для целевого сервера iSCSI в файле /etc/iet/ietd.conf (в некоторых случаях расположенном по пути /etc/ietd.conf ).

Нам также необходимо добавить информацию о наших устройствах в файл /etc/initiators.allow .

Самое время запустить настроенный сервер:

Для проверки корректности активации устройств для хранения данных можно прочитать содержимое файлов из директории /proc/net/iet :

12.6. Инициатор iSCSI в дистрибутиве Ubuntu

В первую очередь мы должны установить клиентское программное обеспечение iSCSI (разумеется, не на том компьютере, который будет выполнять роль целевого сервера).

После этого мы изменим настройки клиентского программного обеспечения iSCSI для его автоматического запуска.

Или же, вы можете осуществить запуск этого клиентского программного обеспечения в ручном режиме.

Теперь мы можем соединиться с целевым сервером и использовать утилиту iscsiadm для получения информации об устройствах, к которым он предоставляет доступ.

Эта же утилита iscsiadm может использоваться и для редактирования файлов из директории /etc/iscsi/nodes/ .

Описанные выше действия следует повторить и для двух других устройств.

После этого необходимо перезапустить системную службу инициатора для соединения с целевым сервером.

Используйте команду fdisk -i для получения информации о трех новых устройствах iSCSI.

После этого на стороне целевого сервера может быть получена информация об активных сессиях.

12.7. Использование устройств iSCSI

Между устройствами SCSI и iSCSI не существует принципиальных различий после их корректного соединения с системой: поверхность дисковых устройств должна разделяться на разделы, в этих разделах должны создаваться файловые системы, после чего созданные файловые системы должны монтироваться.

12.8. Практическое задание: устройства iSCSI

1. Настройте целевые серверы (используя устройства LVM и SCSI в качестве источников данных) и инициатор, который будет соединяться с обоими серверами.

12.9. Корректная процедура выполнения практического задания: устройства iSCSI

1. Настройте целевые серверы (используя устройства LVM и SCSI в качестве источников данных) и инициатор, который будет соединяться с обоими серверами.

Данная методика применима в случае работы с дистрибутивами Debian/Ubuntu/Mint. Для ознакомления с нюансами, которые могут возникнуть в случае работы с дистрибутивами RHEL/CentOS, следует обратиться к разделам с теоретической информацией.

Договоритесь (с сидящим рядом студентом) о том, какой из компьютеров будет выполнять функции целевого сервера, а какой - инициатора.

Действия, которые должны быть выполнены на компьютере, выполняющем роль целевого сервера:

В первую очередь с помощью стандартных инструментов вашего дистрибутива для установки программного обеспечения следует установить пакет программного обеспечения iscsitarget. После этого вы должны использовать знания, полученные в ходе чтения предыдущей главы, для настройки логического тома (/dev/vg/lvol0), а также главы, посвященной технологии RAID, для настройки устройства RAID, которое будет представлено файлом устройства /dev/md0. Далее вы должны выполнить следующую команду для модификации файла конфигурации:

Добавьте информацию о ваших устройствах в файл конфигурации /etc/iet/ietf.conf:

Добавьте идентификаторы обоих устройств в файл конфигурации /etc/iet/initiators.allow:

Действия, которые должны быть выполнены на компьютере, выполняющим роль инициатора:

Установите пакет программного обеспечения open-iscsi и запустите соответствующий демон.

Отредактируйте файлы из директории /etc/iscsi/nodes/ таким образом, как было описано в разделах теоретической части главы. После этого перезапустите демон iSCSI и выполните команду fdisk -i для получения информации об используемых устройствах iSCSI.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Host-01

Host-02

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Для установки и настройки будем использовать targetcli. Targetcli – это оболочка для управления Linux-IO Target (LIO™). LIO™ – это реализация SCSI таргета с открытым исходным кодом. LIO™ была включена в ядро Linux в версии 2.6.38.

Теория

Backstores – это раздел, в котором отображаются объекты-хранилища. Backstores не видимая снаружи часть iSCSI таргета.

Block –жесткий диск, символические ссылки на диск или LVM.

Fileio – файл.

PSCSI (SCSI pass-through) – любое устройство для хранения информации, поддерживающее SCSI команды напрямую, то есть без эмуляции SCSI. Этот бэкстор не нужно использовать, так как может привести к повреждениям железа.

Ramdisk – RAM-диск.

iSCSI – это fabric module, видимая снаружи часть iSCSI таргета. Он содержит список таргетов, лунов, права доступа и т.п. Список всего этого добра появится после настройки.

Loopback – ещё один fabric module, который дает доступ к таргету локально.

Установка

Добавляем в автостарт и запускаем

systemctl enable targetsystemctl start target

Теперь перейдем в сам targetcli и выйдем, основными командами внутри будут cd, ls, help. Утилита АВТОМАТИЧЕСКИ сохраняет конфиг и бекап

Подготовка дисков

Смотрим нужный нам диск, это /dev/sdb

Создание блочных bacstore

Создаем bacstore, пример команды backstores/block create reco_01 /dev/vlg-asm/lv_reco1

Создание ISCSI target

для создания таргета по умолчанию можно выплнить /iscsi create, если мы хотим явно задать имя, а мы хотим то формат следующий

Так же надо не забыть ОТКРЫТЬ доступ на firewall для подключения по порту tcp 3260

Внутри iscsi можно видеть структуру. Первый элемент – имя таргета. Ниже по иерархии tpg1 расшифровывается как Target Portal Group – список IP-адресов и TCP портов, которые будет слушать этот таргет. Дальше идут acl – список адресов, с которых можно будет подключиться к таргету, luns – список лунов, portals – список IP-адресов и портов, которые будет слушать таргет.

iscsi001

Далее мы должны настроить ACL, кому разрешаем подключаться к нашему target, выяснить это можно, прочитав на КЛИЕНТЕ

Теперь пора его подключать luns/ create /backstores/block/test01

так же создаем портал portals/ create 0.0.0.0

и подключил его, вывод команды ls

Хорошим тоном будет сохранить конфиг явно, хоть он и сохраняется по умолчанию

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

yum -y install iscsi-initiator-utils

Добавляем в автозагрузку и стартуем

systemctl enable iscsi
systemctl enable iscsid
systemctl start iscsi
systemctl start iscsid

Смотрим наш адрес, который надо будет потом добавить на сервере

Abstract: как работает open-iscsi (ISCSI initiator в linux), как его настраивать и чуть-чуть про сам протокол ISCSI.

Лирика: В интернете есть множество статей довольно хорошо объясняющих, как настроить ISCSI target, однако, почему-то, практически нет статей про работу с инициатором. Не смотря на то, что target технически сложнее, административной возни с initiator больше — тут больше запутанных концепций и не очень очевидные принципы работы.

Перед тем, как рассказать про ISCSI — несколько слов о разных типах удалённого доступа к информации в современных сетях.

NAS vs SAN

Существует два метода доступа к данным, находящимся на другом компьютере: файловый (когда у удалённого компьютера запрашивают файл, а какими файловыми системами это сделано — никого не волнует), характерные представители NFS, CIFS (SMB); и блочный — когда у удалённого компьютера запрашивают блоки с дискового носителя (аналогично тому, как их читают с жёсткого диска). В этом случае запрашивающая сторона сама себе делает на блочном устройстве файловую систему, а сервер, отдающий блочное устройство, знать не знает про файловые системы на нём. Первый метод называют NAS (network attached storage), а второй — SAN (storage area network). Названия вообще указывают на другие признаки (SAN подразумевает выделенную сеть до хранилищ), но так сложилось, что NAS — это файлы, а SAN — это блочные устройства по сети. И хотя все (?) понимают, что это неправильные названия, чем дальше, тем больше они закрепляются.

scsi over tcp

Одним из протоколов доступа к блочным устройствам является iscsi. Буква 'i' в названии относится не к продукции эппл, а к Internet Explorer. По своей сути это 'scsi over tcp'. Сам протокол SCSI (без буквы 'i') — это весьма сложная конструкция, поскольку он может работать через разные физические среды (например, UWSCSI — параллельная шина, SAS — последовательная — но протокол у них один и тот же). Этот протокол позволяет делать куда больше, чем просто «подтыкать диски к компьютеру» (как это придумано в SATA), например, он поддерживает имена устройств, наличие нескольких линков между блочным устройством и потребителем, поддержку коммутации (ага, SAS-коммутатор, такие даже есть в природе), подключение нескольких потребителей к одному блочному устройству и т.д. Другими словами, этот протокол просто просился в качестве основы для сетевого блочного устройства.

Терминология

В мире SCSI приняты следующие термины:
target — тот, кто предоставляет блочное устройство. Ближайший аналог из обычного компьютерного мира — сервер.
initiator — клиент, тот, кто пользуется блочным устройством. Аналог клиента.
WWID — уникальный идентификатор устройства, его имя. Аналог DNS-имени.
LUN — номер «кусочка» диска, к которому идёт обращение. Ближайший аналог — раздел на жёстком диске.

ISCSI приносит следующие изменения: WWID исчезает, на его место приходит понятие IQN (iSCSI Qualified Name) — то есть чистой воды имя, сходное до степени смешения с DNS (с небольшими отличиями). Вот пример IQN: iqn.2011-09.test:name.

IETD и open-iscsi (сервер и клиент под линукс) приносят ещё одну очень важную концепцию, о которой чаще всего не пишут в руководствах по iscsi — portal. Portal — это, если грубо говорить, несколько target'ов, которые анонсируются одним сервером. Аналогии с www нет, но если бы веб-сервер можно было попросить перечислить все свои virtualhosts, то это было бы оно. portal указывает список target'ов и доступные IP, по которым можно обращаться (да-да, iscsi поддерживает несколько маршрутов от initiator к target).

Статья не про target, так что даю очень краткое описание того, что делает target. Он берёт блочное устройство, пришлёпывает к нему имя и LUN и публикет его у себя на портале, после чего позволяет всем желающим (авторизация по вкусу) обращаться к нему.

Вот пример простенького файла конфигурации, думаю, из него будет понятно что делает target (файл конфигурации на примере IET):

(сложный от простого отличается только опциями экспорта). Таким образом, если у нас есть target, то мы хотим его подключить. И тут начинается сложное, потому что у initiator'а своя логика, он совсем не похож на тривиальное mount для nfs.

В качестве инициатора используется open-iscsi. Итак, самое важное — у него есть режимы работы и состояние. Если мы дадим команду не в том режиме или не учтём состояние, результат будет крайне обескураживающий.

  • Поиск target'ов (discovery)
  • Подключение к target'у
  • Работа с подключенным target'ом

Немного о состоянии. После discovery open-iscsi запоминает все найденные target'ы (они хранятся в /etc/iscsi/), другими словами, discovery — операция постоянная, совсем НЕ соответствующая, например, dns resolving). Найденные target можно удалить руками (кстати, частая ошибка — когда у open-iscsi, в результате экспериментов и настройки, пачка найденных target'ов, при попытке логина в которые выползает множество ошибок из-за того, что половина target'ов — старые строчки конфига, которые уже давно не существуют на сервере, но помнятся open-iscsi). Более того, open-iscsi позволяет менять настройки запомненного target'а — и эта «память» влияет на дальнейшую работу с target'ами даже после перезагрузки/перезапуска демона.

Второй вопрос, который многих мучает по-началу — куда оно попадает после подключения? open-iscsi создаёт хоть и сетевое, но БЛОЧНОЕ устройство класса SCSI (не зря же оно «я сказя»), то есть получает букву в семействе /dev/sd, например, /dev/sdc. Используется первая свободная буква, т.к. для всей остальной системы это блочное устройство — типичный жёсткий диск, ничем не отличающийся от подключенного через usb-sata или просто напрямую к sata.

В отличие от SAS/UWSCSI, ISCSI доступно для подключения кому попало. Для защиты от таких, есть логин и пароль (chap), и их передача iscsiadm'у — ещё одна головная боль для начинающих пользователей. Она может осуществляться двумя путями — изменением свойств уже найденного ранее target'а и прописываем логина/пароля в файле конфигурации open-iscsi.
Причина подобных сложностей — в том, что пароль и процесс логина — это атрибуты не пользователя, а системы. ISCSI — это дешёвая версия FC-инфраструктуры, и понятие «пользователь» в контексте человека за клавиатурой тут неприменимо. Если у вас sql-база лежит на блочном устройстве iscsi, то разумеется, вам будет хотеться, чтобы sql-сервер запускался сам, а не после минутки персонального внимания оператора.

Это очень важный файл, потому что помимо логина/пароля он описывает ещё поведение open-iscsi при нахождении ошибок. Он может отдавать ошибку «назад» не сразу, а с некоторой паузой (например, минут в пять, чего достаточно для перезагрузки сервера с данными). Так же там контролируется процесс логина (сколько раз пробовать, сколько ждать между попытками) и всякий тонкий тюнинг самого процесса работы. Заметим, эти параметры довольно важны для работы и вам нужно обязательно понимать, как поведёт ваш iscsi если вынуть сетевой шнурок на 10-20с, например.

Я не очень люблю цитировать легконаходимые маны и строчки, так что приведу типовой сценарий употребения iscsi:

сначала мы находим нужные нам target, для этого мы должны знать IP/dns-имя инициатора: iscsiadm -m discovery -t st -p 192.168.0.1 -t st — это команда send targets.

iscsiadm -m node (список найденного для логина)
iscsiadm -m node -l -T iqn.2011-09.example:data (залогиниться, то есть подключиться и создать блочное устройство).
iscsiadm -m session (вывести список того, к чему подключились)
iscsiadm -m session -P3 (вывести его же, но подробнее — в самом конце вывода будет указание на то, какое блочное устройство какому target'у принадлежит).
iscsiadm - m session -u -T iqn.2011-09.example:data (вылогиниться из конкретной )
iscsiadm -m node -l (залогиниться во все обнаруженные target'ы)
iscsiadm -m node -u (вылогиниться из всех target'ов)
iscsiadm -m node --op delete -T iqn.2011-09.example:data (удалить target из обнаруженных).

Ещё один вопрос, важный в серьёзных решениях — поддержка нескольких маршрутов к источнику. Прелесть iscsi — в использовании обычного ip, который может быть обычным образом обработан, как и любой другой трафик (хотя на практике обычно его не маршрутизируют, а только коммутируют — слишком уж великая там нагрузка). Так вот, iscsi поддерживает multipath в режиме «не сопротивляться». Сам по себе open-iscsi не умеет подключаться к нескольким IP одного target'а. Если его подключить к нескольким IP одного target'а, то это приведёт к появлению нескольких блочных устройств.

Читайте также: