В записке будет рассказано про установку и базовую настройку iSCSI LIO таргета на CentOS 7. Начиная с версии CentOS 6.2 он стал доступен в системе по умолчанию. Он нужен для организации СХД - системы хранения данных.
Что дает установка LIO Target:
- это доступ по протоколу iSCSI до хранилище данных
- популярность такого решения
- предоставление блочного устройства по протоколу iSCSI
- простая установка и настройка Target'a
Простыми словами о хранилище данных iSCSI: Все знают что у каждого компьютера должен быть жесткий диск, допустим есть компьютер [Таргет] который имеет 10 Тбайтовый диск. Помимо компьютера с 10 Тбайтным жестким диском, в локальной сети также есть другой компьютер [Инициатор], с диском маленького объема - 80 Гбайт, на котором стоит только операционная система.
И вот, в один прекрасный день, понадобилось, чтобы на компьютере [Инициаторе] с 80 Гбайтовым жестким диском, размешались общие папки с данными сотрудников. Понятно что винчестер с малым объемом, не сможет содержать столь большие данные. Чтобы не добавлять дополнительный жесткий диск для общих папок к этому ПК, у нас с технологией iSCSI, появляется возможность использования места, из большого 10 Тбайтного жесткого диска другого компьютера (таргета) локальной сети, так как будто на компьютере с 80 Гбайтным HDD появился новый жесткий диск/раздел (lun) большого объема. Через iSCSI (протокол) можно легко получать по сети доступ к дисковому пространству другого компьютера (сервера). Таким образом получается, что компьютер с мизерным объемом винчестера, может выступать в качестве сервера для общих папок, не имея физически подключенного жесткого диска достаточного объема, при этом, используя требуемое место в виде раздела по сети, с сервера (таргета) который обладает необходимым дисковым пространством.
Обычно под Таргетом понимается сервер с аппаратным рейд контроллером и быстрыми жесткими или твердотельными дисками. В добавок у такой машины должны быть быстрые сетевые адаптеры 10Гбит и выше.
А под Инициатором подразумевается любой сервер которому требуется дисковое место, это может быть например почтовый сервер, сервер виртуализации, веб сервер и т.д.
Для повышения отказоустойчивости, обычно, в компаниях настраивают два хранилище данных iSCSI вместо одного. Потому что, одно хранилище может в любой момент дать сбой, и работа всех сервисов прекратится. При использовании двух серверов для хранения данных, такой проблемы можно избежать. Такая связка использует синхронизацию данных в реальном времени между двумя СХД.
И конечно же, помимо двух СХД для повышения отказоустойчивости, вам потребуется стекируемые свичи, несколько сетевых карт (multipath), настройка фэнсинга и т.д.
Основные понятия:
1. Таргет - это хранилище данных из которого берется дисковое место
2. Инициатор - это тот кто использует место которое предоставляет Таргет
3. Lun - это раздел который предоставляется Таргетом для Инициатора, чтобы последний писал и считывал данные с него.
- Сервер 1 - 10.0.100.2 / CentOS / Target
- Сервер 2 - 10.0.100.1 / Windows / Iniciator
Примечание: На картинке два сервера, первый с лева - это машина с гипервизором KVM на ОС Linux CentOS, вторая машина с права - это хранилище данных на ОС CentOS, где установлен ISCSI LIO Target.
Я покажу пример когда будет использован SCSI LIO Target на CentOS в связке с инициатором на ОС Windows. По сути нет никакой разницы в плане разности ОС, будь хоть Linux или Windows. Все современные операционные системы поддерживают протокол iSCSI, так как это промышленный стандарт.
Краткое содержание записки
1. Установка targetcli
2. Настройка iSCSI target
2.1. Очищаем конфигурацию
2.2. Создание хранилище данных
2.3. Отключаем авторизацию
2.4. Создаем wwn
2.5. Создаем Lun
2.6. Создаем acl
2.7. Создаем portal
2.8. Сохраняем настройки в конфигурационный файл
2.9. Ставим в автозагрузку targetcli
3. Настраиваем инициатор
3.1. Запускаем встроенный инициатор на Windows 2008
Начнем с самого главного - настроим iSCSI Target на операционной системе CentOS 7. После чего, приступим к настройке инициатора на системе с Windows Server 2008.
1. Установка и запуск targetcli
Я буду делать все операции из под учетной записи Администратора - root.
Начнем сразу с установки LIO:
# yum install targetcli -y
# PYTHONPATH=../scripts/targetcli
# systemctl enable target
# systemctl start target
--------------------------------------
Отключение selinux и firewalld
--------------------------------------
До начала тестирования, предварительно были отключены selinux и firewalld.
selinux:
# vi /etc/selinux/config
SELINUX=disabled
# setenforce 0
firewalld:
# systemctl disable firewalld
# systemctl stop firewalld
# systemctl status firewalld | grep Active
Active: inactive (dead)
Если настраиваете Firewall, то откройте порт 3260.
2. Настройка iSCSI target
Здесь будет описана настройка подчиненного устройства - цели. Подчиненное устройство будет отдавать место инициатору.
Я буду использовать свободный жесткий диск установленный дополнительно в системе. Его объем всего 80 Гбайт, в CentOS ссылка на него хранится как - /dev/sdb. За место жесткого диска можно использовать RAM диск, LVM раздел, монтированный файл или PSCSI.
2.1. Очищаем конфигурацию
# targetcli clearconfig confirm=true
2.2. Создание хранилище данных
Для примера, будет отдан целый жесткий диск.
Смотрим какие диски есть в системе:
# fdisk -l | grep sd
Disk /dev/sda: 8589 MB, 8589934592 bytes, 16777216 sectors
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 16777215 7875584 8e Linux LVM
Disk /dev/sdb: 87.0 GB, 86976561152 bytes, 169876096 sectors
Видим что есть наш диск /dev/sdb. Его и будем использовать для примера.
# targetcli
> cd /backstores/block
> create hdd_block1 /dev/sdb
Created block storage object hdd_block1 using /dev/sdb.
Проверяем, вводим:
> ls /
/> ls /
o- / ..................................................................... [...]
o- backstores .......................................................... [...]
| o- block .............................................. [Storage Objects: 1]
| | o- hdd_block1 ................ [/dev/sdb (81.0GiB) write-thru deactivated]
| o- fileio ............................................. [Storage Objects: 0]
| o- pscsi .............................................. [Storage Objects: 0]
| o- ramdisk ............................................ [Storage Objects: 0]
o- iscsi ........................................................ [Targets: 0]
| o- tpg1 ........................................... [no-gen-acls, no-auth]
| o- acls ...................................................... [ACLs: 0]
| o- luns ...................................................... [LUNs: 0]
| o- portals ................................................ [Portals: 0]
o- loopback ..................................................... [Targets: 0]
/>
Видим что появился наш жесткий диск sdb.
Здесь в примере отдан целый жесткий диск, чтобы отдать раздел или файл, сделайте например так:
> cd /backstores/fileio/
> create shareddata /opt/shareddata.img 100M
Или если LVM раздел:
> cd backstores/block/
> create block1 /dev/vg/lv_iscsi
2.3. Отключаем авторизацию
# targetcli
/> cd /iscsi
/iscsi> set discovery_auth enable=0
Parameter enable is now 'False'.
Вообще, в реальной сети, лучше включите авторизацию. Это поможет дать доступ к LUN только определенному гипервизору. Аутентификация происходит по протоколу CHAP. При настройке такого доступа, вы будете задавать логин/пароль.
2.4. Создаем wwn
wwn - это уникальный идентификатор, который определяет конкретное целевое устройство (таргет).
# targetcli
/> cd /iscsi
/iscsi> create
Created target iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.5b94cfd9bd9a.
Created TPG 1.
/iscsi> ls
o- iscsi .......................................................... [Targets: 1]
o- iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.5b94cfd9bd9a ..... [TPGs: 1]
o- tpg1 ............................................. [no-gen-acls, no-auth]
o- acls ........................................................ [ACLs: 0]
o- luns ........................................................ [LUNs: 0]
o- portals .................................................. [Portals: 0]
/iscsi>
Примечание: Обычно его обзывают ставя текущею дату, имя компании и в конце указывают номер таргета или хост, вот пример - iqn.год-месяц.com.название компании:t1
2.5. Создаем Lun
Lun - это адрес диска (в ранних версиях) или дискового устройства в сетях хранения (современное использование).
# targetcli
/> cd /iscsi
/iscsi> cd iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.5b94cfd9bd9a/
/iscsi/iqn.20....5b94cfd9bd9a> cd tpg1/luns
/iscsi/iqn.20...d9a/tpg1/luns> create /backstores/block/hdd_block1
Created LUN 0.
Все, мы создали первый LUN.
Примечание: При наборе команд можно использовать клавишу TAB, это облегчает работу.
2.6. Создаем acl
# targetcli
/> cd /iscsi
/iscsi> cd iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.5b94cfd9bd9a/
/iscsi/iqn.20...d9a> cd tpg1
/iscsi/iqn.20...d9a/tpg1> cd acls
/iscsi/iqn.20...d9a/tpg1/acls> create iqn.1991-05.com.microsoft:node01
Created Node ACL for iqn.1991-05.com.microsoft:node01
Created mapped LUN 0.
Здесь node01 - это имя хоста которому будет даваться доступ к LUN. Авторизация будет идти через ввод строчки - iqn.1991-05.com.microsoft:node01, это типа логин. За место node1, можно ввести "node1.company.local".
Я продемонстрирую в конце записки доступ из Windows 2008 к созданному LUN.
2.7. Создаем portal
# targetcli
/> cd /iscsi
/iscsi> cd iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.5b94cfd9bd9a/
/iscsi/iqn.20....5b94cfd9bd9a> cd tpg1/portals
/iscsi/iqn.20.../tpg1/portals> create
Using default IP port 3260
Binding to INADDR_ANY (0.0.0.0)
Created network portal 0.0.0.0:3260.
Примечание: TPG - расшифровывается как Target Portal Group (Целевая группа портал)
2.8. Сохраняем настройки в конфигурационный файл
/iscsi/iqn.20.../tpg1/portals> cd /
/> saveconfig
Last 10 configs saved in /etc/target/backup.
Configuration saved to /etc/target/saveconfig.json
/> exit
3. Настраиваем инициатор
В этом разделе запустим инициатор, настроим доступ к LUN которая расположена на CentOS 7.
Операционные системы Windows начиная с версии 7 и 2008 Server имеют встроенный инициатор iSCSI.
Поэтому чтобы настроить доступ к хранилище данных не надо ставить дополнительного ПО.
3.1. Запускаем встроенный инициатор на Windows 2008
Мы прописали в CentOS что доступ к LUN имеет хост - node01, на котором у нас установлена Windows.
Имя хоста можно настроить через свойства "Мой компьютер" -> далее во вкладке "Имя компьютера" нажать кнопку изменить и там задать имя хоста.
Или можно просто ввести строку подключения (iqn.1991-05.com.microsoft:node01) в инициаторе, что на самом деле выглядит правильнее, для этого надо запустить iSCSI Initiator, далее зайти на вкладку Configuration, нажать кнопку - "Change".
Вводим строку авторизации - iqn.1991-05.com.microsoft:node01:
Идем во вкладку - Targets:
Вводим IP адрес машины CentOS7 и нажимаем кнопку - Quick Connect.
Здесь нажимаем - Done.
Все - теперь у нас в системе появился жесткий диск с размером в 80 Гбайт.
Его надо отформатировать и использовать.
Если у вас глюк, и diskmgmt.msc пишет что диск оффлайн - "the disk is offline because of policy set by an administrator", проделайте следующее:
Введите в командной строке последовательно:
c:\> diskpart.exe
DISKPART> san policy=OnlineAll
DISKPART> list disk
* Disk 1 Offline 80 Gb
DISKPART> select disk 1
DISKPART> ATTRIBUTES DISK CLEAR READONLY
DISKPART> ONLINE DISK
DiskPart successfully onlined the selected disk.
Запустим diskmgmt.msc, чтобы посмотреть какие диски есть:
Видим диск Disk1 с объемом в 81GB, его мы получили от CentOS через локальную сеть.
После этих операций, можно работать с диском от CentOS как обычно :)
Полезные ссылки:
1. http://www.mail-archive.com/devel@open-fcoe.org/msg03299.html
2. http://docs.fedoraproject.org/en-US/Fedora/14/html/Storage_Administration_Guide/fcoeconfig.html
4. http://habrahabr.ru/company/netapp/blog/102059/
5. http://habrahabr.ru/post/97529/
6. http://habrahabr.ru/post/200466/
7. https://wiki.rvijay.in/index.php/Configuring_iSCSI_target_using_'targetcli'
8. http://www.hansneervoort.nl/projects/iSCSI/
9. https://wiki.archlinux.org/index.php/ISCSI_Target#Set_Credentials
10. http://www.certdepot.net/rhel7-configure-iscsi-target-initiator-persistently/
11. http://linux-iscsi.org/builds/docs/LIO-3.0-Users_Reference_Manual.pdf