- Записки IT специалиста
- Настройка iSCSI-хранилища в Ubuntu Server/Debian
- Записки IT специалиста
- Настройка iSCSI-хранилища в Debian или Ubuntu
- Сервер iSCSI Traget на Linux Debian
- Настройка ISCSI initiator в linux
- ISCSI
- NAS vs SAN
- scsi over tcp
- Терминология
- target
- Initiator
- Блочное устройство
- Авторизация
- Файл конфигурации
- Краткий справочник
- mulitpath
Записки IT специалиста
Технический блог специалистов ООО»Интерфейс»
- Главная
- Настройка iSCSI-хранилища в Ubuntu Server/Debian
Настройка iSCSI-хранилища в Ubuntu Server/Debian
Протокол iSCSI получил широкое распространение как простой и недорогой способ организации сетей хранения данных (SAN). Ранее мы рассказывали, как организовать iSCSI-хранилище на базе серверных операционных систем Windows, незаслуженно обделив вниманием свободные ОС. Поэтому сегодня мы решили устранить этот пробел и рассмотреть настройку iSCSI-хранилища на базе Ubuntu Server или Debian.
Внимание! Начиная с Debian 9 Stretch и Ubuntu 18.04 LTS пакет iSCSI Enterprise Target (iscsitarget) был удален и ему на смену пришел Linux SCSI target (tgt), для настройки которого воспользуйтесь следующей статьей.
В качестве серверной ОС в данном случае мы выбрали Ubuntu Server 16.04 LTS, однако процесс настройки в ее среде ничем не отличается от Debian или любого иного дистрибутива, основанного на любой из этих двух систем.
В Linux-системах в качестве программной цели iSCSI используется iSCSI Enterprise Target (IET) — успевшее зарекомендовать себя надежное и проверенное решение. Для работы с ним потребуется установить два пакета:
Первый пакет представляет собой собственно программную цель, а второй является DKMS-модулем ядра для поддержки программной цели. Технология DKMS позволяет динамически пересобирать модуль при обновлении версии ядра. Теперь вам не надо беспокоиться, что ваш модуль перестанет работать после обновления ядра, система обо всем позаботится сама. Налицо принцип — поставил и забыл.
Установка потянет за собой довольно много зависимостей, это не удивительно, так как будут установлены все необходимые компоненты для сборки модуля.
Сама сборка будет выполнена в процессе установки и может занять некоторое время.
После установки следует включить автоматический запуск службы цели iSCSI, для этого откройте файл /etc/default/iscsitarget и приведите к следующему виду строку:
Теперь можно приступить к созданию целей. На текущем этапе развития технологий в качестве LUN наиболее удобно использовать файлы виртуальных дисков, хотя никто не мешает вам выделить в LUN дисковое устройство или LVM-том. Прежде всего создадим папку для хранения виртуальных дисков и разместим в ней тестовый диск объемом в 2 ГБ:
Для создания файла диска мы воспользовались командой dd, опция bs указывает размер блока — 1 МБ, а опция count — количество этих блоков. Имя файла и расширение могут быть произвольными, в нашем случае это lun0.img.
Для создания программной цели (таргета) откроем файл /etc/iet/ietd.conf и добавим в него следующие строки:
Разберем синтаксис подробнее. Первая строка задает собственно цель, точнее ее IQN, это полностью определенное имя цели, которое записывается в формате:
- year-mo — год и месяц регистрации домена
- reversed_domain_name — доменное имя, записанное в обратном порядке
- unique_name — уникальное имя цели
IncomingUser определяет учетные данные (логин и пароль) для подключения к данной цели, если аутентификация не требуется можно оставить пустым. OutgoingUser — учетные данные для аутентификации на инициаторе в случае использования взаимной проверки подлинности, если не используется — также оставляется пустым. Обратите внимание, согласно стандарту, пароль должен содержать ровно 12 символов.
И наконец Lun описывает доступные для данной цели объекты (LUN), которых может быть несколько, нумерация LUN начинается с нуля. Path указывает путь к файлу виртуального диска, а Type указывает тип доступа. После запятой и перед Type пробел отсутствует.
Например, если мы хотим добавить в цель еще один диск, то следует добавить строку:
Закончив настройку сохраняем файл конфигурации и запускаем службу. Управлять ею лучше «по-старинке», через /etc/init.d, в этом случае вы получите наиболее информативный вывод и сообщения о возможных ошибках:
Состояние запущенной службы можно посмотреть командой:
Теперь можно попробовать подключитья к нашей цели. В качестве инициатора мы использовали Windows Server 2012R2, который без проблем обнаружил таргет и подключил диск после ввода учетных данных.
Для ограничения доступа к целям служит файл настроек /etc/iet/initiators.allow, содержащий записи об инициаторах, IP-адресах или сетях, которым разрешен доступ. Первым указывается таргет, затем через запятую перечисляются объекты, имеющие к нему доступ. По умолчанию доступ разрешен всем к любым целям:
Как минимум имеет смысл ограничить доступ только сетью хранения данных, например:
При необходимости можно явно ограничить доступ к цели для конкретного инициатора и определенной сети:
IQN инициатора может быть записан в виде регулярного выражения, поэтому даже если вы не используете данную возможность, то не забывайте использовать regexp-синтаксис, например, экранирование символа точки.
Как видим, настройка iSCSI-хранилища на базе Linux предельно проста и позволяет быстро и с минимальными затратами развернуть необходимую инфраструктуру.
Помогла статья? Поддержи автора и новые статьи будут выходить чаще:
Или подпишись на наш Телеграм-канал:
Источник
Записки IT специалиста
Технический блог специалистов ООО»Интерфейс»
- Главная
- Настройка iSCSI-хранилища в Debian или Ubuntu
Настройка iSCSI-хранилища в Debian или Ubuntu
Протокол iSCSI получил широкое распространение как простой и недорогой способ организации сетей хранения данных (SAN) поверх обычных Ethernet-сетей. iSCSI не требует приобретения дополнительного оборудования и существенного изменения инфраструктуры, тем не менее позволяя более эффективно использовать пространство в хранилищах и увеличить надежность хранения данных. В данном материале мы рассмотрим создание iSCSI-хранилища в среде современных ОС семейства Debain или Ubuntu, включая многочисленные их производные.
Начиная с Debian 9 Stretch и Ubuntu 18.04 LTS пакет iSCSI Enterprise Target (iscsitarget) был удален и ему на смену пришел Linux SCSI target (tgt), работу с которым мы и будем рассматривать. Все указанные ниже команды следует вводить с правами суперпользователя или используя sudo. В нашем случае использовалась OC Debian 10, но все сказанное будет справедливо для любого основанного на нем дистрибутива, а с некоторыми поправками для любых Linux-систем.
Прежде всего установим Linux SCSI target, не забыв перед этим обновить список пакетов:
Серверная часть в iSCSI называется порталом, который содержит цели (таргет, Target), каждая из которых предоставляет клиенту — инициатору (Initiator) доступ к одному или нескольким блочным устройствам. В качестве блочных устройств могут использоваться физические диски, логические тома, файлы (виртуальные диски) и т.д. и т.п. В нашем примере мы будем использовать файл. На наш взгляд это наиболее удобно, так как позволяет достаточно гибко управлять системой хранения — файлы виртуальных дисков можно легко перемещать между серверами или физическими дисками, а также управлять их размерами.
Виртуальные диски могут иметь фиксированный размер или быть динамическими. Диск фиксированного размера сразу занимает все выделенное пространство, но при этом обеспечивает наиболее высокое быстродействие и практически не подвержен фрагментации. Динамический диск увеличивает свой размер по мере записи на него данных, файл диска при этом может фрагментироваться, особенно если активная запись ведется сразу в несколько таких дисков.
Какой же тип выбрать? Здесь все зависит от решаемых задач, если вы заранее знаете объем хранимых данных, и он не будет существенно изменяться — то выбирайте диск фиксированного размера, в иных случаях более предпочтителен динамический диск, как позволяющий более оптимально использовать дисковое пространство.
Для хранения файлов виртуальных дисков мы будем условно использовать директорию /storage, поэтому вам потребуется откорректировать пути в соответствии с реальным расположением данных.
Для создания диска фиксированного размера используйте команду:
Она создаст файл размером 2 ГБ, так как мы указали размер блока — bs — равным 1 MБ и количество таких блоков — count — 2048.
Для создания динамического диска:
Данная команда создает разреженный файл с максимальным размером 200 ГБ, разреженными называются файлы, которые вместо последовательности нулей на диске хранят информацию об этих последовательностях в специальной таблице.
Для преобразования обычного файла в разреженный выполните команду:
Где filename и newfilename — старое и новое имя файла.
Будем считать, что файлы виртуальных дисков вами созданы и перейдем к настройке Linux SCSI target. Для этого перейдем в /etc/tgt где мы увидим файл targets.conf и директорию conf.d. Предполагается что для каждой цели мы будем использовать отдельный конфигурационный файл, которые следует снабдить расширением .conf и размещать в указанной директории.
Следует помнить, что так как iSCSI-диск является аналогом обычного диска, то с одной целью может работать только один инициатор, исключение — кластерные системы, где одна цель может быть сразу подключена к нескольким узлам.
Создадим новый файл конфигурации:
Затем откроем созданный файл и внесем в него следующее содержимое:
В начале секции после директивы target указывается IQN — полностью определенное имя цели, которое имеет следующий формат:
- year-mo — год и месяц регистрации домена
- reversed_domain_name — доменное имя, записанное в обратном порядке
- unique_name — уникальное имя цели
Внутри секции цели мы указали следующие опции:
- backing-store — указывает путь к блочному устройству или файлу
- initiator-address — IP-адрес инициатора, , если он не указан, то доступ сможет получить любое устройство.
- incominguser — имя пользователя и пароль, необязательная опция, используется для дополнительной безопасности, по требованию стандарта длина пароля должна быть равна 12 символам.
Если вы хотите предоставлять в одной цели два и более блочных устройства, то для каждого из них добавьте отдельной строкой опцию backing-store, это же касается и initiator-address, их тоже можно указать несколько.
Сохраним файл конфигурации и перезапустим службу Linux SCSI target:
Проверить работу портала можно командой:
Которая покажет все подключенные к нему цели и предоставляемые ими блочные устройства.
На этом настройку цели можно считать законченной. Как видим, никаких особых сложностей в создании iSCSI хранилища в Linux-системах нет.
Помогла статья? Поддержи автора и новые статьи будут выходить чаще:
Или подпишись на наш Телеграм-канал:
Источник
Сервер iSCSI Traget на Linux Debian
Продолжая тему iSCSI, попробуем установить iSCSI Target на Linux (Debian).
В компаниях бывают ситуации когда сервер снят с эксплуатации, а объемов для хранения на этом севере достаточно. Обычно на таких сервера присутствую котроллеры RAID массивов и определенное количество дисков. Linux позволит без лицензионных затрат получить сервер-хранилище iSCSI.
Установим систему Debian.
Перезапустим сеть с новыми настройками:
В качестве сервера iSCSI Target используем TGT.
Создаем диск для размещения iSCSI дисков (IQN). Можно выделить отдельный диск или RAID массив под раздаваемые диски (как добавить новый диск в Linux).
Для теста создаем просто папку для размещения iqn дисков:
Создаем тестовый диск:
создастся диск размером 2Гб, с размером блоков 1Мб, где bs — размер блока, count — количество блоков.
Создаем файл конфигурации для нашего IQN — disk01.img:
Перезапустим TGT для чтения конфигурации:
Сервер iSCSI Target готов. Попробуем подключить диск на клиенте.
Для серверных ОС (Windows Server):
Для клиентских ОС (Windows):
в поле Name и Target secret вводим данные из файла настройки target01.conf, поле incominguser.
Если необходимо увеличить объем выделяемого диска:
Источник
Настройка ISCSI initiator в linux
Abstract: как работает open-iscsi (ISCSI initiator в linux), как его настраивать и чуть-чуть про сам протокол ISCSI.
Лирика: В интернете есть множество статей довольно хорошо объясняющих, как настроить ISCSI target, однако, почему-то, практически нет статей про работу с инициатором. Не смотря на то, что target технически сложнее, административной возни с initiator больше — тут больше запутанных концепций и не очень очевидные принципы работы.
ISCSI
Перед тем, как рассказать про ISCSI — несколько слов о разных типах удалённого доступа к информации в современных сетях.
NAS vs 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, то мы хотим его подключить. И тут начинается сложное, потому что у initiator’а своя логика, он совсем не похож на тривиальное mount для nfs.
Initiator
В качестве инициатора используется open-iscsi. Итак, самое важное — у него есть режимы работы и состояние. Если мы дадим команду не в том режиме или не учтём состояние, результат будет крайне обескураживающий.
Итак, режимы работы:
- Поиск target’ов (discovery)
- Подключение к target’у
- Работа с подключенным target’ом
Из этого списка вполне понятен жизненный цикл — сначала найти, потом подключиться, потом отключиться, потом снова подключиться. Open-iscsi держит сессию открытой, даже если блочное устройство не используется. Более того, он держит сессию открытой (до определённых пределов, конечно), даже если сервер ушёл в перезагрузку. Сессия iscsi — это не то же самое, что открытое TCP-соединение, iscsi может прозрачно переподключаться к 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’а, то это приведёт к появлению нескольких блочных устройств.
Однако, решение есть — это multipathd, который находит диски с одинаковым идентифиатором и обрабатывает их как положено в multipath, с настраиваемыми политиками. Эта статья не про multipath, так что подробно объяснять таинство процесса я не буду, однако, вот некоторые важные моменты:
- При использовании multipath следует ставить маленькие таймауты — переключение между сбойными путями должно происходить достаточно быстро
- В условиях более-менее быстрого канала (10G и выше, во многих случаях гигабит) следует избегать параллелизма нагрузки, так как теряется возможность использовать bio coalesing, что в некоторых типах нагрузки может неприятно ударить по target’у.
Источник