Установка, настройка и использование ISCSI

Материал из DvoWiki
Версия от 12:02, 29 декабря 2009; Pozpl (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

iSCSI

Для использования дисковых массивов находящихся на одном компьютере другим можно использовать iSCSI.

Термины

  1. Initiator (Инициатор) - клиент в технологии iSCSI - конечная точка в которой происходит доступ к массиву.
  2. Target (Программный сервер) - сервер предоставляющий доступ к массиву.

В нашем случае initiator и target являются программными.

Установка

Target

В качестве сервера будем использовать iscsitarget - ссылка

для установки в gentoo - emerge -v sys-block/iscsitarget

в ядре дожна быть включена опция : CRYPTO_CRC32C

Настройка

После установки надо отредактировать файл : /etc/ietd.conf

Target iqn.2008-09.ru.dvo:iscsi.oberon.lvm.1
Lun 0 Path=/dev/mapper/vg-lvol0,Type=fileio
MaxConnections          1

где : iqn.2008-09.ru.dvo:iscsi.oberon.lvm.1 - имя узла. iqn обязательный префикс

/dev/mapper/vg-lvol0 - экспортируемое блочное устройство.

Файл /etc/conf.d/ietd интересен возможностью задать адрес на котором будет находится ietd демон

запуск сервиса осуществляется при помощи : /etc/init.d/ietd start

Initiator

для инициатора используется пакет sys-block/open-iscsi

Для работы с ядрами 2.6.26 нужно использовать версию 2.0.870_rc2

В ядре необходимо собрать драйвер iscsi_tcp - CONFIG_ISCSI_TCP (Device Drivers -> SCSI device support -> SCSI low level drivers->iSCSI initiator over TCP/IP), и добавить поддержку CONFIG_CRYPTO_CRC32C (Cryptographic API->CRC32c CRC alroritm).


Настройка

Редактируем файл /etc/iscsi/initiatorname.iscsi

InitiatorName=iqn.2008-09.ru.dvo:iscsi.beetle.lvm.1
InitiatorAlias=initiator-beetle

Загрузка для систем не имеющих init скриптов

Загружаем модуль

modprobe -q iscsi_tcp

Запускаем

iscsi демон iscsid -c /etc/iscsi/iscsid.conf -i /etc/iscsi/initiatorname.iscsi

Загрузка в Gentoo

В Gentoo имеется инициализирующий скрипт, так что достаточно просто запустить

/etc/init.d/iscsid start

Для того чтобу указать на каком адресе будет работать ietd необходимо заполнить поле ADDRESS в файле

/etc/conf.d/ietd

Настройка сети

iscsiadm -m iface -I iface0 --op=new 

Затем зыпускаем ifconfig

и смотрим значение HWaddr для того сетевого интерфейса который мы хотим использовать, например 00:0F:1F:92:6B:BF

iscsiadm -m iface -I iface0 --op=update -n iface.hwaddress -v 00:0F:1F:92:6B:BF

Далее выполняем

iscsiadm -m node -T iqn.2008-09.ru.dvo:iscsi.oberon.lvm.1 -p <IP адрес сервера где расположен target>:3260 -l

Выяснить наличие доступных узлов можно командой

iscsiadm -m discovery -t st -p 10.0.0.1 -P 1

после этого перезапускаем iscsid

после этого у нас должно появиться новое блочное устройство, например /dev/sdb

с ним можно работать как с обычным блочным устройством те fdisk,mkfs,mout etc.

Теперь для того чтобы получить доступ к данному блочному устройству после перезагрузки initiator нужно будет только запустить iscsid (модуль iscsi_tcp должен быть загружен)

Автоматическое подключение нодов при запуске сервиса

Эта возможность присутствует только в дистрибутивах с init скриптом. Подключение определённой цели, находящейся на удаленной машине с ip:port

iscsiadm -m node -T targetname -p ip:port --op update -n node.conn[0].startup -v automatic

Для обепечения подключения для всех порталов и на всех интерфейсах:

iscsiadm -m node -T targetname --op update -n node.conn[0].startup -v automatic

Также, той же цели моно добится изминив в /etc/iscsi/iscsi.conf строчку

node.conn[0].startup = automatic

Для подключения всех нод вручную необходимо набрать

iscsiadm -m node --loginall=automatic

Для отключения от нод

iscsiadm -m node --logoutall=automatic

То же самое может быть выполнено при запуске демона iscsid

iscsi_login_all_nodes() {
       ebegin "Setting up iSCSI targets: "
       iscsiadm -m node --loginall=automatic
       eend $?
}

iscsi_logout_all_nodes() {
       ebegin "Deactivating iSCSI targets: "
       # Logout from all active sessions
       iscsiadm -m node --logoutall=all
               ret=$?
               eend $ret
       return $ret
}

start() {
       checkconfig || return 1
       do_modules 'Loading iSCSI modules' 'scsi_transport_iscsi iscsi_tcp'
       ret=$?
       [ $ret -ne 0 ] && return 1
       ebegin "Starting ${NAME}"
       start-stop-daemon --start --exec $DAEMON --quiet
       ret=$?
       eend $ret
       if [ "$ret" == "0" ]; then
                   iscsi_login_all_nodes
       fi
       return $ret
}

stop() {
       iscsi_logout_all_nodes || return 1
       ebegin "Stopping ${NAME}"
       start-stop-daemon --signal HUP --stop --quiet --exec $DAEMON #--pidfile $PID_FILE
       eend $?

       # ugly, but pid file is not removed by iscsid
       rm -f $PID_FILE

       do_modules 'Removing iSCSI modules' 'iscsi_tcp scsi_transport_iscsi' '-r'
       ret=$?
       return $ret
}

ВАЖНО!!! Изменения в файле затронут только те узлы, которые были добавлеы после изменения файла. Существовавшие до этого узлы необходимо добавить вручную через команду iscsiadm как показано выше.

Jumbo frames

для увелечения производительности iscsi можно использовать jumbo frames Для этого нужна gigabit ethernet card,switch (with jumbo farmes support) на initiator и target выполняем ifconfig eth0 mtu 9000

links

  1. README наиболее полное руководство по open-iscsi
  2. iSCSI wikipedia eng
  3. iSCSI wikipedia rus
  4. Jumbo Frames