Янв 222016
 

Решил для себя поэкспериментировать с iSCSI. Не то, чтобы я являюсь большим фанатом подобных эрзац-решений (из SAN мне приходилось иметь дело только с Fibre Channel), но в свете недавних событий весьма вероятно, что многие покупатели оборудования Enterprise-уровня решат сэкономить, поэтому уметь пользоваться этой технологией весьма полезно.

iSCSI - это протокол, предназначенный для отдачи от сервера к клиенту блочных устройств по протоколу TCP/IP, в отличие от NFS и CIFS, отдающих готовую файловую систему. В iSCSI используется своя терминология, например, сервер называется target, а клиент - initiator. Я буду придерживаться этих терминов в статье. Для экономии ресурсов тестовый стенд сделал на двух виртуальных машинах под управлением VirtualBox 5.0.

Небольшое отступление: статья не претендует на всеобъемлющую инструкцию по администрированию SAN на iSCSI, это просто заметки для начинающих.

Итак, приступим.

Создадим две виртуальные машины и поставим туда Oracle Enterprise Linux 6.7. Для той, которая будет target'ом, хватит 1Гб ОЗУ, для второй (initiator) сделаем 2 Гб, т.к. на ней будет работать небольшая БД Oracle с ASM. Кроме того, для обеих машин нужно создать по 2 сетевых адаптера. Первый сделаем в режиме "сетевой мост", он понадобится для того, чтобы наши виртуалки были доступны извне, чтобы на них можно было ходить по ssh, использовать внешние репозитории yum и т.д. Второй же будет работать в режиме "внутренняя сеть". Он нам понадобится для интерконнекта, по ней будет ходить трафик iSCSI.
Настройка адаптера в VirtualBox

Кроме того, к target-виртуалке приделаем 4 тома по 1 Гб - их мы и будем отдавать потом по сети.
Настройка дисков в VirtualBox
Осталось создать пользователей, настроить ssh и сделать остальные тривиальные вещи на новых системах.

Настройка Interconnect.

Дадим нашим виртуалкам следующие IP-адреса на внутренних сетевых адаптерах (внешние получают сетевой адрес по DHCP): 192.168.0.1 для target и 192.168.0.2 для initiator. Создаём файлик /etc/sysconfig/network-scripts/ifcfg-eth1 и пишем туда настройки сети:

Initiator:

DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=192.168.0.2
PREFIX=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth1"

Target:

DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=192.168.0.1
PREFIX=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth1"

Потом на обеих машинках перезапускаем сеть:

service network restart
Настройка Target.

Сперва поставим нужные для Target'а пакеты:

yum install atop scsi-target-utils pciutils lsscsi

Пакет scsi-target-utils в данном случае ключевой.

Посмотрим, какие дисковые устройства у нас есть:

[[email protected] /]# ls -lah /dev/sd*
brw-rw----. 1 root disk 8,  0 Jan 22 14:38 /dev/sda
brw-rw----. 1 root disk 8, 16 Jan 22 12:46 /dev/sdb
brw-rw----. 1 root disk 8, 32 Jan 22 12:47 /dev/sdc
brw-rw----. 1 root disk 8, 48 Jan 22 12:46 /dev/sdd
brw-rw----. 1 root disk 8, 64 Jan 21 16:32 /dev/sde
brw-rw----. 1 root disk 8, 65 Jan 21 16:32 /dev/sde1
brw-rw----. 1 root disk 8, 66 Jan 21 16:32 /dev/sde2

Итак, использовать будем диски /dev/sd[a-d].

Правим файл /etc/tgt/targets.conf, там будет описание всех отдаваемых LUN'ов.

default-driver iscsi
 
<target cube-oel-target:server.target1>
    backing-store /dev/sda   # LUN 1
    backing-store /dev/sdb   # LUN 2
    backing-store /dev/sdc   # LUN 3
    backing-store /dev/sdd   # LUN 4
    incominguser cube cube   # Пользователь/пароль
    write-cache off
    vendor_id Cube           # Тщеславие
</target>
	# Тут адреса initiator'ов, которым
	# разрешено подключаться.
	# Их может быть несколько
    initiator-address 192.168.0.2

Перезапустим tgtd - демон, отвечающий за работу iSCSI:

service tgtd stop
service tgtd start

Убедимся, что все луны создались нормально:

[[email protected] /]# tgt-admin --show
Target 1: cube-oel-target:server.target1
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
        I_T nexus: 6
            Initiator: iqn.1988-12.com.oracle:4329e560441a
            Connection: 0
                IP Address: 192.168.0.2
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB, Block size: 1
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: null
            Backing store path: None
            Backing store flags: 
        LUN: 1
            Type: disk
            SCSI ID: IET     00010001
            SCSI SN: beaf11
            Size: 1074 MB, Block size: 512
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /dev/sda
            Backing store flags: 
        LUN: 2
            Type: disk
            SCSI ID: IET     00010002
            SCSI SN: beaf12
            Size: 1074 MB, Block size: 512
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /dev/sdb
            Backing store flags: 
        LUN: 3
            Type: disk
            SCSI ID: IET     00010003
            SCSI SN: beaf13
            Size: 1074 MB, Block size: 512
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /dev/sdc
            Backing store flags: 
        LUN: 4
            Type: disk
            SCSI ID: IET     00010004
            SCSI SN: beaf14
            Size: 1074 MB, Block size: 512
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /dev/sdd
            Backing store flags: 
    Account information:
        cube
    ACL information:
        ALL

Последнее, что осталось сделать - разрешить входящие соединения по порту 3260:

iptables -I INPUT -p tcp -m tcp --dport 3260 -j ACCEPT
service iptables save
service iptables restart
Настройка Initiator.

Тут всё будет немножко похитрее.
Ставим пакеты

yum install lsscsi pciutils iscsi-initiator-utils atop

Правим файл /etc/iscsi/iscsid.conf. Тут надо заменить только три параметра:

node.session.auth.authmethod = CHAP
node.session.auth.username   = cube
node.session.auth.password   = cube

Делаем discovery всех target'ов и логинимся:

iscsiadm -m discovery -t sendtargets -p 192.168.0.1
iscsiadm -m node --login

Проверим:

[[email protected] ~]# iscsiadm -m session -o show 
tcp: [1] 192.168.0.1:3260,1 cube-oel-target:server.target1 (non-flash)

Если всё сделано правильно, у нас появятся 4 устройства /dev/sd*. Ими уже можно пользоваться, но мы пойдём дальше. Мы напишем правила для udev, чтобы для наших дисков генерировались удобные и постоянные имена в /dev/, а также чтобы им выравались правильные права доступа (ASM у меня работает под пользователем grid).

Готовим конфиг для утилиты scsi_id:

echo "options=-g" > /etc/scsi_id.config

И создаём правило для udev. Для этого в каталоге /etc/udev/rules.d создаём файлик 65-asm-devices.rules с таким содержимым:

KERNEL=="sd[a-z]", BUS=="scsi", PROGRAM=="scsi_id --page 0x83 -d /dev/%k", RESULT=="1IET*", NAME="asmdisk%c{2}", OWNER="grid", GROUP="oinstall", MODE="660"

Работает правило так. Udev ищет все устройства вида sd[a-z] на шине scsi. К каждому устройству применияет улилиту scsi_id с заданными параметрами. Она возвращает строку вида 1IET 00010001, где первая часть неизменна, а вторая однозначно идентифицирует iSCSI-устройство. Далее эта строка проверяется на содержание подстроки 1IET (это значит, что это именно iSCSI-устройство) и в случае совпадения новому устройству назначается имя asmdisk{вторая_часть_строки} и выставляется владелец grid:oinstall.

Рестартуем виртуалку и проверяем наличие дисков:

[[email protected] ~]# ls -lah /dev/asm*
brw-rw---- 1 grid oinstall 8, 32 Jan 22 16:00 /dev/asmdisk00010001
brw-rw---- 1 grid oinstall 8, 48 Jan 22 12:48 /dev/asmdisk00010002
brw-rw---- 1 grid oinstall 8, 64 Jan 22 12:48 /dev/asmdisk00010003
brw-rw---- 1 grid oinstall 8, 80 Jan 22 12:48 /dev/asmdisk00010004
[[email protected] ~]# lsscsi 
[1:0:0:0]    cd/dvd  VBOX     CD-ROM           1.0   /dev/sr0 
[2:0:1:0]    disk    VBOX     HARDDISK         1.0   /dev/sda 
[3:0:0:0]    disk    ATA      VBOX HARDDISK    1.0   /dev/sdb 
[4:0:0:0]    storage IET      Controller       0001  -       
[4:0:0:1]    disk    Cube     VIRTUAL-DISK     0001  /dev/asmdisk00010001
[4:0:0:2]    disk    Cube     VIRTUAL-DISK     0001  /dev/asmdisk00010002
[4:0:0:3]    disk    Cube     VIRTUAL-DISK     0001  /dev/asmdisk00010003
[4:0:0:4]    disk    Cube     VIRTUAL-DISK     0001  /dev/asmdisk00010004

Теперь можно ставить ASM и создавать дисковую группу.

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">

(обязательно)

(обязательно)