Оригинал:
Автор: Jeffrey B. Layton
Дата публикации: June 29th, 2010
Перевод: Н.Ромоданов
Дата перевода: июль 2010 г.
Общеизвестно, что в Linux есть значительное количество файловых систем. Некоторые из них недооценены и могут быть весьма полезными не только в тех сферах, для которых они предназначались. Система OCFS2 является кластерной файловой системой, которую первоначально выпустила фирма Oracle и которая может стать замечательной основой для файловой системы общего назначения, где требуется совместный доступ к данным.
В последнее время я говорил о серверах NAS, уделяя особое внимание сетевой файловой системе NFS. Одним из сложных вопросов, связанных с сервером NAS, является его расширение, как по емкости, так и по его производительности. Во многих ситуациях вы ограничены тем объемом хранения, который предоставляется сервером / хранилищем данных, зависящих от имеющихся аппаратных средств, но почти во всех случаях вы еще ограничены одним шлюзом NFS, а это обусловлено тем, что на сервере используется локальная файловая система (Примечание: Есть исключения, но они являются проприетарными и во многих случаях стоят больших денег). Не правда ли, было бы замечательно, масштабировать хранилище данных по мере необходимости и увеличивать число шлюзов NFS (или даже шлюзов CIFS)? Одним из подходов к этому будет использование кластерной файловой системы.
Кластерная файловая система является системой, которая одновременно устанавливается на нескольких серверах. При этом предполагается наличие какого-нибудь общего диска (общего хранилища), которым, как правило, является устройство SAN или внешний RAID массив, благодаря этому серверам обеспечивается прямой доступ к диску на уровне блоков. Можно легко представить проблемы с кластерной файловой системы в случае, когда несколько серверов одновременно пытаются получить доступ к одному и тому же файлу или одной и той же части файла. Чтобы это предотвратить, в кластерной файловой системе, как правило, реализован особый механизм одновременного доступа к файлу или к части файла. Обратите внимание, что этот механизм отсутствует в обычных локальных файловых системах. Таким образом, кластерные файловые системы могут быть сложнее, чем локальные файловые системы.
Предоставление доступа к хранилищу данных с серверов осуществляется по протоколу на уровне блоков. Типичными протоколами являются SCSI (обычно используется при совместном доступе к внешнему массиву RAID), ISCSI, ATA поверх Ethernet, InfiniBand и Fibre Channel (оптоволоконный канал). В Linux поддерживаются все эти протоколы, но некоторые аппаратные устройства могут не поддерживаться в Linux. Очень простым примером является
Одной из таких кластерных файловых систем в Linux является система OCFS2 (“Oracle Clustered File System – 2” — Кластерная файловая система фирмы Oracle – 2). Файловая система была разработана на основе системы OCFS, которая полностью фокусировалась на требования систем хранения, использующих базы данных. В OCFS2 добавлено соответствие POSIX и есть другие возможности, которые очень полезны при совместном доступе к данным без использования баз данных. Давайте кратко рассмотрим систему OCFS2, но начнем с системы OCFS.
OCFS (Oracle Clustered File System – Кластерная файловая система фирмы Oracle)
Фирма Oracle разработала систему OCFS как файловую систему совместного доступа к дискам, предназначенную для использования с кластерными базами данных фирмы Oracle. Это означает, что хотя она и весьма полезна, ее применение ограничено из-за отсутствия совместимости с POSIX (если совместимость для вас важна – смотрите). Система была разработана в соответствии с лицензией GNU Public License (GPL), и, хотя она никогда не была частью ядра, она используется в Linux теми, кому требуется Oracle. Но эта система была заменена системой OCFS2.
Система OCFS2
Система OCFS была заменена системой OCFS2, в которой добавлена совместимость с POSIX, что сильно расширило область применения системы. Одно из преимуществ OCFS2, помимо обеспечения совместимости с POSIX, состоит в том, что она была интегрирована в ядро 2.6.16. Пометка “experimental” (“Экспериментальная”) была убрана с системы OCFS2 в версии ядра 2.6.19.
На разработку конкретных элементов файловой системы OCFS2 оказала влияние файловая система ext3, но, в отличие от ext3, все элементы системы OCFS2 имеют собственную реализацию. Например, в системе используется понятие экстентов (extents), которое есть в системе ext4. В добавок, вместо того, чтобы использовать свою собственную подсистему журналирования, в ней первоначально использовалась система
В ядре 2.6.28 система OCFS2 была переведена на использование слоя журналирования JBD2, в котором преодолено 32-битовое ограничение JBD. Как сообщает Сунил Машран (Sunil Mushran ), разработчик OCFS2, к моменту написания данной статьи, поддержка файловых систем, имеющих размер больше 16 ТБ, еще до сих пор полностью не включена. Теоретически размер файловой системы может быть больше 16 Тб (теоретически предел составляет около 4 Петабайт), но, согласно Сунилу, система не тестировалась на размерах, больших 16 ТБ. Вместе с тем он считает, что в этом году будет реализована поддержка файловых систем, размер которых больше 16 Тб.
Одной из ключевых особенностей OCFS2 является менеджер блокировок. Распределенный менеджер блокировок играет роль инспектора ГИББД в тех случаях, когда разные процессы пытаются получить доступ к одному и тому же файлу или диапазону данных. В сущности менеджер блокировок предоставляет процессам доступ к различным частям файлов только на чтение или на запись. В результате предотвращается возможность перезаписи данных различными процессами, что недопустимо. Менеджер блокировок поставляется с системой OCFS2 с самого ее появления, является ее неотъемлемой частью и не снижает характеристик системы. Обычно менеджер блокировок называется DLM (Distributed Lock Manager — Распределенный менеджер блокировок), есть несколько менеджеров DLM, и один из них – в OCFS2.
Создание менеджера блокировок, работающего в распределенной среде, может показаться простым делом, хотя таким оно, определенно, не является. Одна из основных причин в том, что менеджер должен правильно работать в сети, в которой возможны задержки при выполнении администрирования. Кроме того, менеджер должен правильно работать при добавлении или удалении узлов, для групп узлов, а также должен быть адаптирован к случаям, когда узел, который заблокирован, вышел из строя (но, возможно, возобновит работу). Это нетривиальная задача, но она является ключевой в кластерных файловых системах.
В OCFS2 имеется широкий спектр дополнительных возможностей, перечисленных ниже.
- Система OCFS2 нейтральна к используемым кодировкам, допускаются кодировки little endian (например, x86 и x86_64) и big endian (например, PowerPC), а также 32-битовые и 64-битовые кодировки.
- Система поддерживает ввод/вывод с прямым доступом (direct IO), асинхронный ввод/вывод (asynchronous IO), буферированный ввод/вывод (buffered IO), ввод/вывод вида splice (добавлено в версии 1.4) и ввод/вывод с отображением в память (memory mapped IO).
- Система поддерживает большие иноды, что хорошо для маленьких файлов, поскольку файлы можно хранить в самом иноде (улучшается производительность).
- Система отслеживает время модификации файлов (mtime), время доступа к файлам (atime) и время модификации атрибутов файла (ctime). Можно также использовать относительное время доступа к файлу (relative access time).
- Поддерживаются режимы журналирования вида ordered и writeback
- Поддерживаются права доступа в стиле Unix, а также списки контроля доступа (ACL).
- В ядре 2.6.29 добавлено использование контрольных сумм метаданных (снижает вероятность разрушения метаданных).
- В системе поддерживается использование блоков различного размера (512 байтов, 1 КБ, 2 КБ и 4 КБ), рекомендуемый размер – 4 КБ.
- Система позволяет выделять для хранения данных блоки различного размера (размер единичного блока, выделяемого под хранение файловых данных). В версии 1.4 системы OCFS2 разрешается использовать следующие размеры: 4 КБ, 8 КБ, 16 КБ, 32 КБ, 64 КБ, 128 КБ, 256 КБ, 512 КБ и 1 МБ. Рекомендуемый размер – 4 КБ.
В OCFS2 есть также набор пользовательских инструментальных средств. Имеется два пакета: ocfs-tools, который является интерфейсом командной строки, и ocfs2console, который представляет собой графический интерфейс. В документации по конфигурированию кластерной файловой системы предлагается использовать графический интерфейс, но многие настройки, описываемые в HOWTO, делаются вручную (конфигурационный файл читается сравнительно просто).
Хотя OCFS2 является кластерной файловой системой, диски можно монтировать как кластерные тома или как локальные (используемые на одном узле) тома. Если вам потребуется повысить производительность, вам, возможно, нужно будет добавить еще узлы в кластер OCFS2. Добавление узла к существующей системе выполняется довольно легко. Согласно Сунилу, “Добавление узлов в кластер – достаточно простой процесс. Вам не потребуется размонтировать том перед его добавлением. Просто оставьте его смонтированным на узле (узлах). Если новый узел уже зарегистрирован, то просто смонтируйте том на новом узле. Монтирование будет тем толчком, который позволит другим узлам подключаться к новому узлу. Затем после подключения новый узел можно подсоединить к домену DLM и т.д. Все эти операции прозрачны и выполняются с помощью команды монтирования”. В руководстве по OCFS2 есть инструкции о том, как добавлять узлы, которые не зарегистрированы.
Где и когда вы можете использовать систему OCFS2 без баз данных
Название статьи “OCFS2: Недооцененная файловая система Linux”, поскольку, хотя и утверждается, что OCFS2 является лучшей файловой системой для Oracle, ее совместимость с POSIX и гибкость делают ее полезной не только для использования с базами данных.
Наиболее типичное использование – создание кластерной файловой системы с двумя узлами. Вы просто берете два узла, которые совместно обращаются к некоторому общему устройству хранения данных (возможно, через оптический канал FC, через ISCSI или через SCSI) и имеют общую сеть TCP, а затем конфигурируете систему OCFS2 для этих двух узлов. Вы сможете через OCFS2 обмениваться данными между этими двумя узлами, но только между двумя узлами. Вы сможете нарастить кластер и добавить несколько узлов, но вы ограничены обменом данными только между узлами OCFS2. Несмотря на все наши пожелания, в системе OCFS2 есть ограничения по масштабированию, связанные с производительностью, шириной пропускания и надежностью подключения узлов к сети, шириной пропускания и надежностью подсистем хранения данных, а также с требованиями к процессорам и памяти для каждого узла. Таким образом, число узлов на практике зависит от того, какая требуется производительность от комбинации файловой системы / системы хранения данных.
Мы легко можем использовать узлы OCFS2 как шлюзы NFS других клиентов, позволяющие обмен данными с другими системами. В этом случае каждый узел файловой системы OCFS2 должен быть достаточно производительным (т.е. иметь более двух ядер), поскольку он будет функционировать не только как узел ввода / вывода (т. е. как часть файловой системы OCFS2), но также и как шлюз NFS. Если у вас в OCFS2 более одного узла, вы можете использовать каждый из узлов в качестве шлюза NFS, поделив клиентов поровну между узлами. Это поможет снизить нагрузку на конкретный шлюз, но потребует дополнительной работы по администрированию. Обычно клиентов требуется распределять по шлюзам, но вы также можно использовать циклическую перенастройку DNS с тем, чтобы уменьшить административные расходы – для этого потребуется дополнительная настройка начальной конфигурации DNS.
Преимущество от использования OCFS2 как базы для NFS, заключается в том, что если вам нужно больше места для хранения данных, вы просто добавляете еще устройства хранения данных. Если вам нужно увеличить общую производительность, вы можете добавить к кластеру OCFS2 новый узел, который затем может стать шлюзом NFS. Хотя в результате производительность отдельного клиента не улучшится, совокупная общая производительность повысится.
Заключение
Система OCFS2 является в мире баз данных очень хорошо известной файловой системой, особенно для Oracle. Но в мире хранилищ данных для Linux, возможно, недооценивают тот факт, что система совместима с POSIX. Если рассматривать ее как файловую систему с одним узлом, в ней есть ряд интересных функций, таких как экстенты и контрольные суммы метаданных, но, возможно, более важно то, что она является кластерной файловой системой. Это означает, что в качестве общего хранилище данных должны быть использованы такие средства, как SAN или внешние массивы RAID.
Что касается обычных Linux функций хранения данных, то систему OCFS2 можно использовать как базу для NFS. Это позволит вам легко увеличивать емкость файловой системы путем добавления устройств к SAN. Каждый узел OCFS2 может выступать в качестве сервера NFS (шлюза) со своим собственным набором клиентов. Это позволит вам балансировать трафик NFS между узлами OCFS2, хотя, в действительности, это делается вручную (например, для балансировки клиентов вам на каждом узле OCFS2 потребуется больше памяти). И, на всякий случай, вы сможете установить Samba и использовать OCFS2 как базу для CIFS (я не знаю, возможно ли это, но не вижу препятствий). Если для этого вам потребуется платная поддержка, фирма Oracle также предусматривает и это.
Дайте шанс системе OCFS2. Взгляните на нее, попробуйте ее на нескольких тестовых машинах и посмотрите, насколько она удовлетворяет вашим требованиям. Я думаю, вы будете удивлены.