...

Что за программа iscsi

Бездисковая загрузка по технологии iSCSI

Начну из далека. Как часто вы встречаете организации использующие «Подключение к удаленному рабочему столу» как основной способ работы в офисе? Я стал встречать такие все чаще и мое личное мнение — это удобно! Удобно для сотрудников, удобно для системных администраторов, а самой компании это позволяет сократить IT расходы. А нередко это даже необходимость для комфортной многопользовательской работы в некоторых программах (пример — ПО 1С).

А как часто вы видите что в качестве клиентов используются обычные себе полноценные ПК, иногда даже вполне производительные и для локальной работы.

Разговор будет о замечательной технологии iSCSI, и как мы её можем использовать чтобы уменьшить совокупную стоимость владения, и поможет тем кто хочет познакомиться с технологией поближе.

Вики гласит:
iSCSI (англ. Internet Small Computer System Interface) — протокол, который базируется на TCP/IP и разработан для установления взаимодействия и управления системами хранения данных, серверами и клиентами.

Для понимания происходящего определимся с терминологией:

iSCSI Target: (Цель iSCSI) — программа или аппаратный контроллер (HBA), осуществляющие эмуляцию диска и выполняющие запросы iSCSI. подробнее

iSCSI Initiator: (Инициатор iSCSI) — Клиентская программа или аппаратный контроллер, который взаимодействует с iSCSI Target.

IQN: (iSCSI Qualified Name) — Уникальный идентификатор (имя) iSCSI Target’a или iSCSI Initiator’а.

LUN: (Logical Unit Number) — Адрес блочного устройства в диапазоне 0-127. подробнее

Инициатор iSCSI

Прелесть в том, что Windows 7, Windows Server 2008 и всё что старше умеют устанавливаться напрямую на iSCSI target. Проблема только в том, как инициализировать удаленное блочное устройство при включении ПК.
Все современные сетевые карты умеют работать по технологии PXE, а вот с iSCSI дружат только дорогущие серверные сетевые карты например intel

Однако есть как минимум два знакомых мне open source проекта gPXE и iPXE, последний, к слову, форк первого, с немного доработанной системой вывода ошибок и несколькими дополнительными опциями.

Лично я использую gPXE, я его нашел первым, к тому-же у них на сайте есть очень удобный генератор rom-o-matic

Есть много способов как загрузиться через gPXE. Для рабочего варианта я вшивал её ROM вместо PXE загрузчика в BIOS метеринки. Рисковый вариант, можно остаться без материнки, забегая вперед это позволит уменьшить время загрузки на ~ 10 сек.

Расскажу лучше о простом и безопасном для оборудования способе под названием PXE chainloading подробно (англ.) . Суть такова — с помощью PXE загрузчика загружаем gPXE, который в свою очередь выступает iSCSI инициатором и передает управление диску. Для этого нам нужен TFTP сервер (я не стал прибегать к стороннему софту, сделал как тут) и правильная настройка DHCP сервера.
Вот так выглядит DHCP параметры у меня:

Обратите внимание на параметр «175 gPXE_Options», инкапсулированное значение «08 01 01 ff» означает опцию keep_san = 1, которая заставляет gPXE не удалять регистрацию диска в случае неудачной загрузки с него (это необходимо для установки операционной системы).

В параметре «017 Корневой путь» самый просто синтаксис будет iscsi:.

Настройки iSCSI инициатора на этом закончены.

Цель iSCSI

Настройки цели крайне простые и интуитивные.

Создаём новое или импортируем существующий VHD диск:

Далее создаём цель:

Добавляем созданный или импортированный ране диск:

На этом настройка цели почти закончена. Осталось только добавить IQN(или любой другой тип индификатора: MAC, IP) инициатора(ов) который имеет доступ к этой цели.

Если после этого при загрузке клиентского ПК в gPXE промелькнут надписи:
Registered as BIOS drive 0x80
Booting from BIOS drive 0x80
Значит у нас получилось. И можно приступать к установке ОС.

Установка ОС или Epic Fail

Уже с ностальгией вспоминаю тот момент, когда первый раз я дошел до этого этапа и… поначалу меня постигало кучу разочарований. Забегая вперед скажу, что причиной многому была неудачная материнская плата GYGABYTE GA-425TUD.

Что же я увидел когда дошел до пункта выбора диска? Верно. Ничего. Подумал, ага, надо подгрузить сетевые драйвера. Аномально долгий поиск ~ 30 — 40 минут на пустой флешке, куда были переписаны исключительно дрова для нужной сетевухи, заставлял меня думать что ОС виснет и раз 5-10 я так и не дожидался окончания поиска, выключал, перезагружал, менял опции gPXE. Так сложилось, что однажды я таки дождался пока драйвера были найдены, и радовался как ребенок обнаружив что в меню выбора появился так желанный мне диск.
Радость тут-же омрачилась тем что ОС сообщила мне о невозможности установиться на этот диск и любезно попросила меня проверить включен ли в моём BIOS контроллер этого диска.

Решение было найдено довольно быстро вот тут в самом низу. Если коротко то ребята советовали включать/выключать SATA контроллер, менять режим его работы IDE, ACHI и даже попробовать подключить реальный диск на время установки, но установку проводить на iSCSI диск. Для меня сработало подключение реального диска в режиме ACHI. Теперь установка пошла на iSCSI диск без проблем. Однако после перезагрузки ОС (один из этапов установки) я постоянно ловил BSOD на classpnp.sys.

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

Решением стало отключение LWF фильтра в ОС на сетевухе.

В этом варианте у меня заработало даже на проблемной материнке.
После этого я пробовал еще 2 или 3 материнки, установка проходила гладко изначально (нужно было лишь подгрузить сетевые драйвера).

Тесты

Интересно на сколько будет заметно что мой HDD где-то там в 100 метрах от меня? На глаз вообще не отличить! Но я даже не надеялся что вы поверите моему глазу по этому приведу результаты тестов.

Наши герои:

Seagate ST500DM002 — будет работать локально, как у людей ;D
iSCSI SSD Patriot 128 PYROSE — на сервере, будет работать через iSCSI, сетевой канал 1ГБ.
iSCSI RAID 10 4xSeagate ST500DM002 — на сервере, будет работать через iSCSI, сетевой канал 1ГБ.

(Локальный)Seagate ST500DM002


iSCSI SSD Patriot 128 PYROSE


iSCSI RAID 10 4xSeagate ST500DM002


Свод и выводы


На мой взгляд вполне заслуживающая внимания технология, как видно из тестов даже на 1ГБ сети имеет хороший КПД. При текущих ценах на HDD позволит экономить как минимум 2500р с рабочей станции и облегчает задачу резервирования данных. У меня в организации все сотрудники работают в терминале, еще вот открыли учебный класс на 8 рабочих мест, именно там в качестве теста я и внедрял эту технологию.

С радостью отвечу на вопросы.

iSCSI: как устроен протокол для организации сетевого хранилища

Рассказываем про работу с сетевым хранилищем с помощью протокола iSCSI. Разбираемся, как устроен интерфейс, какие существуют аналоги и как построить iSCSI SAN.

Эта инструкция — часть курса «Как работают сетевые протоколы».

Смотреть весь курс

Изображение записи

Рассказываем про работу с сетевым хранилищем с помощью протокола iSCSI. Разбираемся, как устроен интерфейс, какие существуют аналоги и как построить iSCSI SAN.

Что такое протокол iSCSI, интерфейс малых компьютерных систем интернета

iSCSI расшифровывается как Internet Small Computer System Interface, или интерфейс малых компьютерных систем интернета. Это транспортный протокол, обеспечивающий передачу протокола хранения данных SCSI по TCP/IP через сетевое соединение, которым обычно является Ethernet. iSCSI работает как метод организации распределенных хранилищ.

Наиболее распространенным способом использования iSCSI является TCP/IP через Ethernet. Также используется как расширение для удаленного прямого доступа к памяти (RDMA). В таком случае протокол называется iSER — iSCSI Extensions for RDMA. В его задачах — управление передачи данными непосредственно в буферы памяти компьютера SCSI, соединяющие компьютеры с устройствами хранения данных, и обратно без промежуточных копий данных и значительного вмешательства процессора.

Как устроено сетевое хранилище iSCSI

Инициатор iSCSI

Сеть хранения данных (SAN) iSCSI использует коммутацию Ethernet TCP/IP третьего уровня. Она отображает протокол SCSI для хранения данных в TCP/IP и превращает его в пакеты Ethernet. По сути, iSCSI позволяет инициатору и целевой системе договариваться и обмениваться командами SCSI, используя сети TCP/IP. Сеть хранения данных iSCSI эмулирует прямое подключение SCSI-целей через локальную сеть.

Существует три основных аппаратных компонента iSCSI SAN:

  • инициаторы или сетевые карты хранения iSCSI — специализированные сетевые интерфейсные карты для связи iSCSI,
  • стандартные сетевые коммутаторы Ethernet,
  • целевые сетевые карты хранения на внешних массивах.

Настройка цели iSCSI

Порты инициатора и цели iSCSI бывают трех видов. Первый, наиболее распространенный вариант реализации, использует программный инициатор, где вся обработка протокола осуществляется центральным процессором хоста.

Второй вариант — разделенная стековая нагрузка TCP/IP, при которой около 80% стандартной обработки пакетов TCP/IP выполняется в сетевой карте хранилища, обработка исключений выполняется стеком TCP/IP-хоста.

Третий вид — полная выгрузка стека TCP/IP, при которой вся обработка протоколов TCP/IP выполняется сетевой картой. С ростом числа процессорных ядер потребность в механизме разгрузки TCP/IP (TOE) на базе сетевой карты резко снизилась.

В среде iSCSI LUN — это пронумерованные накопители на дисках, секции жесткого диска. Инициатор обменивается с исполнителем запросами и ответами для установления связи с LUN.

Работа c iSCSI

Управление именами и адресами

Адреса хостов и портов целевого хранилища основаны на TCP/IP. Для идентификации инициаторов и целей используют специальные форматы имен iSCSI: квалифицированное имя iSCSI (IQN) или расширенный уникальный идентификатор (EUI).

Поддержка сессий и управление ими

iSCSI-сессия состоит из двух фаз: аутентификации (Login Phase) и обмена (Full Feature Phase).

Login Phase нужна для подтверждения права доступа и согласования параметров между инициатором и получателем. При успешной аутентификации получатель подтверждает доступ инициатору, иначе TCP-соединение прерывается.

После аутентификации сессия iSCSI переходит ко второй фазе. При установлении нескольких TCP-линков iSCSI требует, чтобы каждая пара «команда/ответ» проходила через одно и то же TCP-соединение. За счет чего каждая команда записи или считывания осуществляется без необходимости дополнительно отслеживать прохождение запросов по разным потокам.

В конце фазы обмена сессия закрывается командой iSCSI logout. Эта команда передает информацию о причинах завершения сессии и о том, какой ТСР-линк следует закрыть в случае возникновения ошибки.

Обработка ошибок

Инициатор и получатель iSCSI должны иметь буфер команд для подтверждения их выполнения. Также у них есть возможность восстановить утраченный блок данных IP-пакета (PDU) для восстановления сеанса передачи данных.

Средства обработки ошибок и восстановление в iSCSI включают:

  • выявление ошибок и восстановление данных на сеансовом уровне — например, повторение передачи утраченного PDU,
  • при повреждении TCP-линка оба узла iSCSI пытаются восстановить соединение,
  • при повреждении сессии iSCSI протокол закрывает все TCP-линки, прерывает выполнение задач, отменяет невыполненные SCSI команд и перезапускает сессию.

Обеспечение безопасности

Главные меры безопасности iSCSI:

  • протокол аутентификации Challenge-Handshake Authentication Protocol (CHAP) — алгоритм проверки подлинности, предусматривающий передачу не самого пароля пользователя, а косвенных сведений о нем,
  • Internet Protocol Security (IPsec) — набор протоколов, обеспечивающий защиту данных, которые передаются по межсетевому протоколу IP; проводит аутентификацию, проверку целостности и шифрование IP-пакетов.

Арендуйте систему хранения данных как сервис

И используйте протокол iSCSI для подключения к ней

Преимущества и недостатки хранилища iSCSI

iSCSI обеспечивает хорошую производительность блочного хранилища наряду с низкой стоимостью — это основное преимущество iSCSI. Он также широко поддерживается всеми основными операционными системами и гипервизорами и может работать на стандартных сетевых картах или специализированных адаптерах шины хоста (iSCSI HBA).

Почти все корпоративные массивы хранения данных осуществляют поддержку iSCSI. По этим причинам она пользуется популярностью в Tier-2 приложениях, которым требуется хорошая, но не лучшая производительность блочного хранилища, а также в системах хранения данных (СХД), совместно используемых многими хостами. Также iSCSI популярен среди гиперскейлеров и крупных поставщиков облачных услуг, когда им требуется решение для блочного хранения данных, работающее через Ethernet.

Еще одна «особенность» iSCSI — протокол немного выше конкурентов по задержке. Главный конкурент — Fibre Channel — опережает iSCSI по надежности и производительности. В то же время FC — более дорогое решение.

iSCSI vs Fibre Channel (FC)

Сети iSCSI SAN функционально похожи на Fibre Channel. Главное отличие — протокол FC использует интенсивный ручной детерминированный протокол второго уровня — все соединения должны быть определены и отображены вручную заранее. iSCSI опирается на недетерминированный автоматизированный протокол TCP/IP для обнаружения, маршрутизации и коммутации.

iSCSI vs Network-attached storage (NAS)

Трафик iSCSI может передаваться через общую сеть или выделенную сеть хранения данных. Однако iSCSI не поддерживает файловый доступ Network Attached Storage (NAS) или доступ к объектному хранилищу, поскольку они используют разные транспортные протоколы.

Как построить iSCSI SAN?

Хранилище iSCSI — экономичная альтернатива традиционной FC SAN, которой требуется выделенное оборудование, такое как специальные хост-адаптер шины и коммутатор. iSCSI SAN может быть построено на уже существующей сетевой инфраструктуре и не потребует покупки дополнительного оборудования.

СХД iSCSI основана на универсальной TCP/IP, поэтому разные фирменные сетевые устройства хранения данных в iSCSI SAN могут быть совместимы. Лучше всего использовать неблокирующий коммутатор Gigabit Ethernet корпоративного класса, поскольку устройство ниже уровнем не поддерживает соединения между несколькими портами на скорости проводной сети. Из-за этого коммутатор может отбрасывать пакеты без уведомления.

1GbE подключения к коммутатору Ethernet для доступа к дисковым массивам уязвимы для сбоя на этом канале. Для создания нескольких подключений от инициатора iSCSI каждого сервера к дисковому массиву больше всего подойдет техника многопутевого ввода-вывода (MPIO).

В заключение о технологии

Сравнивая две самые популярные технологии для сетей хранения — Fibre Channel и iSCSI, стоит отталкиваться от ваших задач. Если вам нужна очень низкая задержка, высокая масштабируемость и много узлов в сети, вы можете выбрать FC. Если крайне низкая задержка вам не нужна и нужно более простое и дешевое решение, подойдет iSCSI.

OAuth 2: введение в протокол авторизации

Настройка ISCSI initiator в linux

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

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

ISCSI

Перед тем, как рассказать про 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, так что даю очень краткое описание того, что делает target. Он берёт блочное устройство, пришлёпывает к нему имя и LUN и публикет его у себя на портале, после чего позволяет всем желающим (авторизация по вкусу) обращаться к нему.

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

Target iqn.2011-09.example:data IncomingUser username Pa$$w0rd Lun 0 Path=/dev/md1

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

Initiator

В качестве инициатора используется 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.

Это часто вызывает панику «как я могу узнать имя блочного устройства?». Оно выводится в подробном выводе iscsiadm (# iscsiadm -m session -P 3).

Авторизация

В отличие от 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 из обнаруженных).

mulitpath

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

  1. При использовании multipath следует ставить маленькие таймауты — переключение между сбойными путями должно происходить достаточно быстро
  2. В условиях более-менее быстрого канала (10G и выше, во многих случаях гигабит) следует избегать параллелизма нагрузки, так как теряется возможность использовать bio coalesing, что в некоторых типах нагрузки может неприятно ударить по target’у.

При подготовке материала использовались источники:
https://habr.com/ru/articles/144290/
https://selectel.ru/blog/iscsi-protocol/
https://habr.com/ru/articles/97529/

Оцените статью