Метки
amd bittorrent bug centos debian enlightenment fedora fedora 8 fedora 9 fedora 10 fedora 11 fedora 12 fedora 13 fedora 15 fedora 16 FedoraMD fglrx firefox flash player gnome google intel interview java kde kernel linux livecd migrate moldova nvidia openoffice OpenStreetMap opera Orange ovirt radeon red hat rpmfusion Sandel skype video virtualisation vmware wine
настройка 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 сервере всё свелось к остановке служб, пишущих ни диск, отмонтировании старого раздела и примонтирования на его место нового.
Источники:
Метки: centos, fedora, LVM, storage
10, 2013 23:15
Закладка на будущее — не знаю когда пригодится. Видел название схожего проекта ATA over Ethernet.
11, 2013 0:20
в сторону AoE смотреть не стоит даже, как мне кажется. Либо iSCSI, либо FCoE.
Чисто для информации, поддержка iSCSI есть из коробки начиная с win2000 (1999 год) и в linux 2.6.12 (2005 год), то есть технология очень хорошо отработана.
11, 2013 16:48
Пригодится при сдаче экзамена RHCE ex300))
12, 2013 13:07
Главное чтоб в жизни пригодилось 😉
4, 2013 15:37
[…] какого-то времени использования iSCSI происходит закономерное: некоторые диски […]
29, 2014 18:40
Скажу себе спасибо что однажды не поленился этот пост написать. Неоднократно помог мне в работе 🙂
17, 2015 0:04
замечательная заметка, но вот не понятно когда создаем файловую ситему это мы делаем на target или initiator?
17, 2015 8:21
Блочное устройство подключается к initiator и после этого используется абсолютно так-же как локальное. То есть всё что касается партиций и файловых систем создаётся на initiator.
18, 2015 0:32
понял, ну я думаю не кто не мешает все тоже самое сделать на target