настройка iSCSI (target и initiator)

    2013-01-03 23:51 | Автор: jekader | Filed under: Jekader

    Вступление:

    Иногда случаются случаи, когда есть два устройства: одно обладает большим хардом, но слабейшим железом (см. Прошый пост про LVM), и другое, у которого мощное железо, но маленькие диски. Всё это, естественно, соединено гигабитной сеткой. Что делать? Конечно-же шарить большие диски по сети!

    Изначально для этого был использован знакомый NFS, но он показал крайне плохие показатели по скорости записи (iowait всегда зашкаливал, на хранилище нормально был load average 4 и выше)

    Терпел всё это пока не довелось внедрить на другом сервере iSCSI. Был положительно удивлён скоростью, после чего оперативно заглушил NFS и поднял iSCSI на хранилище. Этим процессом и поделюсь.

    Сам по себе iSCSI - это протокол передачи команд SCSI по IP сетям, то есть в отличии от NFS клиентская машина (initiator) оперирует не с файлами на сервере (target) а с блочным устройством.
    Плюсы такого решения по сравнению с NFS:

    • значительно более быстрая запись (измерено штангенциркулем тут)
    • ниже загрузка CPU, особенно на target машине
    • поддерживается большинством серверных операционных систем

    Минусы:

    • сложнее расшарить один диск на несколько серверов (либо только на чтение, либо при помощи cLVM, как сделали в ProxMox VE)

    Мне-же нужно было шарить всего с одним хостом, так что плюсы перевесили.

    Настройка iSCSI target:

    ставим пакеты:
    redhat: yum install scsi-target-utils
    debian: apt-get install tgt

    Теперь решаем, что будем шарить. Самое удобное - пользоваться виртуальным томом LVM - я взял описанный в прошлой статье. Убеждаемся что этот раздел отмонтирован.

    Правим конфиг:
    vi /etc/tgt/targets.conf
    Там в конце прописываем следующее:
    #после слова target - название нашей шары, составляется как (iqn.<год>-<месяц>.<наш домен в обратном порядке>:<название шары>)
    <target iqn.2011-07.world.server:target0>
    # том, который будем шарить, может быть и файлом на диске
    backing-store /dev/mapper/stripe_group-data_array
    # IP клиента, которому будет видна шара (если не ставим ничего, будет видно всем желающим - крайне рисковано!)
    initiator-address 10.0.0.31
    # пользователь и пароль, тоже не обязательно
    incominguser username password
    </target>

    Запускаем адскую шарманку!
    (в debian нету этого init скрипта, предлагается его нагуглить самостоятельно)
    /etc/init.d/tgtd start
    проверяем работу:
    tgtadm --mode target --op show
    должны увидеть два экспорта - первый (LUN 0) создаётся системой, второй (LUN 1) - то, что мы только что настроили
    если так и есть - всё отлично! Проверяем чтоб был открыт порт 3260 в iptables и переходим на клиентскую сторону.
    Также если тестируем с файлом а не LVM, нужно убедиться что для файла прописан selinux контекст (или пихаем его в /var/lib/tgtd/ где контексты существуют)
    Включаем наш сервис по умолчанию:
    redhat: chkconfig tgtd on
    debian: update-rc.d tgtd defaults

    Настройка iSCSI initiator:

    тут всё не более сложно. Для начала проверяем что мы можем достучаться до target'a - если telnet на порт 3260 ничего не даёт - устраняем ограничение в сети.
    Теперь ставим софт
    redhat: yum install iscsi-initiator-utils
    debian: apt-get install open-iscsi

    Если на сервере настроена аутентификация, правим конфиг:
    vi /etc/iscsi/iscsid.conf
    # раскоментируем
    node.session.auth.authmethod = CHAP
    # проставляем пользователя и пароль
    node.session.auth.username = username
    node.session.auth.password = password

    теперь сканируем наш target сервер для обнаружения доступных дисков:
    iscsiadm -m discovery -t sendtargets -p 10.0.0.30
    должны увидеть:

    Starting iscsid: Loading iSCSI transport class v2.0-870.
    [ OK ]
    10.0.0.30:3260,1 iqn.2011-07.world.server:target0

    отлично, наша шара определилась! Подключаемся к ней:
    iscsiadm -m node --login
    Видим:

    Logging in to [iface: default, target: iqn.2011-07.world.server:target0, portal: 10.0.0.30,3260]
    Login to [iface: default, target: iqn.2011-07.world.server:target0, portal: 10.0.0.30,3260] successful.

    Готово. Теперь у нас в системе появилось новое блочное устройство!
    Проверим:
    cat /proc/partitions
    Видим новый диск /dev/sdb

    major minor #blocks name
    8 0 31457280 sda
    8 1 512000 sda1
    8 2 30944256 sda2
    8 16 104857600 sdb

    Включаем службу по умолчанию
    кedhat: chkconfig iscsid on
    debian: прописываем node.startup = automatic в /etc/iscsi/iscsid.conf

    Теперь делаем с новым диском то-же что и с обычным (создаём таблицу разделов, сами разделы с любыми файловыми системами, монтируем их)
    Краткий пример, перед использованием читать man fdisk!
    fdisk /dev/sdb
    n
    p
    1
    enter
    enter
    w
    (это создаст партицию в 100% от размера устройства)
    mkfs.ext4 /dev/sdb1
    mkdir /mnt/iscsi
    mount /dev/sdb1 /mnt/iscsi

    В fstab нужно приписывать опцию _netdev чтобы раздел не монтировался раньше, чем появится сеть.
    /dev/sdb1 /mnt/iscsi ext4 _netdev 0 0

    В моём случае всё было ещё проще: на томе /dev/mapper/stripe_group-data_array со стороны target уже была файловая система ext4, так что я сразу её смонтировал без потери либо переноса данных! То есть на initiator сервере всё свелось к остановке служб, пишущих ни диск, отмонтировании старого раздела и примонтирования на его место нового.

    Источники:

    раз
    два
    три

    1 Star2 Stars3 Stars4 Stars5 Stars (2 votes, average: 5,00 out of 5)
    Loading...

    Метки: , , ,

    9 комментариев »


    комментариев 9

    1. Vasile Chelban:

      Закладка на будущее — не знаю когда пригодится. Видел название схожего проекта ATA over Ethernet.

    2. jekader:

      в сторону AoE смотреть не стоит даже, как мне кажется. Либо iSCSI, либо FCoE.

      Чисто для информации, поддержка iSCSI есть из коробки начиная с win2000 (1999 год) и в linux 2.6.12 (2005 год), то есть технология очень хорошо отработана.

    3. Stanislav:

      Пригодится при сдаче экзамена RHCE ex300))

    4. jekader:

      Главное чтоб в жизни пригодилось 😉

    5. iSCSI – когда становится тесно | Fedora.md:

      […] какого-то времени использования iSCSI происходит закономерное: некоторые диски […]

    6. jekader:

      Скажу себе спасибо что однажды не поленился этот пост написать. Неоднократно помог мне в работе 🙂

    7. gorynych:

      замечательная заметка, но вот не понятно когда создаем файловую ситему это мы делаем на target или initiator?

    8. jekader:

      Блочное устройство подключается к initiator и после этого используется абсолютно так-же как локальное. То есть всё что касается партиций и файловых систем создаётся на initiator.

    9. gorynych:

      понял, ну я думаю не кто не мешает все тоже самое сделать на target

    Leave a comment

    *