Что такое кластер файловой системы
Хочу просить вашего совета в выборе распределённой кластерной файловой системы, поскольку опыта работы с ними у меня нету, да и сами они достаточно сильно различаются и имеют кучу особенностей. К тому же ещё и ощущается относительный информационный голод в данном направлении — какая либо конкретика просто отсутствует.
Система строится на базе Linux.
Что мне нужно от этой файловой системы:
- Распределение данных по сетевым узлам
- Автоматическое создание реплик (надо 3, лучше если можно настраивать)
- Для клиентов это должно выглядеть как полноценная POSIX (можно не совсем, но близкая к) файловая система. Для пользователей это должно выглядеть как обычная файловая система
- Встроенное High Avaliability, автоматическое восстановление, добавление новых узлов на лету
- Желательна поддержка XFS
Задача?
Задача по сути проста — WEB хостинг, т.е. в хранилище будут хранится сами сайты и их файлы. К хранилищу будут подключатся WEB сервера и работать с ним на прямую как с файловой системой.
Результаты самостоятельных поисков:
Первое на что наткнулись, это DRBD. Это просто репликация, можно использовать для географической репликации. Вобщем не FS.
Следующим на глаза попался GFS (Global File System). После исследования информации по ней обнаружилось, что система не распределённая, а просто позволяет присоединятся клиентам к центральному хранилищу и всем одновременно работать с ним. Для небольших объёмов в общем это очень даже годится. Отказоустойчивость можно организовать с помощью того-же DRBD зеркалируя данные. Однако если вам нужен большой объём, вам придётся изворачиваться с дорогими storage системами, т.к. эта система работает с блочными устройствами, которые подключаются по iSCSI, FC, InfiniBand и.т.д. При больших объёмах затраты резко идут вверх из-за необходимости покупать дорогие железки, к тому же ещё и 2, что бы вторая была slave у первой в запасе. Я конечно не знаю, может и можно соорудить какое-то подобие виртуального блочного устройства из пачки серверов, но это по моему уже извращение.
И тут я наконец докопался до GlusterFS (Офф. сайт). Судя по описанию — то что надо. Распределённая кластерная файловая система, c репликацией данных, распределением данных по сетевым нодам и маштабируется практически линейно. Имеет автоматическое восстановление, добавление нод в кластер на лету и.т.д., вобщем полноценная взрослая FS. Используется на многих производительных кластерах во всём мире.
Собственно, вопросы:
- Есть ли кто, кто работал с такими системами. Что от них ожидать, какие подводные камни?
- Может кто-то знает другие, более подходящие FS?
P.S. Hadoop, MogileFS и прочие не предлагать, это больше фреймворки для встраивания в приложения. Мне нужно исключительно на уровне файловых систем решение.
P.S.S. Прошу обратить внимание, что мы обсуждаем полностью работоспособные и стабильные FS, которые можно использовать в production. Многие предлагают продукты, которые в ранней разработке (PohmelFS) и/или имеют кучу ограничений (GridFS, в котором нету ни permissions, ни папок, да ещё и создание файлов — экспериментальная фишка. GridFS сделан поверх MongoDB).
Перед началом работы с диском, флешкой или другим носителем информации его необходимо отформатировать. При форматировании надо выбрать файловую систему и установить для нее размер кластера.
В данной статье даются самые базовые сведения о том, как организуется хранение информации на дисках, что такое файловая система, кластер и как оптимальным образом выбрать размер кластера при форматировании.
Файловая система и ее виды
Файловая система - это способ организации хранения информации в виде файлов на любых типах носителей. Носителем информации может быть не только жесткий диск, но и внешний флеш-накопитель, оптический диск, внешняя карта памяти или другой компьютер в сети, если система сетевая.
Система отвечает за запись информации на носитель, ее поиск, чтение и удаление. Некоторые системы дополнительно могут шифровать информацию, разграничивать права доступа и обеспечивать совместный доступ к файлам.
На сегодняшний день наиболее распространены следующие системы:
- FAT-32. Использовалась в ОС Windows вплоть до 7 версии. Простая и надежная система. Не поддерживает запись файлов более 4 Гб. Используется во флеш-накопителях небольшой емкости.
- NTFS. Заменила FAT-32 в ОС Windows начиная с 7 версии. Устанавливается в этих ОС по умолчанию. Работает с файлами более 4 Гб. Допускает шифрование информации и разграничение прав доступа к файлам.
- ExFAT. Разработана как расширение FAT-32. Снято ограничение на максимальную длину файла в 4 Гб. Введена возможность шифрования и разграничения прав доступа. Относительно новая система. Используется во флеш-накопителях большой емкости. Читается не всеми ОС. Не работает со старыми устройствами.
Размещение информации на жестком диске
Жесткий диск компьютера физически представляет из себя металлический диск, на поверхность которого нанесен магнитный слой. Диск вращается с постоянной скоростью, а над его поверхностью, не касаясь ее, скользят магнитные головки. При записи магнитные головки оставляют на поверхности намагниченный след — дорожку. Дорожка делится на сектора, в которые, собственно, и записывается информация. В стандартном секторе 512 байт информации. Головки могут двигаться от края диска к центру, формируя на его поверхности множество дорожек. Номер дорожки и номер сектора на ней однозначно определяют положение информации на диске.
Устойчивость к сбоям и диагностика ошибок
Авторы системы считают одной из наиболее сложных проблем частые сбои работы компонентов системы. Количество и качество компонентов делают эти сбои не просто исключением, а скорее нормой. Сбой компонента может быть вызван недоступностью этого компонента или, что хуже, наличием испорченных данных. GFS поддерживает систему в рабочем виде при помощи двух простых стратегий: быстрое восстановление и репликации.
Быстрое восстановление — это, фактически, перезагрузка машины. При этом время запуска очень маленькое, что приводит к маленькой заминке, а затем работа продолжается штатно. Про репликации чанков уже говорилось выше. Мастер реплицирует чанк, если одна из реплик стала недоступной, либо повредились данные, содержащие реплику чанка. Поврежденные чанки определяется при помощи вычисления контрольных сумм.
Еще один вид репликаций в системе, про который мало было сказано — это репликация мастера. Реплицируется лог операций и контрольные точки (checkpoints). Каждое изменение файлов в системе происходит только после записи лога операций на диски мастером, и диски машин, на которые лог реплицируется. В случае небольших неполадок мастер может перезагрузиться. В случае проблем с жестким диском или другой жизненно важной инфраструктурой мастера, GFS стартует нового мастера, на одной из машин, куда реплицировались данные мастера. Клиенты обращаются к мастеру по DNS, который может быть переназначен новой машине. Новый мастер является тенью старого, а не точной копией. Поэтому у него есть доступ к файлам только для чтения. То есть он не становится полноценным мастером, а лишь поддерживает лог операций и другие структуры мастера.
Важной частью системы является возможность поддерживать целостность данных. Обычный GFS кластер состоит из сотен машин, на которых расположены тысячи жестких дисков, и эти диски при работе с завидным постоянством выходят из строя, что приводит к порче данных. Система может восстановить данные с помощью репликаций, но для этого необходимо понять испортились ли данные. Простое сравнение различных реплик на разных чанк-серверах является неэффективным. Более того, может происходить несогласованность данных между различными репликами, ведущая к различию данных. Поэтому каждый чанк-сервер должен самостоятельно определять целостность данных.
Каждый чанк разбивается на блоки длиной 64 Кбайт. Каждому такому блоку соответствует 32-битная контрольная сумма. Как и другие метаданные эти суммы хранятся в памяти, регулярно сохраняются в лог, отдельно от данных пользователя.
Перед тем как считать данные чанк-сервер проверяет контрольные суммы блоков чанка, которые пересекаются с затребованными данными пользователем или другим чанк-сервером. То есть чанк-сервер не распространяет испорченные данные. В случае несовпадения контрольных сумм, чанк-сервер возвращает ошибку машине, подавшей запрос, и рапортует о ней мастеру. Пользователь может считать данные из другой реплики, а мастер создает еще одну копию из данных другой реплики. После этого мастер дает инструкцию этому чанк-серверу об удалении этой испорченной реплики.
При добавлении новых данных, верификация контрольных сумм не происходит, а для блоков записывается новые контрольные суммы. В случае если диск испорчен, то это определится при попытке чтения этих данных. При записи чанк-сервер сравнивает только первый и последний блоки, пересекающиеся с границами, в которые происходит запись, поскольку часть данных на этих блоках не перезаписывается и необходимо проверить их целостность.
Мастер
Использование одного мастера существенно упрощает архитектуру системы. Позволяет производить сложные перемещения чанков, организовывать репликации, используя глобальные данные. Казалось бы, что наличие только одного мастера должно являться узким местом системы, но это не так. Клиенты никогда не читают и не пишут данные через мастера. Вместо этого они спрашивают у мастера, с каким чанк-сервером они должны контактировать, а далее они общаются с чанк-серверами напрямую.
Рассмотрим, как происходит чтение данных клиентом. Сначала, зная размер чанка,
имя файла и смещение относительно начала файла, клиент определяет номер чанка внутри файла. Затем он шлет запрос мастеру, содержащий имя файла и номер чанка в этом файле. Мастер выдает чанк-серверы, по одному в каждой реплике, которые хранят нужный нам чанк. Также мастер выдает клиенту идентификатор чанка.
Затем клиент решает, какая из реплик ему нравится больше (как правило та, которая ближе), и шлет запрос, состоящий из чанка и смещения относительно начала чанка. Дальнейшее чтения данных, не требует вмешательства мастера. На практике, как правило, клиент в один запрос на чтение включает сразу несколько чанков, и мастер дает координаты каждого из чанков в одном ответе.
Размер чанка является важной характеристикой системы. Как правило, он устанавливается равным 64 мегабайт, что гораздо больше, чем размер блока в обычной файловой системе. Понятно, что если необходимо хранить много файлов, размеры которых меньше размера чанка, то будем расходоваться много лишней памяти. Но выбор такого большого размера чанка обусловлен задачами, которые приходится компании Google решать на своих кластерах. Как правило, что-то считать приходится для всех документов в интернете, и поэтому файлы в этих задачах очень большого размера.
Размер кластера в разных файловых системах
Для каждой системы определена величина кластера по умолчанию.
Этот размер считается оптимальным и установится автоматически, если при форматировании носителя не установить другой размер принудительно.
Для наиболее популярных систем эти значения будут равны:
- FAT 32. Величина зависит от размера тома, при размере тома от 8 до 16 ГБ он равен 4 КБ. При размере тома от 16 до 32 ГБ кластер по умолчанию равен 16 КБ.
- NTFS - по умолчанию 4 КБ.
- ExFAT - 4,32 или 128 КБ в зависимости от размера тома.
Значение по умолчанию имеет смысл использовать при форматировании диска в подавляющем большинстве случаев.
На что влияет размер кластера
С точки зрения операционной системы диск представляет собой массив минимальных блоков информации — кластеров.
При записи файла он всегда занимает на диске определенное число блоков. Например, при записи файла в 12 байт он занимает на диске минимальное возможное пространство в 1 блок. При величине блока в 512 байт реально используется 12 байт, а остальные 500 теряются бесполезно.
Таким образом, чем меньше блок, тем более экономно расходуется дисковое пространство.
Длинный файл представляет собой цепочку блоков. Чем меньше размер, тем больше блоков в цепочке. Блоки могут оказаться разбросаны по разным секторам и дорожкам весьма хаотично. Контроллеру диска придется разыскивать последовательно блок за блоком на разных дорожках, и этот процесс может занять значительное время.
Чем больше кластер, тем меньше их в файле, и тем быстрее происходит его поиск, чтение или запись.
Оптимальная величина кластера — это компромисс между скоростью и экономией дискового пространства.
Вместо послесловия
Мы с вами коротко разобрались с кластерами на жестком диске и с влияет их размера на хранение данных. Как видите, универсальный совет об оптимальном размере кластера дать очень сложно – здесь нужно выбрать оптимальное значение в зависимости от конкретных потребностей. Ну а в большинстве случаев наверное стоит оставить значение, предложенное системой.
Рисунок взят из оригинальной статьи.
Размер кластера при форматировании флешки
Общее правило форматирования: чем больше длина файлов, которые предполагается хранить, тем большую величину следует выбирать при форматировании. При отсутствии особых показаний оставлять значение по умолчанию.
Операции, выполняемые мастером
- Желательно поместить новую реплику на чанк-сервер с наименьшей средней загруженностью дисков. Это будет со временем выравнивать загруженность дисков на различных серверах.
- Желательно ограничить число новых создаваемых чанков на каждом чанк-сервере. Несмотря на то, что создание чанка сама по себе быстрая операция, она подразумевает последующую запись данных в этот чанк, что уже является тяжелой операцией, и это может привести к разбалансировке объема трафика данных на разные части системы.
- Как сказано выше, желательно распределить чанки среди разных стоек.
Файловая система
Величина доступного размера кластера зависит от файловой системы на жестком диске. Вы можете ознакомиться с поддерживаемыми размерами для разных файловых систем и версий Windows на официальном сайте Microsoft.
Проверить, какая файловая система у вас вы сможете в окне свойств диска, щелкнув по нему правой кнопкой мышки в Проводнике и выбрав «Свойства» из контекстного меню.
Видео
Из этого видео вы узнаете, как самостоятельно правильно отформатировать флешку.
Поставь лайк, это важно для наших авторов, подпишись на наш канал в Яндекс.Дзен и вступай в группу Вконтакте
Этой заметкой я хочу ответить на вопросы «что такое сектор» и «что такое кластер», в чем их отличие и для чего сектора и кластеры нужны.
Для этого нам нужно будет разобраться с принципами хранения информации, и давайте поговорим о самых основах.
Для хранения данных все носители информации имеют специальную разметку. Давайте рассмотрим упрощенную схему подобной разметки на примере жесткого диска.
Жесткий диск имеет несколько «блинов» (дисков), на магнитную поверхность которых и записываются данные (смотрите рисунок выше).
Каждый блин имеет круглую форму и разметка такого блина выглядит так:
Каждый диск разбит на треки (дорожки), а каждая дорожка поделена на сектора. Это конечно, очень упрощенная схема, но она дает представление о том, что такое сектор.
Сектор – это минимальная пронумерованная область диска, в которой могут храниться данные. Обычно размер одного сектора составляет 512 байт.
Для нормальной работы операционной системы на жестком диске создается файловая система. Файловая система использует сектора для хранения файлов, но из-за некоторых ограничений и особенностей различных файловых систем, сектора носителя информации обычно объединяются файловой системой в кластеры. Это означает, что кластер является минимальной областью файловой системы, предназначенной для хранения информации и он может состоять как из одного, так и из нескольких секторов.
Чтобы проиллюстрировать вышесказанное приведу картинку из Википедии:
На этом рисунке замечательным образом продемонстрирована структура диска. Буквой «А» обозначена дорожка, буквой «В» — геометрический сектор диска, а буквой «С» — сектор дорожки. Далее из рисунка видно, что кластер «D» может занимать несколько секторов дорожки (кластер выделен на рисунке зеленым).
В различных файловых системах кластер мог иметь размеры от 512 байт (один сектор) до 64 кбайт (128 секторов). В наиболее популярной в настоящее время файловой системе NTFS размер кластера можно установить от 512 байт, до 4096 байт (8 секторов).
Размером кластера можно управлять в некоторых пределах — его можно задать при форматировании носителя информации.
Наверняка, многие из нас слышали про кластер на жестком диске. Давайте попробуем разобраться, что это такое, и на что влияет его размер.
Взаимодействия внутри системы
Выше была описана архитектура системы, которая минимизирует вмешательства мастера в выполнение операций. Теперь же рассмотрим, как взаимодействуют клиент, мастер и чанк-серверы для перемещения данных, выполнения атомарных операций записи, и создания резервной копии (snapshot).
Каждое изменение чанка должно дублироваться на всех репликах и изменять метаданные. В GFS мастер дает чанк во владение(lease) одному из серверов, хранящих этот чанк. Такой сервер называется первичной (primary) репликой. Остальные реплики объявляются вторичными (secondary). Первичная реплика собирает последовательные изменения чанка, и все реплики следуют этой последовательности, когда эти изменения происходят.
Механизм владения чанком устроен таким образом, чтобы минимизировать нагрузку на мастера. При выделении памяти сначала выжидается 60 секунд. А затем, если потребуется первичная реплика может запросить мастера на расширение этого интервала и, как правило, получает положительный ответ. В течение этого выжидаемого периода мастер может отменить изменения.
Рассмотрим подробно процесс записи данных. Он изображен по шагам на рисунке, при этом тонким линиям соответствуют потоки управления, а жирным потоки данных.
Этот рисунок также взят из оригинальной статьи.
- Клиент спрашивает мастера, какой из чанк-серверов владеет чанком, и где находится этот чанк в других репликах. Если необходимо, то мастер отдает чанк кому-то во владение.
- Мастер в ответ выдает первичную реплику, и остальные (вторичные) реплики. Клиент хранит эти данные для дальнейших действий. Теперь, общение с мастером клиенту может понадобиться только, если первичная реплика станет недоступной.
- Далее клиент отсылает данные во все реплики. Он может это делать в произвольном порядке. Каждый чанк-сервер будет их хранить в специальном буфере, пока они не понадобятся или не устареют.
- Когда все реплики примут эти данные, клиент посылает запрос на запись первичной реплике. В этом запросе содержатся идентификация данных, которые были посланы в шаге 3. Теперь первичная реплика устанавливает порядок, в котором должны выполняться все изменения, которые она получила, возможно от нескольких клиентов параллельно. И затем, выполняет эти изменения локально в этом определенном порядке.
- Первичная реплика пересылает запрос на запись всем вторичным репликам. Каждая вторичная реплика выполняет эти изменения в порядке, определенном первичной репликой.
- Вторичные реплики рапортуют об успешном выполнении этих операций.
- Первичная реплика шлет ответ клиенту. Любые ошибки, возникшие в какой-либо реплике, также отсылаются клиенту. Если ошибка возникла при записи в первичной реплике, то и запись во вторичные реплики не происходит, иначе запись произошла в первичной реплике, и подмножестве вторичных. В этом случае клиент обрабатывает ошибку и решает, что ему дальше с ней делать.
Немного теории
Кластером называется минимальная часть пространства на жестком диске, выделяемая системой для хранения там файлов. Используемый в операционной системе диск имеет организацию именно на основании кластера. В подавляющем большинстве случаев общий размер файла несколько меньше суммы размеров кластеров, в которых он хранится на винчестере.
Чтобы было понятнее, рассмотрим пример – если посмотреть в свойствах папки, мы увидим, что фактический размер, занимаемый ей на винчестере, больше реального.
Как это работает
Размер кластера (или, другими словами, размер единицы распределения) обычно задается при форматировании, и на эту величину обычно не обращают внимания, оставляя рекомендованное системой значение.
И если на нашем диске размер кластера будет 4 кБ (рекомендованный Windows), то минимальное физическое пространство, занимаемое файлом, будет равно размеру кластера – 4 кБ.
Два таких файла займут, соответственно, размер 8 кБ и т.д.
То есть, при выбранном большом размере кластера файлы малого объема будут занимать значительное место на диске. Но большой размер кластера имеет и другие преимущества – в частности увеличение производительности работы жесткого диска. При минимальном размере кластера количество неиспользуемого дискового пространства при хранении файлов малого объема будут меньше.
Файловая система для флешки
Флеш-накопители на заводе по умолчанию форматируются под FAT-32.
Это наиболее универсальная на сегодняшний день система, с которой работают практически все устройства: как старые, так и новые.
Единственное практически важное ограничение — размер файла не может быть больше 4 Гб.
Если есть необходимость записи файлов более 4 Гб, например, игр или фильмов, можно отформатировать под NTFS или под ExFAT. Но будьте готовы к тому, что более старые устройства не смогут работать с этими системами.
Что такое форматирование
Форматирование носителя — это его разметка для подготовки к использованию для чтения или записи информации.
Различают низкоуровневое и высокоуровневое форматирование.
- Низкоуровневое форматирование подразумевает предварительную разметку носителя, формирование базовой структуры в виде дорожек и секторов. Выполняется заводом-изготовителем и впоследствии, как правило, не меняется. После низкоуровневого форматирования производится разбиение диска на разделы.
- На этапе высокоуровневого форматирования формируется логическая структура диска.
Различают два вида форматирования: быстрое и полное.
- При быстром форматировании формируется только файловая таблица.
- При полном форматировании сначала проходит проверка состояния носителя. Поврежденные сектора помечаются как непригодные для использования, и информация в них впоследствии не пишется. И только после этого формируется файловая таблица.
Метаданные
Мастер хранит три важных вида метаданных: пространства имен файлов и чанков, отображение файла в чанки и положение реплик чанков. Все метаданные хранятся в памяти мастера. Так как метаданные хранятся в памяти, операции мастера выполняются быстро. Состояние дел в системе мастер узнает просто и эффективно. Он выполняется сканирование чанк-серверов в фоновом режиме. Эти периодические сканирования используются для сборки мусора, дополнительных репликаций, в случае обнаружения недоступного чанк-сервера и перемещение чанков, для балансировки нагрузки и свободного места на жестких дисках чанк-серверов.
Мастер отслеживает положение чанков. При старте чанк-сервера мастер запоминает его чанки. В процессе работы мастер контролирует все перемещения чанков и состояния чанк-серверов. Таким образом, он обладает всей информацией о положении каждого чанка.
Важная часть метаданных — это лог операций. Мастер хранит последовательность операций критических изменений метаданных. По этим отметкам в логе операций, определяется логическое время системы. Именно это логическое время определяет версии файлов и чанков.
Так как лог операций важная часть, то он должен надежно храниться, и все изменения в нем должны становиться видимыми для клиентов, только когда изменятся метаданные. Лог операций реплицируется на несколько удаленных машин, и система реагирует на клиентскую операцию, только после сохранения этого лога на диск мастера и диски удаленных машин.
Мастер восстанавливает состояние системы, исполняя лог операций. Лог операций сохраняет относительно небольшой размер, сохраняя только последние операции. В процессе работы мастер создает контрольные точки, когда размер лога превосходит некоторой величины, и восстановить систему можно только до ближайшей контрольной точки. Далее по логу можно заново воспроизвести некоторые операции, таким образом, система может откатываться до точки, которая находится между последней контрольной точкой и текущем временем.
Что такое кластер
Итак, минимальный фрагмент информации на диске — это сектор размером 512 байт.
Работать с фрагментами такого малого размера не всегда удобно, поэтому файловая система работает не с отдельными секторами, а с блоками секторов, называемыми кластерами.
Величина кластера может меняться в зависимости от того, сколько секторов объединяется в кластер. Минимальный размер кластера — 512 байт, максимальный — 32 МБ.
Таким образом, минимальный фрагмент информации, который может быть записан на диск или считан с него, равен в общем случае не сектору, а кластеру.
Читайте также: