Iscsi intro: различия между версиями
Sirmax (обсуждение | вклад) (Новая страница: «Категория:ISCSI») |
Sirmax (обсуждение | вклад) |
||
(не показано 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 следует ставить маленькие таймауты — переключение между сбойными путями должно происходить достаточно быстро