Iscsi intro: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
(Новая страница: «Категория:ISCSI»)
 
 
(не показано 8 промежуточных версий этого же участника)
Строка 1: Строка 1:
 
[[Категория:ISCSI]]
 
[[Категория:ISCSI]]
  +
=Введенияв iSCSI=
  +
Тут собраны заметки - что прочитать, если подзабыл, пояснения терминов и т.п.
  +
  +
=scsi over tcp=
  +
Одним из протоколов доступа к блочным устройствам является iscsi. Буква 'i' в названии относится Internet
  +
<BR>
  +
По своей сути это 'scsi over tcp'. Сам протокол SCSI (без буквы 'i') — это весьма сложная конструкция, поскольку он может работать через разные физические среды (например, UWSCSI — параллельная шина, SAS — последовательная — но протокол у них один и тот же).
  +
<BR>
  +
Этот протокол позволяет делать куда больше, чем просто «подтыкать диски к компьютеру» (как это придумано в SATA),
  +
<BR>
  +
например, он поддерживает имена устройств, наличие нескольких линков между блочным устройством и потребителем,
  +
<BR>
  +
поддержку коммутации (ага, SAS-коммутатор, такие даже есть в природе),
  +
<BR>
  +
подключение нескольких потребителей к одному блочному устройству и т.д.
  +
<BR>
  +
Другими словами, этот протокол просто просился в качестве основы для сетевого блочного устройства.
  +
  +
=Терминология=
  +
В мире SCSI приняты следующие термины:
  +
* target — тот, кто предоставляет блочное устройство. Ближайший аналог из обычного компьютерного мира — сервер.
  +
* initiator — клиент, тот, кто пользуется блочным устройством. Аналог клиента.
  +
Инициаторами обычно выступают сетевые карты (в их ROM бывает прошит необходимый код) или software-реализации
  +
* WWID — уникальный идентификатор устройства, его имя. Аналог DNS-имени. Этот же физически вшитый в диск World-Wide ID иногда можно прочитать на наклейке на диске
  +
* LUN — номер «кусочка» диска, к которому идёт обращение. Ближайший аналог — раздел на жёстком диске.
  +
  +
Дополнительно в iSCSI:
  +
* IQN (iSCSI Qualified Name) — то есть чистой воды имя, сходное до степени смешения с DNS (с небольшими отличиями). Вот пример IQN: iqn.2011-09.test:name.
  +
* portal. Portal — это, если грубо говорить, несколько target'ов, которые анонсируются одним сервером. Аналогии с www нет, но если бы веб-сервер можно было попросить перечислить все свои virtualhosts, то это было бы оно. portal указывает список target'ов и доступные IP, по которым можно обращаться (да-да, iscsi поддерживает несколько маршрутов от initiator к target).
  +
  +
=Initiator=
  +
  +
В качестве инициатора используется (например) open-iscsi. <BR>
  +
Итак, самое важное — у него есть режимы работы и состояние. <BR>
  +
Если мы дадим команду не в том режиме или не учтём состояние, результат будет крайне обескураживающий. <BR>
  +
  +
==Режимы работы==
  +
* Поиск target'ов (discovery)
  +
* Подключение к target'у
  +
  +
=Работа с подключенным target'ом=
  +
  +
Из этого списка вполне понятен жизненный цикл:
  +
* сначала найти, потом подключиться
  +
* потом отключиться
  +
* потом снова подключиться.
  +
  +
Open-iscsi держит сессию открытой, даже если блочное устройство не используется.
  +
<BR>
  +
Более того, он держит сессию открытой (до определённых пределов, конечно), даже если сервер ушёл в перезагрузку.
  +
<BR>
  +
Сессия iscsi — это не то же самое, что открытое TCP-соединение, iscsi может прозрачно переподключаться к target'у.
  +
<BR>
  +
Отключение/подключение — операции, которыми управляют «снаружи» (либо из другого ПО, либо руками).
  +
  +
==Немного о состоянии==
  +
После 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
  +
<PRE>
  +
iscsiadm -m session -P 3
  +
</PRE>
  +
=Авторизация=
  +
  +
В отличие от SAS/UWSCSI, ISCSI доступно для подключения кому попало.
  +
Для защиты от таких, есть логин и пароль (chap), и их передача iscsiadm'у — ещё одна головная боль для начинающих пользователей.
  +
<BR>
  +
Она может осуществляться двумя путями — изменением свойств уже найденного ранее target'а и прописываем логина/пароля в файле конфигурации open-iscsi.
  +
<BR>
  +
Причина подобных сложностей — в том, что пароль и процесс логина — это атрибуты не пользователя, а системы.
  +
<BR>
  +
ISCSI — это дешёвая версия FC-инфраструктуры, и понятие «пользователь» в контексте человека за клавиатурой тут неприменимо.
  +
<BR>
  +
Если у вас sql-база лежит на блочном устройстве iscsi, то разумеется, вам будет хотеться, чтобы sql-сервер запускался сам, а не после минутки персонального внимания оператора.
  +
  +
=Файл конфигурации=
  +
  +
Это очень важный файл, потому что помимо логина/пароля он описывает ещё поведение open-iscsi при нахождении ошибок.
  +
<BR>
  +
Он может отдавать ошибку «назад» не сразу, а с некоторой паузой (например, минут в пять, чего достаточно для перезагрузки сервера с данными).
  +
<BR>
  +
Так же там контролируется процесс логина (сколько раз пробовать, сколько ждать между попытками) и всякий тонкий тюнинг самого процесса работы.
  +
<BR>
  +
Заметим, эти параметры довольно важны для работы и вам нужно обязательно понимать, как поведёт ваш iscsi если вынуть сетевой шнурок на 10-20с, например.
  +
  +
=Краткий справочник=
  +
  +
сначала мы находим нужные нам target, для этого мы должны знать IP/dns-имя инициатора:
  +
==получить список target-ов==
  +
<PRE>
  +
iscsiadm -m discovery -t st -p 192.168.0.1 -t
  +
</PRE>
  +
* st — это команда send targets.
  +
<BR>
  +
==список найденного для логина==
  +
<PRE>
  +
iscsiadm -m node
  +
</PRE>
  +
  +
или подробнее (-P 1)
  +
<PRE>
  +
iscsiadm -m node -P 1
  +
Target: iqn.2007-11.com.nimblestorage:allerta-801-g4d8d52b8d577d8f3
  +
Portal: 10.237.25.151:3260,-1
  +
Iface Name: default
  +
</PRE>
  +
  +
==залогиниться, то есть подключиться и создать блочное устройство==
  +
<PRE>
  +
iscsiadm -m node -l -T iqn.2011-09.example:data
  +
</PRE>
  +
  +
==вывести список того, к чему подключились==
  +
<PRE>
  +
iscsiadm -m session
  +
</PRE>
  +
Более подробно (в самом конце вывода будет указание на то, какое блочное устройство какому target'у принадлежит)
  +
<PRE>
  +
iscsiadm -m session -P 3
  +
</PRE>
  +
  +
==вылогиниться из конкретной==
  +
<PRE>
  +
iscsiadm - m session -u -T iqn.2011-09.example:data
  +
</PRE>
  +
==залогиниться во все обнаруженные target'ы==
  +
<PRE>
  +
iscsiadm -m node -l
  +
</PRE>
  +
==вылогиниться из всех target'ов==
  +
<PRE>
  +
iscsiadm -m node -u
  +
</PRE>
  +
==удалить target из обнаруженных==
  +
<PRE>
  +
iscsiadm -m node --op delete -T iqn.2011-09.example:data
  +
</PRE>
  +
  +
=mulitpath=
  +
  +
Ещё один вопрос, важный в серьёзных решениях — поддержка нескольких маршрутов к источнику.
  +
<BR>
  +
Прелесть iscsi — в использовании обычного ip, который может быть обычным образом обработан, как и любой другой трафик
  +
<BR>
  +
(хотя на практике обычно его не маршрутизируют, а только коммутируют — слишком уж великая там нагрузка).
  +
<BR>
  +
Так вот, iscsi поддерживает multipath в режиме «не сопротивляться».
  +
<BR>
  +
Сам по себе open-iscsi не умеет подключаться к нескольким IP одного target'а.
  +
<BR>
  +
Если его подключить к нескольким IP одного target'а, то это приведёт к появлению нескольких блочных устройств.
  +
<BR>
  +
Однако, решение есть — это multipathd, который находит диски с одинаковым идентифиатором и обрабатывает их как положено в multipath, с настраиваемыми политиками. Эта статья не про multipath, так что подробно объяснять таинство процесса я не буду, однако, вот некоторые важные моменты:
  +
<BR>
  +
При использовании multipath следует ставить маленькие таймауты — переключение между сбойными путями должно происходить достаточно быстро
  +
<BR>

Текущая версия на 15:59, 15 мая 2024

Введенияв iSCSI

Тут собраны заметки - что прочитать, если подзабыл, пояснения терминов и т.п.

scsi over tcp

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

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

В мире SCSI приняты следующие термины:

  • target — тот, кто предоставляет блочное устройство. Ближайший аналог из обычного компьютерного мира — сервер.
  • initiator — клиент, тот, кто пользуется блочным устройством. Аналог клиента.

Инициаторами обычно выступают сетевые карты (в их ROM бывает прошит необходимый код) или software-реализации

  • WWID — уникальный идентификатор устройства, его имя. Аналог DNS-имени. Этот же физически вшитый в диск World-Wide ID иногда можно прочитать на наклейке на диске
  • LUN — номер «кусочка» диска, к которому идёт обращение. Ближайший аналог — раздел на жёстком диске.

Дополнительно в iSCSI:

  • IQN (iSCSI Qualified Name) — то есть чистой воды имя, сходное до степени смешения с DNS (с небольшими отличиями). Вот пример IQN: iqn.2011-09.test:name.
  • portal. Portal — это, если грубо говорить, несколько target'ов, которые анонсируются одним сервером. Аналогии с www нет, но если бы веб-сервер можно было попросить перечислить все свои virtualhosts, то это было бы оно. portal указывает список target'ов и доступные IP, по которым можно обращаться (да-да, iscsi поддерживает несколько маршрутов от initiator к target).

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с, например.

Краткий справочник

сначала мы находим нужные нам target, для этого мы должны знать IP/dns-имя инициатора:

получить список target-ов

iscsiadm -m discovery -t st -p 192.168.0.1 -t 
  • st — это команда send targets.


список найденного для логина

iscsiadm -m node 

или подробнее (-P 1)

iscsiadm -m node  -P 1
Target: iqn.2007-11.com.nimblestorage:allerta-801-g4d8d52b8d577d8f3
	Portal: 10.237.25.151:3260,-1
		Iface Name: default

залогиниться, то есть подключиться и создать блочное устройство

iscsiadm -m node -l -T iqn.2011-09.example:data 

вывести список того, к чему подключились

iscsiadm -m session 

Более подробно (в самом конце вывода будет указание на то, какое блочное устройство какому target'у принадлежит)

iscsiadm -m session -P 3

вылогиниться из конкретной

iscsiadm - m session -u -T iqn.2011-09.example:data 

залогиниться во все обнаруженные target'ы

iscsiadm -m node -l

вылогиниться из всех target'ов

iscsiadm -m node -u

удалить target из обнаруженных

iscsiadm -m node --op delete -T iqn.2011-09.example:data

mulitpath

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