У меня такой вопрос. Реально использовать iSCSI на 1GigE для использования как хранилища для виртуальных машин, или обязательно иметь 10GigE или FC? Я понимаю, что все зависит от задачи, которые выполняют виртуалки, но все же, есть ли запас прочности у iSCSI на 1GbitE?
Кстати, в случае с iscsi лучше не городить лишнего, а сделать просто multipath через два обычных гигабитных линка. И надёжнее, и проще, и линейно масштабируется (не хватает? две сетевухи по 2 головы на гигабит дадут аж 4 гигабита...)
Мои наблюдения показывают, что реальная нагрузка редко упирается в сеть. Два гигабитных линка с правильным multipath (то есть в режиме round-robin) обычно покрывают все потребности.
Потому что multipath честнее, правила у него понятнее, да и в стек устройств оно вписывается лучше. «Не важно, как оно тут очутилось, если диски одинаковые — можно объединять». В частности, можно подключать/удалять на ходу линки (и multipathd их найдёт и включит в path-group), можно определять правила failover'а и возврата на него, тип балансировки и т.д.
Среди всего околодискового, с чем я работал, только multipathd/dm_multipath ни разу не вызвали у меня ощущения «тут кривовато». Идеальная работа, идеальная надёжность (по-крайней мере, IET я ронял, drbd я ронял, nfs я ронял, а вот dm_multipath ни разу не падал, не смотря на самые изощрённые издевательства).
А кто-нибудь shared sas использовал? Типа Dell MD3200, который с двумя контроллерами и двумя БП стоит около $7000, плюс подключение проще — не нужно свитчей, только HBA-адаптеры. Правда, не масштабируется (ограниченно 4 серверами, далее нужны те самые SAS-коммутаторы).
Зачем? Надёжность при этом не сильно возрастает (если уж заниматься резервированием, то сразу же делать кластер), два БП — стандартно для серверов. А необходимость делать свою проводную инфраструктуру (то есть запрет на использование обычной 5E/оптики) — плохо.
В маленьких инфраструктурах может быть 2-3 сервера и требования к надежности. Если поставить shared storage, а операционные системы — на гипервизор, то можно использовать live migration/high availability.
Если клиент Windows или Linux, то работает пристойно даже на 100MBit/s. Если же клиент VMware со своим VMFS, то даже на 1GBit/s будет медленно. Дело в том, что VMFS не использует кэш ни на чтение, ни на запись by design, и, как результат, тайминги сетевого доступа вносят большие задержки. При использовании Openfiler проблему отчасти позволяет решить использование fileio вместо blockio. В этом случае активно используется кэш на стороне target-а, но производительности сравнимой, например, с Proxmox, всё равно не получается.
Слушайте, я аж загуглил от удивления. Ничего из вышеперечисленного не является приложением — это просто названия сборок софта. Внутри там либо iet, либо STGT/LIO. Кто из них лучше — вот это вопрос. А кто там какие интерфейсы ему пишет…
После некоторого времени с IET'ом, я пришёл к выводу, что динамические target'ы удобнее, чем статика, не то, что «добрый дядя из коробки скрипты собрал».
Прошу прощения, но я не понял о чём вы.
В linux я в качестве initiator использовал open-iscsi (в Proxmox вроде бы он же), в Windows официальный «Microsoft iSCSI Software Initiator», но проблема с VMware не в initiator на, в проприетарной файловой системе VMFS, которая не использует кэширование.
О гостях даже речи не идёт. Тормозит уже на связке ESXi <-> iSCSI. Т.е. iSCSI LUN монтируется в /vmfs/xxxxxxxxxx и операции записи в этой директории идут очень медленно.
Вы говорите «proxmox», как будто это iscsi target. А это не iscsitarget, это дистрибутив специализированный. Ну всё равно, как если бы два человека обсуждали, где лучше ext4 — в ubuntu или в debian.
Ну логика работы vmfs понятна — необходимость целостности данных: если ОС в виртуальной машине записала данные на диск, пусть и виртуальный, то они (данные) должны быть на диске.
Не сравнивал. Основная проблема — ataoe как-то наколеночно выглядит. В перспективах «посмотреть» есть желание, но накладные расходы на target (10-80% одного CPU) выглядят терпимо.
multipath «из коробки» вызывает скепсис (потому что у меня нет ни одной претензии к dm_multipath, который с iscsi'евыми дисками работает как с обычными SCSI/SATA, что даёт весьма и весьма широкие возможности по тюнингу «под себя»).
L2 совершенно не является проблемой, потому что на более-менее быстрых линках скорость канала выше скорости дисков, а оверхед от TCP (в процессоре) во многом решается с помощью LRO/GRO/checksumm offload и т.д. на сетевых картах.
Судя по всему так же как и SCSI. Если к одному LUN-у, то на в на этом LUN должна быть файловая система обеспечивающая конкурентный доступ или что-то типа LVM, например.
В этом случае будет неоьходимо обеспечить блокировку, либо кластерным lvm, либо спец. фс типа gfs или ocfs2, либо внешними средствами, как это делает proxmox.
Ожидал большего от XCP. В стандартной админилке можно только приатачить сторедж и всё, даже моунта нет. Я уже не говорю про создание ВМ (оффтопик ибо :)). Сделано с закосом под энтерпрайз, но до него еще пилить и пилить(
«Стандартная админка» XCP называется 'xe', и она позволяет очень многое. Графические нашлёпки не имеют смысла, т.к. некоторые типы отношений очень плохо визуализируются.
Никак. В смысле, ISCSI поддерживает SCSI-команды, включая блокировки и персистентные блокировки. Соответственно, если те, кто подключаются, к такому сценарию готовы, то ок. Если нет (например, идиот-админ, ext3, которую подключили к двум серверам одновременно), то данные херятся.
Сам протокол вообще такими вопросами не занимается, большинство target'ов позволяет ограничить число инициаторов на target. Соответственно, если выставить в ограничении единицу, то второй просто не сможет подключиться.
А если залогиниться на таргет несколькими инициаторами, но не монтировать разделы в системе (и вообще не совершать никаких действий с /dev/sdX) — приведёт ли это к каким-нить последствиям?
Происходит ли при логине что-то, кроме операций обнаружения/проверки размера/чтения partition?
Происходит где? На инициаторе? Всё, что захочется сделать udev'у (в частности, да, чтение в поисках разных видов разделов). На target'е всё что может быть плохого, происходит на этапе создания target'а.
Расскажите, а каким образом нужно конфигурировать ядро? За что отвечают опции ISCSI_TCP (комментарий там такой, будто это и есть сам инициатор), SCSI_ISCSI_ATTRS, ISCSI_IBFT, ISCSI_BOOT_SYSFSISCSI_IBFT_FIND?
В каком направлении копать, если хочется сделать на этом протоколе совсем бездисковую машину?
Интересно, почему не видно домашних хранилищ с поддержкой iscsi, по идее более низкий уровень и требования к ЦП ниже.
Нашла QNAP TS-119, но это скорее традиционный комбайн с торрентокачалкой, да и цена соответствующая — 9.5к без диска.
У iscsi нагрузка на процессор на target выше, чем у SMB/NFS, это связано с довольно сложной интерпретацией scsi-команд.
Плюс, нужно понимать, что в отсутствие кластеризованных файловых систем, у диска будет монопольное использование, то есть никакого «файлы доступны и с ноута, и с лэптопа».
Кластеризованные FS это сложнее, чем «общая шара». В этом и вечная проблема SAN/NAS — в случае файлового доступа всё просто для клиента, но сложно для сервера (какой-нибудь fsck на шаре на 300-500 пользователей — дохлый номер дождаться завершения), блочный доступ — просто для сервера, просто для клиента, непросто обеспечивать взаимодействие.
Спасибо за статью! Вот уже год меня мучает (пока) теоретический вопрос: есть линукс-машина с пишущим SATA DVD-RW. Можно ли посредством iSCSI-over-WiFi писать диски с нетбука с установленной Windows XP?
На одном target может быть несколько LUN (разделов диска, LV).
iscsi-инициатор логинится на таргет и тутже создаёт блочное устройство.
какой LUN при этом коннектится?
А вот это очень интересный вопрос. Я никогда с многолуновыми target не работал. У меня есть две версии: либо будет создано несколько блочных устройств (по числу lun'ов), либо его нужно (как-то?) указать при создании.
Вот меня смутило то, что lun нигде никак не указывается и вообще не фигурирует в документации (и в статье).
Методом тыка уже разобрался — при логине target подключает все свои LUNы, и кадый образует свой sdX.
Как я понял, это как раз нормальная практика — делать отдельный target на каждый раздел.
Так удобнее и в плане идентификации, и в плане возможности подключаться к разделам разными инициаторами.
Ага. LUN'ы — это тяжкое наследие древних SCSI и юниксов, когда LVM не существовало и нормально разделы было не порезать. Точнее, они нужны были для того, чтобы разные приложения/ОС работали с разными блочными устройствами (находясь на одном) и не портили друг другу нервы.
Настройка ISCSI initiator в linux