Настройка и подключение iSCSI-диска в Windows Server
Протокол iSCSI (Internet Small Computer System) представляет собой протокол SCSI, работающий с системами хранения данных поверх протокола IP. С помощью iSCSI вы сможете подключать ваши сервера к сетевым хранилищам по обычной TCP/IP сеть без использования FC. В этой статье мы рассмотрим, как настроить iSCSI-хранилище на одном Windows Server 2019 и использовать его на других серверах(в Windows Server 2016 и 2012 R2 все настраивается аналогично). Первый пример использования iSCSI: файловому серверу необходимо дополнительное место, и мы по сети подключаем к нему виртуальный диск с другого сервера-хранилища по iSCSI. Другой пример – построение отказоустойчивого кластера, когда для нескольких серверов необходимо общее хранилище.
Для использования ISCSI-диска нужно на сервере-хранилище настроить виртуальный диск (это обычный vhd/vhdx файл) и опубликовать его в виде iSCSI таргета, к которому подключаются iSCSI инициаторы (другие сервера и устройства).
Настройка iSCSI target в Windows Server
Сначала нужно включить iSCSI target (активировать роль iSCSI Target Server), зайдя в File and Storage Services -> File and iSCSI Services.
Install-WindowsFeature -Name FS-iSCSITarget-Server
Теперь на iSCSI сервере нужно создать виртуальный диск. Для этого необходимо зайти в Server Manager -> File and Storage Services -> iSCSI, нажать To create an iSCSI virtual disk, start the New iSCSI Virtual Disk Wizard.
В мастере создания виртуального iSCSI диска нужно выбрать физический раздел, на котором его нужно разместить. Далее нужно присвоить имя iSCSI диска, указать размер диска и его тип (Fixed Size, Dynamically expanding или Differencing), имя iSCSI таргета.
На шаге Access Servers нужно указать серверы (iSCSI инициаторы), которые смогут подключаться к данному iSCSI таргет, выбрав один из вариантов подключения:
- IQN (придется сначала включить iSCSI initiator на сервере и скопировать IQN);
- DNS Name
- IP Address;
- MAC Address.
Пусть используется вариант с IP-адресом.
Следующий шаг в этом мастере – это настройка протокола аутентификации CHAP. Его следует использовать, если необходимо проверять подлинность подключения от инициатора. Далее он включается, вписывается имя пользователя и 12-значный пароль (или длиннее), затем Next -> Next -> Finish. Проверьте, что виртуальный диск iscsiDisk2.vhdx создался в каталоге D:\iSCSIVirtualDisks.
Можно создать iSCSI диск с помощью PowerShell. Создадим виртуальный диск размером 200 Гб:
New-IscsiVirtualDisk -Path С:\iSCSIVirtualDisks\iscsiDisk2.vhdx -Size 200GB.
По умолчанию создается динамический диск размером 4,096 Кб, независимо от того, сколько было указано параметром Size. Динамический диск будет расширяться по мере необходимости.
Если нужно использовать диск фиксированного размера (такие диске резервируют место на физическом носителе при создании), то его создать той же командой с дополнительным параметром UseFixed:
New-IscsiVirtualDisk -Path С:\iSCSIVirtualDisks\iscsiDisk2.vhdx -Size 200GB –UseFixed
Далее таргету присваивается имя, здесь же можно разрешить к нему доступ с IP-адреса сервера-инициатора:
New-IscsiServerTarget -TargetName «iscsiTarget33» -InitiatorId @(«IPAddress:172.17.244.8»)
При желании вместо IP-адреса можно использовать IQN имя (iSCSI Qualified Name – уникальный идентификатор iSCSI устройства в сети):
New-IscsiServerTarget -TargetName iscsiTarget33 -InitiatorIds “IQN: 1991-05.com.microsoft:win2019test.ddd.com”
Затем желательно проверить результат:
Get-IscsiServerTarget | fl TargetName, LunMappings
Получить полное имя таргета можно с помощью командлета Get-IscsiTarget , а затем подключить таргет:
Connect-IscsiTarget -NodeAddress iqn.1991-05.com.microsoft:win2019test-iscsitarget33-target
Настройка iSCSI Initiator в Windows Server 2019
Следующий шаг – подключение к созданному iSCSI диску со второго сервера-инициатора. Перейдите в панель управления Control Panel, запустите iSCSI initiator (или выполните команду iscsicpl.exe ).
В консоли управления службами services.msc поставьте автоматический тип запуска для службы Microsoft iSCSI Initiator Service, Или используйте команду:
Set-Service -Name MSiSCSI -StartupType Automatic
Перейдите на вкладку Discovery, нажмите на кнопку Discover Portal и введите ввести IP-адрес первого сервера (iSCSI-таргет). Чтобы трафик ходил только через определённый сетевой интерфейс, нужно нажать кнопку Advanced, и изменить значения по умолчанию в выпадающих списках: Local Adapter –> Microsoft iSCSI Initiator, Initiator IP –> 172.17.244.8.
Теперь переключитесь на первую вкладку Targets, на ней появится новое подключение. Чтобы включить его, нажмите Connect -> Advanced, выберите значения из выпадающих полей, включите галочку Enable CHAP log on, укажите имя пользователя и 12-значный пароль.
Осталось инициализировать сам iSCSI-диск, который сначала находится в состоянии Offline. Для этого на сервере-инициаторе необходимо в консоли Disk Management в контекстном меню нового диска выбрать пункт Online, а затем – Initialize Disk. Создайте на новом диске один или несколько разделов, присвойте метку и букву диска. Отформатируйте в файловой системе NTFS.
Для быстрой инициализации и форматирования нового диска можно использовать следующий однострочный PowerShell (см. пример в статье об управления дисками и разделами из PowerShell):
Get-Disk |Where-Object PartitionStyle -eq ‘RAW’ |Initialize-Disk -PartitionStyle MBR -PassThru |New-Partition -AssignDriveLetter -UseMaximumSize |Format-Volume -FileSystem NTFS -Confirm:$false
Теперь этот виртуальный диск, подключенный с другого сервера по протоколу iSCSI можно использовать как обычный локально подключенный диск.
Также вы можете подключить iSCSI диск на инициаторе из PowerShell. Чтобы получить IQN таргета, используйте командлет Get-iSCSITarget .
Чтобы подключится к iSCSI таргет выполните команду:
Connect-IscsiTarget –IsPersistent $False и введите IQN.
Если использовалась дополнительная проверка аутентификации CHAP, то необходимо будет это указать, используя следующую конструкцию:
Get-iScsiTarget | Connect-iScsitarget –AuthenticationType ONEWAYCHAP –ChapUserName -ChapSecret
Если вы хотите обеспечить высокую доступность и балансировку нагрузки для iSCSI дисков, можно использовать несколько избыточные сетевые компоненты (сетевые карты, коммутаторы) и модуль MPIO.
iSCSI хранилище для небогатых
Доброго времени суток, уважаемое сообщество!
В этой статье я хотел бы поделится опытом создания дискового хранилища, который вылился во множество экспериментов, проб, ошибок, находок, приправленных горькими разочарованиями. И, наконец, завершился в неком интересном, относительно бюджетном и быстром хранилище.
Если у вас есть подобная задача или вас просто заинтересовал заголовок, то добро пожаловать под хабракат.
Пролог
Итак, недавно перед нашим отделом встала задача обеспечить кластер из гипервизоров VMware ESXi 5.1 хранилищем большого обьема. На нем же мы запланировали расположить шифрованный maildir для dovecot и “облачное” файловое хранилище. Обязательным условием выделения бюджета было обеспечение места для хранения критически важной для компании информации, причем этот раздел должен быть зашифрован.
Железо
К сожалению, а может и к счастью, под такие амбициозные задачи большим бюджетом нас не обременили. Поэтому позволить себе какое-либо брендовое хранилище мы, как настоящие поклонники максимализма, не могли, и в рамках выделенных материальных ресурсов выбрали следующее железо:
- Серверный корпус Supermicro CSE-836BE16-R920B
Тут было много рассуждений, выбирали количество юнитов, размер жестких дисков, их скорость, корпус или сразу платформа, пересмотрели множество вариантов, покурили интернетов и в итоге остановились на этом варианте, как на оптимальном под наши задачи. - Материнская плата Supermicro MBD-X9DRI-F-O
Главным условием было наличие 4 портов PCI-E x8. - Процессоры Intel Xeon E5-2603
Выбор был прост — на что хватило денег. Вдобавок пришлось ставить 2 процессора сразу, а не сначала один, потом, если надо будет, то докупить, ибо с одним занятым слотом работает только 3 PCI-E, а нам надо было 4. - Диски Seagate Constellation ES.3 ST3000NM0033
SATA потому что дешевле, и в те же деньги мы получали многократно большее количество свободного места, нежели при использовании SAS. - RAID контроллер Adaptec ASR-7805Q
Раз уж это СХД, то с контроллером мелочиться не стали. У этой серии есть SSD кэширование, которое очень бы нам пригодилось, и есть BBU сразу в комплекте, что тоже весьма полезная опция. - SSD диски Intel SSDSC2CW240A310
Они нужны были исключительно для того, чтобы работал MaxCache (он же SSD кэш). - Сетевые карты Intel X520 DA2
Чтобы избежать узкого места на сетевых интерфейсах, надо было обеспечить 10Gb линк между нодами ESXi и СХД. После изучения предложений рынка мы пришли может и к не самому элегантному, но зато к подходящему по цене и скорости варианту с использованием 10 гигабитных сетевых карт.
Все это обошлось нам примерно в 200 тысяч рублей.
Реализация
Выдавать таргеты, то бишь выделять ресурсы СХД потребителям, мы решили при помощи iSCSI и NFS. Наиболее разумным и быстрым решением, конечно, было бы использовать FCoE, чтобы не влезать в TCP с соответствующими ему накладными расходами, что, в общем-то можно было бы сделать с нашими сетевыми картами, но, к сожалению, у нас нет SFP свитча с поддержкой FCoE, купить его не было возможности, так как это стоило бы нам 500 т.р. сверху.
Еще раз покурив интернеты, нашли выход из этого в технологии vn2vn, но ESXi научится работать с vn2vn только к 6.x версии, поэтому, не думая дальше, приступили к тому, что есть.
Наш корпоративный стандарт для Linux серверов — CentOS, но в текущем ядре (2.6.32-358) шифрование работает очень медленно, поэтому пришлось использовать в качестве ОС Fedora. Конечно это полигон Red Hat, но в последних ядрах Linux данные шифруются практически “на лету”, а остальное нам, вроде бы, и не нужно.
К тому же текущая 19 версия будет использована как основа для RHEL 7, а следовательно позволит нам в будущем безболезненно перейти на CentOS 7.
Таргеты
Дабы не раздувать статью и не отдаляться от темы я опускаю все неинтересное типа сборки железа, бодания с контроллером, установки ОС и прочего. Также постараюсь как можно меньше описывать сам таргет и ограничиться только его работой с инициатором ESXi.
От таргета мы хотели получить следующее:
- правильно работающее кеширование — диски довольно медленные, выжать из себя они могут только 2000 iops;
- максимально высокую скорость работы непосредственно дисковой подсистемы в целом, читай (даешь как можно больше iops).
Встречайте, вот они.
linux-iscsi.org
С Linux ядром 3.10.10 он показал мне 300 МБ/сек записи и 600 МБ/сек чтения в режиме blockio. Эти же цифры он показал с fileio и также с RAM диском. На графиках было видно, что скорость записи очень сильно скачет, вероятно это вызвано тем, что инициатор ESXi требует синхронизации записи. По этой же причине количество IOPS на запись было одинаково с fileio и blockio.
В меиллистах реккомендовали отключить emulate_fua_write, но к каким-либо измениям это не привело. Причем с ядром 3.9.5 он показывает лучшие результаты, что тоже заставляет задуматься о его будущем.
LIO, судя по описанию, умеет еще много чего, но большинство фич доступно только в коммерческой версии. Сайт, который, по моему мнению должен быть в первую очередь источником информации, пестрит рекламными объявлениями, что вызывает негатив. В итоге решили отказаться.
istgt
www.peach.ne.jp/archives/istgt
Используется в FreeBSD.
Таргет работает достаточно хорошо, за исключением нескольких но.
Во-первых, он не умеет blockio, во-вторых, не может использовать разные MaxRec и MaxXtran, по крайней мере мне этого не удалось. При небольших значениях MaxRec скорость последовательной записи не превышала 250 МБ/сек, а чтения была на вполне высоком уровне — 700 МБ/сек. Примерно по 40K иопсов я получил при рандомной записи 4к с глубиной очереди 32. При увеличении MaxRec скорость записи повышается до 700 МБ/сек, чтение падает до 600 МБ/сек. Иопсы падают до на чтение 30К и 20К на запись.
То есть как-то можно было бы найти золотую середину, меняя настройки, но как-то это показалось не трувей.
stgt.sourceforge.net
С этим таргетом возникли проблемы с настройкой интерфейса с гипервизором. ESXi постоянно путал LUN — принимал одни за другие, либо переставал видеть совсем. Было подозрение на проблему в некорректной привязке серийных номеров, но прописывание их в конфигах не помогло.
Скорость также не порадовала. Добится от него больше 500 МБ/сек ни на чтение, ни на запись не удалось. Количество IOPS на чтение — 20К, на запись примерно 15К.
В итоге — проблемы с конфигом и невысокие показатели в скорости. Отказать.
iscsitarget.sourceforge.net
Работал практически безукоризненно. Чтение и запись 700МБ/сек. IOPS на чтение порядка 30K, на запись 2000.
Инициатор ESXi заставлял таргет записывать данные на диск сразу же, без использования кеша системы. Также несколько напугали отзывы о нем в maillists — многие докладывали о нестабильной работе под нагрузкой.
scst.sourceforge.net
И наконец добрались до лидера нашей гонки.
После пересборки ядра и минимальной настройки самого таргета мы получили 750МБ/сек чтения и 950МБ/сек записи. IOPS в режиме fileio — 44K на чтение и 37K на запись. Сразу, почти без бубна.
Этот таргет показался мне идеальным выбором.
iSCSI для VMWare ESXi 5.1 на SCST и Fedora
И теперь, собственно, то, ради чего мы все тут собрались.
Небольшая инструкция по настройке таргета и инициатора ESXi. Я не сразу решил попробовать написать статью на Хабр, поэтому инструкция будет не пошаговой — восстанавливаю по памяти, но в ней будут основные моменты настройки, которые позволили добиться нужных результатов.
Подготовка ESXi 5.1
InitialR2T=No
ImmediateData=Yes
MaxConnections=1
MaxRecvDataSegmentLength=1048576
MaxBurstLength=1048576
FirstBurstLength=65536
DefaultTime2Wait=0
DefaultTime2Retain=0
MaxOutstandingR2T=32
DataPDUInOrder=No
DataSequenceInOrder=No
ErrorRecoveryLevel=0
HeaderDigest=None
DataDigest=None
OFMarker=No
IFMarker=No
OFMarkInt=Reject
IFMarkInt=Reject
Потребуется отключить Interrupt Moderation и LRO для сетевых адаптеров. Сделать это можно командами:
Для того чтобы повторно не устанавливать эти значения, их можно добавить в этот скрипт:
Подготовка Fedora
Скачиваем и устанавливаем в минимальном варианте последнюю версию Fedora.
Обновим систему и перезагрузимся:
Система будет работать только в локальной сети, поэтому я отключил файервол и SELinux:
Настроим сетевые интерфейсы и отключим сервис NetworkManager.service. Он не совместим с BRIDGE интерфейсами, а это было необходимо для NFS.
На сетевых картах отключено LRO.
По рекомендациям от Intel измененны следующие параметры системы:
Подготовка таргета
Для использования SCST рекомендуется добавить патчи в ядро. Это необязательно, но с ними производительность выше.
Во время создания хранилища последняя версия ядра была — 3.10.10-200. К моменту когда вы будете читать статью ядро уже может обновиться, но не думаю, что это сильно повлияет на процесс.
Создание rpm пакета с измененным ядром подробно описанно тут:
fedoraproject.org/wiki/Building_a_custom_kernel/ru
Но для того, чтобы не возникло трудностей опишу подготовку подробно.
Перейдем в его среду:
Установим пакеты для сборки и подготовим исходники ядра:
Теперь потребуются сами патчи. Скачаем SCST из svn репозитория:
Скопируем необходимые пачти в
Добавляем строчку в конфиг ядра:
Приступим к редактированию kernel.spec.
Добавляем наши патчи, желательно после всех остальных:
Добавляем команду применения патча, рекомендовано добавить после остальных записей:
После всех действий запускаем сборку rpm пакетов ядра с включенными файлами firmware:
После завершения сборки устанавливаем ядро firmware и заголовочные файлы ядра:
После успешной, надеюсь, загрузки перейдите в каталог с исходниками SCST и уже пользователем root соберите сам таргет:
После сборки добавьте сервис в автозапуск:
И настройте конфиг в /etc/scst.conf. К примеру мой:
Создайте файлы, разрешающие или запрещающие подключения к таргетам с определенных адресов, если вам это необходимо:
После настройки файлов конфигураци запустите SCST:
Если все было сделано правильно, то в ESXi появится соответствующий таргет.












