GlusterFS

18 мая 2008 6 комментариев Иван Блинков

GlusterFS Logo
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 «коллег».

Метки: , , , , ,

  • http://www.sitnik.ru A.I.

    А почему ты всё время пишешь «OPENSOURCE»? Все заглавные буквы пишутся в основном в аббревиатурах. Да и Свободное ПО и открытый код — это не синонимы. Например, Microsoft .Net framework — это open source, так как исходники доступны. Но мы понимаем, что это не Свободное ПО, потому что, несмотря на то, что исходники можно читать, сделать с ними ничего нельзя. Не выпустить свою версию, ни использовать в своей программе.

    По-моему, самое нормально слово для обозначения FLOSS — свободное ПО или СПО. Последняя аббревиатура стала часто использоваться в печати после идеи с внедрением Linux в школы.

    Например, «ведь для них достаточно самого простого серверного оборудования и cdj,jlysq операционных систем и програмного обеспечения» или «В целом эта система вполне работоспособна и полноценно выдерживает конкуренцию со стороны своих свободных „коллег“».

    В крайнем случае, уж стоит писать open source (раздельно, обычным буквами) или «открытое ПО».

  • http://www.insight-it.ru Иван Блинков

    [quote comment="744"]А почему ты всё время пишешь «OPENSOURCE»? Все заглавные буквы пишутся в основном в аббревиатурах. [/quote]Это издержки установленного очень давно плагина для автоматического расставления тэгов <abbr> вокруг аббревиатур с расшифровкой (только вот откуда в его базе данных взялось opensource — не помню...) в совокупности с CSS моей темы — она содержимое <abbr> принудительно в прописные буквы конвертирует.

    Пойду копаться в базе данных этого плагина...

    [quote comment="744"]Да и Свободное ПО и открытый код — это не синонимы. Например, Microsoft .Net framework — это open source, так как исходники доступны. Но мы понимаем, что это не Свободное ПО, потому что, несмотря на то, что исходники можно читать, сделать с ними ничего нельзя. Не выпустить свою версию, ни использовать в своей программе.[/quote]На данный момент в этой самой подсказке над словом opensource написано не «свободный», а «свободно распространяемый» — согласитесь, разница есть и ни о каком выпуске своих версий речи не идет. Раз уж критикуете — делайте это более внимательно, пожалуйста.

    А насчет самой семантики этой фразы — я просто предпочитаю не придираться к словам, по контексту так или иначе практически все возможные варианты подходят — так что не вижу особых преимуществ использования других слов перед приглянувшимся мне «opensource».

  • Rauan

    Иван, а как насчет сравнений с остальными кластерными фс? ;)

  • http://www.insight-it.ru Иван Блинков

    [quote comment="747"]Иван, а как насчет сравнений с остальными кластерными фс? ;) [/quote]Всему свое время, когда-нибудь напишу и сравнительный обзорчик.

  • Alexey Kupershtokh

    «Когда-нибудь» еще не наступило? . -) Было бы интересно почитать.

  • http://www.insight-it.ru Иван Блинков

    [quote comment="1107"]«Когда-нибудь» еще не наступило? . -) Было бы интересно почитать.[/quote]Да на это времени много надо, а с ним у меня сейчас беспросветно туго :(

    Осенью еще учеба начнется в дополнение к работе — станет еще сложнее что-либо писать...