GlusterFS

GlusterFS представляет собой кластерную файловую систему, способную масштабироваться для хранения далеко не одного петабайта данных. Как и многие другие кластерные файловые системы, GlusterFS аггрегирует дисковое пространство большого количества машин в одну общую параллельную сетевую файловую систему через Infiniband RDMA или TCP/IP соединение. Обычно в качестве аппаратной основы для этой файловой системы используется ничем не выдающееся недорогое серверное оборудование, в полной мере реализуя принцип программного построения стабильности при использовании на ненадежном оборудовании.
Кластерные файловые системы еще не достаточно приспособлены для использования на крупных предприятиях: обычно процесс их развертывания и поддержания в работающем состоянии не так уж прост. Но зато они отлично масштабируются и достаточно дешевы, ведь для них достаточно самого простого серверного оборудования и opensource операционных систем и програмного обеспечения. Основной целью разработчиков GlusterFS как раз и является построение кластерной файловой системы, адаптированной для использования в рамках серьезных компаний.
Список основных ее особенностей по большей части мало чем отличается от других кластерных файловых систем:
- Состоит из клиентской и серверной частей. Клиентская часть позволяет монтировать файловую систему, а серверная — glusterfsd — экспортировать в нее локальное дисковое пространство.
- Масштабируемость близка к O(1).
- Широкий спектр возможностей за счет использования модульной архитектуры.
- Имеется возможность восстановления файлов и директорий из файловой системы даже без ее инициализации.
- Отсутствие централизованного сервера метаданных, что делает ее более устойчивой к потенциальным сбоям.
- Расширяемый интерфейс выполнения задач, с поддержкой загрузки модулей в зависимости от особенностей выполнения пользователями операций по работе с данными.
- Расширяющий функциональность механизм трансляторов.
- Поддержка Infiniband RDMA и TCP/IP.
- Возможность автоматического восстановления в случае сбоев.
- Полностью реализована на уровне приложений, что упрощает ее поддержание в рабочем состоянии, портирование и дальнейшую разработку.
Но некоторые моменты все же заслуживают отдельного внимания:
- Совместимость
- Как уже упоминалось, файловая система реализована полностью на уровне пользовательских приложений, что делает возможным ее монтирование без каких-либо дополнительных патчей в ядре операционной системы, единственное требование к нему: поддержка FUSE. Серверная часть GlusterFS может функционировать на любой POSIX-совместимой операционной системе и протестирована на Linux, FreeBSD, OpenSolaris, в отличии от клиентской части, которая может работать только в Linux.
- Модули
- В виде модулей реализованы различные варианты выполнения основополагающих операций: передачи данных и балансировки нагрузки в рамках кластера. Транспортные модули обеспечивают передачу данных по различным типам соединений:
- TCP/IP;
- Infiniband-verbs;
- Infiniband-SDP.
Балансировка нагрузки может выполняться по следующим алгоритмам:
- ALU — использует целый ряд факторов, включающий объем свободного локального дискового пространства, активность операций чтения и записи, количество одновременно открытых файлов, скорость физического вращения дисков. Значимость, придаваемая каждому из показателей, может достаточно гибко настраиваться.
- RR — по очереди размещает файлы последовательно на каждом узле, после чего начинает процесс заново, образуя своеобразный цикл. Этот метод эффективен если файлы имеют примерно одинаковый размер, а узлы кластера — одинаковый размер экспортированного локального дискового пространства.
- Random — распределяют файлы случайным образом.
- NUFA — приоритет отдается созданию файлов локально, а не на других узлах кластера.
- Switch — располагает файлы по определенным указанным особенностям имен файлов, по аналогии со switch(filename) в программировании, обычно в качестве критерия распределения файлов имеет смысл использовать их расширение.
- Трансляторы
- Они представляют собой очень мощный механизм для расширения возможностей GlusterFS, сама идея трансляторов бала позаимствована у GNU/Hurd и заключается она в загрузке бинарных библиотек (.so) в процессе работы системы в зависимости от использованных настроек и использовании их в виде своеобразной цепочки обработчиков при работе с файлами как на серверной, так и на клиентской стороне. В GlusterFS практически все дополнительные возможности реализованы именно виде трансляторов, начиная от дополнений, увеличивающих производительность, заканчивая средствами отладки. Вкратце перечислю основные из них:
- AFR — автоматическая репликация файлов.
- Stripe — разбивает файлы на блоки фиксированного размера.
- Unify — объединяет несколько узлов кластера в один большой виртуальный узел, один узел выделяется для обеспечения внутреннего namespace. Директории создаются на всех узлах, составляющих unify, а каждый файл — лишь на одном (если не используется AFR).
- Trace — предоставляют информацию для отладки в виде дополнительных записей в лог.
- Filter — фильтрация файлов на основании их имен и/или атрибутов.
- Posix-locks — обеспечивает POSIX блокировку записей независимую от используемой системы хранения.
- Trash — предоставляет функциональность сопоставимую с libtrash (или «корзиной» — если так понятнее).
- Fixed-id — обеспечивает доступ только для пользователей с определенными UID и GUID.
- Posix — соединяет GlusterFS с низлежащей локальной файловой системой.
- rot-13 — транслятор обеспечивает возможность шифрования и дешифрования данных по примитивному одноименному алгоритму.
Список возможностей, обеспечиваемых широким набором модулей и транслятором, впечатляет, большинство других opensource кластерных файловых систем не могут похвастаться подобной функциональностью (GlusterFS выпускается под GPL). Благодаря возможности работы через Infiniband производительность передачи данных также достаточно высока — она может достигать десятков гигабит в секунду. Обработка сбоев в отдельных узлах также осуществляется достаточно эффективно, так как может быть автоматизирована. Из потенциальных недостатков можно назвать некоторое количество редко проявляющих себя багов в коде, а также достаточно большой размер заголовков в используемом протоколе (несколько сотен байт). В целом эта система вполне работоспособна и полноценно выдерживает конкуренцию со стороны своих opensource «коллег».
6 comments
А почему ты всё время пишешь «OPENSOURCE»? Все заглавные буквы пишутся в основном в аббревиатурах. Да и Свободное ПО и открытый код — это не синонимы. Например, Microsoft .Net framework — это open source, так как исходники доступны. Но мы понимаем, что это не Свободное ПО, потому что, несмотря на то, что исходники можно читать, сделать с ними ничего нельзя. Не выпустить свою версию, ни использовать в своей программе.
По-моему, самое нормально слово для обозначения FLOSS — свободное ПО или СПО. Последняя аббревиатура стала часто использоваться в печати после идеи с внедрением Linux в школы.
Например, «ведь для них достаточно самого простого серверного оборудования и cdj,jlysq операционных систем и програмного обеспечения» или «В целом эта система вполне работоспособна и полноценно выдерживает конкуренцию со стороны своих свободных „коллег“».
В крайнем случае, уж стоит писать open source (раздельно, обычным буквами) или «открытое ПО».
[quote comment="744"]А почему ты всё время пишешь «OPENSOURCE»? Все заглавные буквы пишутся в основном в аббревиатурах. [/quote]Это издержки установленного очень давно плагина для автоматического расставления тэгов <abbr> вокруг аббревиатур с расшифровкой (только вот откуда в его базе данных взялось opensource — не помню…) в совокупности с CSS моей темы — она содержимое <abbr> принудительно в прописные буквы конвертирует.
Пойду копаться в базе данных этого плагина….
[quote comment="744"]Да и Свободное ПО и открытый код — это не синонимы. Например, Microsoft .Net framework — это open source, так как исходники доступны. Но мы понимаем, что это не Свободное ПО, потому что, несмотря на то, что исходники можно читать, сделать с ними ничего нельзя. Не выпустить свою версию, ни использовать в своей программе.[/quote]На данный момент в этой самой подсказке над словом opensource написано не «свободный», а «свободно распространяемый» — согласитесь, разница есть и ни о каком выпуске своих версий речи не идет. Раз уж критикуете — делайте это более внимательно, пожалуйста.
А насчет самой семантики этой фразы — я просто предпочитаю не придираться к словам, по контексту так или иначе практически все возможные варианты подходят — так что не вижу особых преимуществ использования других слов перед приглянувшимся мне «opensource».
Иван, а как насчет сравнений с остальными кластерными фс?
[quote comment="747"]Иван, а как насчет сравнений с остальными кластерными фс?
[/quote]Всему свое время, когда-нибудь напишу и сравнительный обзорчик.
«Когда-нибудь» еще не наступило? .-) Было бы интересно почитать.
[quote comment="1107"]«Когда-нибудь» еще не наступило? .-) Было бы интересно почитать.[/quote]Да на это времени много надо, а с ним у меня сейчас беспросветно туго
Осенью еще учеба начнется в дополнение к работе — станет еще сложнее что-либо писать…