Наши постоянные читатели уже заметили, что редакция периодически публикует статьи, связанные с кластерными технологиями. Представляем очередную повесть об использовании кластерной файловой системы Lustre FS.
Уже прошли те времена, когда сайтов было мало и пользователи были согласны ждать, пока «упавший» сайт «подымется». В Интернете при столь высокой конкуренции даже пятиминутный сбой в работе сервиса вызывает отток пользователей к конкуренту. Поэтому каждый, кто хочет построить устойчивый сервис, должен начать с ее основ – отказоустойчивой файловой системы. Про одну такую файловую систему и пойдет речь.
Обзор современных кластерных систем
В этом разделе приведен список активно развиваемых кластерных файловых систем, включая коммерческие решения.
- GFS. Высоконадежная файловая система для совместного использования хранилищ Storage Area Network (SAN). Элементом хранения является блок файловой системы. Для исключения конфликтов при доступе к файлам используется распределенный блокировщик доступа Distributed Lock Manager (DLM). Из-за этого у GFS очень низкая масштабируемость и низкая производительность при большом количестве обращений серверов-клиентов.
- LustreFS. Высоконадежная файловая система с двумя подсистемами – сервер метаданных для хранения информации о файлах и сервер для хранения самих данных. Используется в больших вычислительных центрах. Пятнадцать суперкомпьютеров из мирового top30, включая Blue Gene/L, используют именно эту файловую систему. Элементом хранения является файл, в отличие от файловой системы GFS.
- GlusterFS. На данный момент находится в активной разработке и не рассматривается как пригодная для использования в промышленных масштабах.
- Google FS. Высоконадежная файловая система, устойчивая к сбоям. Но доступна только для использования в приложениях, написанных с помощью инструментария Google API.
Немного истории из личного опыта по использованию кластерных файловых систем.
Основные современные кластерные системы
Название
|
Производитель/владелец
|
Лицензия
|
Примечания
|
GFS
|
RedHat Inc
|
GPL
|
Используется распределенная система блокировки
|
Lustre
|
Sun Microsystems, Inc
|
GPL
|
Используется центральный сервер метаданных
|
GlusterFS
|
http://www.gluster.org
|
GPL
|
Запускается на уровне пользователя. Все еще находится в состоянии разработки
|
Google FS
|
Google, Inc
|
Доступна как часть Google API
|
–
|
Автор этих строк успешно установил и запустил в работу комплекс с использованием GFS, который включал в себя:
- HP StorageWorks 1000 как Storage Attached Network (SAN);
- пять серверов с операционной системой Linux;
- коммутатор FiberChannel для подключения серверов и вышеуказанного SAN.
Этот комплекс предполагался для построения отказоустойчивого хранилища статистического контента для веб-сайта. Максимальная скорость отдачи такого комплекса достигала 1 gbps, но при при повышении нагрузки начали сказываться недостатки Distributed Lock Manager, так как перед открытием файла сервер должен опросить все серверы для блокировки какого-то блока файловой системы и получить подтверждение, что блок свободен. В связи с низкой производительностью я продолжил исследование кластерных файловых систем и остановился на файловой системе Lustre.
Обзор структуры файловой системы Lustre
Файловая система Lustre (далее – Lustre) состоит из следующих подсистем:
- Сервер метаданных (MetaData Server (MDS)), который хранит имена файлов и каталогов и их права.
- Серверы для хранения самих данных (Object Storage Servers (OSSes)). Общий объем доступного пространства Lustre вычисляется как сумма пространств на этих серверах.
- Клиенты. Серверы, которые имеют доступ к файловой системе Lustre.
MDS, OSSes и клиенты могут располагаться как и на одном сервере, так и на разных серверах. Для взаимодействия Lustre поддерживает различные протоколы, включая Infiniband, TCP/IP поверх Ethernet, Myrinet и Quadrics.
OSS поддерживает файловую систему (на данный момент – ext3, в будущем – ZFS) для хранения локальных данных, которая экспортируется в кластер для операций чтения/записи.
Когда клиент пытается получить доступ к файлу, он обращается к серверу MDS за получением ссылки на OSS, где хранится сам файл, и в дальнейшем взаимодействует уже с конкретным сервером OSS.
Когда клиент пытается изменить файловую систему (например, запись файла), то он делегирует эту операцию серверу MDS. Таким образом мы получаем практически линейное масштабирование (особенно в режиме чтения), в отличие от блочных кластерных систем, таких как GFS, где клиент должен получить разрешение от всех серверов на модификацию блоков, принадлежащих какому-то файлу.
Это также обеспечивает целостность данных, так как модификацию данных производит только сервер MDS, а не несколько клиентов, которые потенциально могут неправильно работать с файловой системой.
Топология сети и файловой системы Lustre
Установка
В свой работе я использую CentOS, поэтому описание процедуры установки и настройки будет ориентировано на этот дистрибутив.
Сначала нужно получить по адресу http://www.sun.com/software/products/lustre/get.jsp следующие компоненты:
- ядро Linux с специальными патчами для Lustre;
- сами исходники Lustre.
Я использовал ядро версии 2.6.16.54 и версию 1.6.5 Lustre, которые были доступны по вышеуказанному адресу на момент установки.
Настройка и установка ядра Linux
Здесь процедура настройки, компиляции и установки ядра не отличается от типичных, за исключением следующих параметров настроек ядра:
- должна быть включена поддержка Quote, ext3;
- должна быть выключена поддержка preemt;
- также обязательна поддержка модулей.
Настраиваем, компилируем, устанавливаем новое ядро и перезагружаем. Эта процедура должна быть повторена на всех серверах MDS, OSS и серверах-клиентах.
Как вариант компания Sun Microsystems предоставляет предкомпилированные компоненты в формате .rpm и .deb.
Настройка и установка программы Lustre
Процесс установки программных компонентов Lustre тоже не отличается особой оригинальностью и выполняется следующими шагами:
tar -xzvf lustre-1.6.5.tar.gz
cd lustre-1.6.5
./configure
make
make install
Настройка и запуск системы
Первым шагом необходимо подготовить сервер MDS, который будет хранить метаданные. Для этого следует выделить отдельный раздел для этих данных и отформатировать:
mkfs.lustre --mdt --mgs --fsname=webstorage /dev/sdb
mount -t lustre /dev/sdb /mnt/mdt
где:
- параметр webstorage – имя файловой системы, используемое для идентификации хранилища внутри кластера;
- устройство /dev/sdb – раздел для хранения метаданных.
Примечание. Lustre FS поддерживает хранение и в файле, но с небольшой потерей производительности и надежности из-за дополнительного слоя (файловой системы, где хранится файл данных).
Следующий наш шаг – форматирование и подключение серверов OSS, где будут храниться данные.
На OSS1 выполняем следующие шаги:
mkfs.lustre --ost --fsname=webstorage —mgsnode=mds.domain.com@tcp0 /dev/sdb
mount -t lustre /dev/sdb /mnt/ost1
где:
- параметр webstorage – имя файловой системы;
- параметр mds.domain.com – адрес сервера MDS (обязательно, чтобы все серверы кластера могли получить IP по этому имени через DNS или путем прописывания записей в /etc/hosts) или можно использовать IP-адрес сервера MDS;
- устройство /dev/sdb – место для хранения самих данных.
Аналогично выполняем эти же шаги на серверах oss2.domain и oss3.domain.com, причем разделы для хранения данных могут быть отличными от разделов, используемых на других OSS. И теперь самое главное – подключение клиентов к нашей кластерной файловой системе:
mount -t lustre mds.domain.com:/webstorage /mnt/lustre
где:
- mds.domain.com – адрес нашего MDS (mds.domain.com);
- webstorage – имя файловой системы;
- /mnt/lustre – точка монтирования, где клиенты могут записывать и читать файлы.
Конечно, процесс запуска MDS, OSS и клиентов нужно прописать в файле /etc/fstab, чтобы при загрузке серверов активировались соответствующие сервисы (MDS и OSS) и подключались клиенты к файловой системе.
Строка для сервера MDS для файла /etc/fstab:
/dev/sdb /mnt/mdt lustre defaults 0 0
Строка для серверов OSS для файла /etc/fstab:
/dev/sdb /mnt/ost lustre defaults 0 0
Строка для клиентов для файла /etc/fstab:
mds.domain.com:/webstorage /mnt/lustre lustre defaults 0 0
Заключение
В первой части статьи я рассмотрел первые шаги по созданию хранилищ на основе кластерной системе Lustre. Во второй части я планирую описать такие необходимые операции, как увеличение надежности хранилища, процедуру создания архивных копий.
- http://en.wikipedia.org/wiki/GPFS.
- http://en.wikipedia.org/wiki/Google_File_System.
- http://en.wikipedia.org/wiki/Global_File_System.
- http://en.wikipedia.org/wiki/Lustre_(file_system).
- http://en.wikipedia.org/wiki/List_of_file_systems.