Lustre — распределённая файловая система массового параллелизма, используемая обычно для крупномасштабных кластерных вычислений. Название Lustre является контаминацией, образованной словами Linux и cluster (при этом английское слово lustre означает «блеск, лоск, глянец»). Реализованный под лицензией GNU GPL, проект предоставляет высокопроизводительную файловую систему для кластеров с десятками тысяч узлов сети и петабайтными хранилищами информации.

Файловые системы Lustre используются в компьютерных кластерах, начиная от небольших кластеров рабочих групп и заканчивая масштабными географически распредёленными кластерами. Пятнадцать суперкомпьютеров из мирового «Топ-30» используют файловые системы Lustre, в том числе самый быстрый в мире суперкомпьютер — K computer.

Файловые системы Lustre могут поддерживать десятки тысяч клиентских систем, десятки петабайт (PBs) памяти для хранения данных и пропускную способность ввода-вывода в сотни гигабайт в секунду (GB/s). Благодаря высокой масштабируемости Lustre, такие области бизнеса, как провайдеры Интернета, финансовые организации, индустрия нефти и газа устанавливают файловые системы Lustre в своих центрах обработки данных.

История Архитектура файловой системы Lustre была разработана в рамках исследовательского проекта в 1999 Питером Браамом (Peter Braam), старшим научным сотрудником Университета Карнеги — Меллон. Браам покинул его, чтобы основать собственную компанию Cluster File Systems, реализовавшую Lustre 1.0 в 2003 году. В 2007 году Sun Microsystems поглотила Cluster File Systems и включила Lustre в свой пакет программного обеспечения для высокопроизводительных систем, намереваясь использовать преимущества технологии Lustre в файловой системе Sun ZFS и операционной системе Solaris. В ноябре 2008 года Браам покинул Sun Microsystems для работы над другой файловой системой, оставив разработку архитектуры Lustre Эрику Бартону (Eric Barton) и Андреасу Дилджеру (Andreas Dilger).

В 2010 году Oracle поглотила Sun и к ней перешёл бизнес по поддержке и разработке Lustre. В апреле 2010 года Oracle объявила о намерении ограничить платную поддержку для новой Lustre 2.0, предоставляя её только на оборудовании Oracle или оборудовании, разработанном одобренными Oracle поставщиками. При этом Lustre осталась доступной всем пользователям под лицензией GPL и существующие заказчики Lustre 1.8 продолжили получать техподдержку от Oracle.

В декабре 2010 Oracle объявила о прекращении развития Lustre. Выпуск Lustre 1.8 переведен на обслуживание только для сопровождения, что создало неопределенность по поводу дальнейшего развития файловой системы. Согласно этому объявлению разработка и поддержка новых версий Lustre осуществляется сообществом разработчиков, включая Whamcloud, Xyratex, OpenSFS, European Open Filesystems (OFS) SCE и другими. В том же году Эрик Бартон и Андреас Дилджер покинули Oracle и основали стартап Whamcloud, сфокусированный на развитии Lustre.

В июле 2012 года Whamcloud была приобретена Intel. Это произошло после того, как Whamcloud выиграла контракт для министерства энергетики США на расширение Lustre в рамках первой фазы проекта экзафлопных вычислений под названием FastForward на период до 2018 года. После этого OpenSFS перевела все контракты по разработке Lustre в Intel.

История выпусков Файловая система Lustre впервые была инсталлирована для использования в работе в марте 2003 на кластере MCR Linux Cluster в LLNL, одном из самых мощных суперкомпьютеров того времени.

Lustre 1.2.0, выпущенная в марте 2004, поддерживала ядро Linux 2.6, возможность «size glimpse» для исключения отзыва блокировки на файлы, подлежащие записи, а также учёт для кэша обратной записи данных со стороны клиента.

Lustre 1.4.0, выпущенная в ноябре 2004, обеспечивала совместимость протоколов между версиями, поддержку сети InfiniBand, а также поддержку экстентов и mballoc в дисковой файловой системе ldiskfs.

Lustre 1.6.0, выпущенная в апреле 2007, поддерживала конфигурацию монтирования («mountconf»), позволяя серверам быть сконфигурированными с помощью «mkfs» и «mount», поддерживала динамическое добавление целей хранилищ объектов (object storage target — OST), включала масштабируемый менеджер распредёленной блокировки Lustre (Lustre distributed lock manager — LDLM) для симметричных мультипроцессоров (SMP), а также поддерживала управление свободным пространством при распределении объектов.

Lustre 1.8.0, выпущенная в мае 2009, предоставляла OSS Read Cache, улучшала восстановление в случае многократных отказов, добавила базовое управление гетерогенными хранилищами через OST Pools, адаптивные сетевые таймауты, а также восстановление на основе версий. Она также являлась переходным выпуском, обеспечивая взаимодесвие как с Lustre 1.6, так и с Lustre 2.0.

Lustre 2.0.0, выпущенная в августе 2010, содержала переписанный стек сервера метаданных, организующий основу кластеризованных метаданных (Clustered Metadata — CMD), что позволило распределить метаданные Lustre по нескольким серверам метаданных, новый клиентский стек ввода-вывода (Client IO stack — CLIO) для переносимости с другими клиентскими операционными системами, например Mac OS, Microsoft Windows, Solaris, а также абстрактное устройство хранения объектов (Object Storage Device — OSD) для обеспечения переносимости с другими файловыми системами, например ZFS.

Файловая система Lustre и ассоциированное с ней программное обеспечение с открытым кодом были адаптированы многими организациями. Например, и Red Hat и SUSE (Novell) предлагают ядра Linux, работающие на клиентах без дополнений, что облегчает развертывание.

Архитектура Файловая система Lustre содержит три основных функциональных модуля:

Один сервер метаданных (metadata server — MDS) соединенный с одной целью метаданных (metadata target — MDT) в файловой системе Lustre, который хранит метаданные о пространстве имен, например имена файлов, каталогов, права доступа, а также карту размещения файлов. Данные MDT хранятся в единой локальной дисковой файловой системе. Один или несколько серверов хранения объектов (object storage server — OSS), хранящих данные файлов из одного или нескольких целей хранения объектов (object storage targets — OST). В зависимости от оборудования сервера OSS обычно обслуживает от двух до восьми OSs, а каждая OST управляет одной локальной дисковой файловой системой. Ёмкость файловой системы Lustre определяется суммой ёмкостей, предоставляемых OST. Клиент(ы), обращающиеся и использующие данные. Lustre предоставляет всем клиентам унифицированное пространство имен для всех файлов и данных в файловой системе, используя стандартную семантику POSIX, а также обеспечивает параллельный когерентный доступ по записи и чтению к файлам в файловой системе.

Компоненты MDT, OST, а также клиенты могут находиться на одном и том же узле, но при инсталляции их обычно помещают на отдельные узлы, взаимодействующие по сети. Уровень сети Lustre (Lustre Network — LNET) поддерживает несколько коммуникационных платформ, включая Infiniband, TCP/IP через Ethernet и другие сети, Myrinet, Quadrics, а также проприетарные сетевые технологии. Lustre также использует преимущества удаленного прямого доступа к памяти, если это возможно, для увеличения пропускной способности и снижения доли использования ЦП.

Хранилище, используемое для дублирующих файловых систем MDT и OST, делится на части и может быть организовано через управление логическими томами и/или RAID, как правило, форматированными в файловой системе ext4. Сервера Lustre OSS и MDS считывают, записывают и изменяют данные в формате, введённым этими файловыми системами.

OST является выделенной файловой системой, экспортирующей интерфейс в байтовые регионы объектов для операций чтения/записи. MDT является выделенной файловой системой для контроля доступа к файлам и сообщений киентам о том, какие объект(ы) входят в структуру файла. В настоящее время MDT и OST используют для хранения данных улучшенную версию ext4, называемую ldiskfs. В 2008 Sun начала проект портирования Lustre в Sun ZFS/DMU для хранения внутренних данных, продолжающийся как проект с открытым кодом.

При доступе клиента к файлу поиск имени файла выполняется в MDS. В результате файл либо создается от имени клиента, либо клиенту возвращается местоположение существующего файла. При операциях чтения или записи клиент интерпретирует местоположение на уровне логического тома объекта, отображающего смещение и размер в один или несколько объектов, каждый из которых расположен на отдельной OST. Затем клиент блокирует диапазон файлов для работы и исполняет одну или несколько операций параллельного чтения или записи непосредственно в OST. При таком подходе устраняются узкие места взаимодействия клиента с OST, так что общая пропускная способность, доступная клиенту для чтения и записи, масштабируется почти линейно с ростом количества OST в файловой системе.

Клиенты не модифицируют объекты файловой системы OST напрямую, делегируя эту задачу OSS. Этот подход обеспечивает масштабируемость для крупномасштабных кластеров и суперкомпьютеров, а также улучшает безопасность и надежность. В противоположность этому блочные разделяемые файловые системы, например Global File System и OCFS должны поддерживать прямой доступ к хранилищу для всех клиентов в файловой системе, увеличивая риск повреждения файловой системы со стороны неправильных клиентов.

Реализация При обычной установке Lustre на клиенте Linux модуль драйвера файловой системы Lustre загружается в ядро и файловая система монтируется как и любая другая локальная или сетевая файловая система. Приложения клиента видят одну унифицированную файловую систему, даже если она может быть составлена из десятков тысяч индивидуальных серверов и файловых систем MDT/OST.

На некоторых процессорах массового параллелизма (MPP) вычислительные процессоры могут получить доступ к файловой системе Lustre путём перенаправления их запросов ввода-вывода на выделенный узел ввода-вывода, сконфигурированный как клиент Lustre. Этот подход используется в Blue Gene, установленном в Ливерморской национальной лаборатории.

Другой подход, используемый в последнее время, предлагает библиотека liblustre, предоставляющая приложениям в пространстве пользователя прямой доступ к файловой системе. Это библиотека уровня пользователя, позволяющая вычислительным процессорам-клиентам монтировать и использовать файловую систему Lustre. Используя liblustre, вычислительные процессоры могут получить доступ к файловой системе Lustre даже в случае, если обслуживающий узел, запустивший задание, не является клиентом Lustre. Библиотека liblustre позволяет непосредственно перемещать данные между пространством приложения и Lustre OSS без необходимости промежуточного копирования данных через ядро, обеспечивая вычислительным процессорам доступ к файловой системе Lustre с низкой задержкой и высокой пропускной способностью.

Объекты данных и разделение данных В традиционных дисковых файловых системах UNIX, структура данных inode содержит базовую информацию о каждом файле, например о том, где хранятся данные, содержащиеся в файле. Файловая система Lustre также использует inode, но inode на MDT указывает на один или несколько объектов OST, ассоциированных с файлом, а не на блоки данных. Эти объекты реализуются как файлы OST. При открытии файла клиентом операция открытия передает множество указателей объекта и их расположение из MDS клиенту, после чего клиент может непосредственно взаимодействовать с узлом OSS, хранящим объект, что позволяет клиенту выполнять ввод-вывод в файл без последующего взаимодействия с MDS.