Назад | Перейти на главную страницу

Как разделить систему каталогов для GlusterFS?

У нас есть 3 папки на машине Ubuntu 14.04, каждая из которых содержит 250К изображений размером от 2КБ до 30КБ в каждой папке, и ожидается, что их размер увеличится до 1M файлов на каталог.

Пытаясь масштабировать приложение на несколько серверов, мы ищем Glusterfs для общего хранилища. Поскольку файлы размером 250K не являются проблемой для ext4, это кажется проблематичным для glusterfs. При попытке скопировать файлы машина полностью вылетает.

Я хочу разделить файлы на каталоги на 2 уровня:

mkdir -p {000..255} / {000..255}

/000/000/filename
/001/000/filename
/001/001/filename
...

Это звучит как хороший разумный способ? Позже вся структура будет содержать миллионы файлов. Может ли это позволить glusterfs быть надежным в продакшене с хорошей производительностью и размещать миллионы файлов?

Использование GlusterFS для хранения и доступа к большому количеству очень маленьких файлов представляет собой сложность, с которой сталкиваются многие реализации, и кажется, что вы уже на правильном пути решения проблемы: разбиение файлов на отдельные каталоги.

Вы можете реализовать подобное решение. Просто создайте группу каталогов, выберите ограничение на количество файлов, которые могут быть помещены в каждый каталог, и надейтесь, что у вас не закончится место для размещения файлов. В вашем примере вы создаете более 65 тысяч каталогов, поэтому в ближайшее время это вряд ли станет проблемой.

Другой вариант - создавать каталоги на основе даты создания файла. Например, если файл cust_logo_xad.png был создан сегодня, он будет храниться здесь:

/gluster/files/2015/08/24/cust_logo_xad.png

Если вы размещаете данные для разных сущностей (клиентов, отделов и т. Д.), Вы можете разделять файлы в зависимости от владения, присвоив сущности какой-то уникальный идентификатор. Например:

/gluster/files/ry/ry7eg4k/cust_logo_xad.png

Кроме того, было бы неплохо взглянуть на Документация GlusterFS для настройки кластера хранения для размещения небольших файлов. По крайней мере, убедитесь, что:

  1. В файловых системах на серверах хранения GlusterFS имеется достаточно свободных inodes (mkfs вариант)
  2. Диски на серверах хранения GlusterFS могут обрабатывать большое количество операций ввода-вывода в секунду.
  3. Вы используете соответствующую файловую систему для задачи (ext4 или xfs)
  4. Ваше приложение / сотрудники не пытаются часто сканировать каталоги с большим количеством небольших файлов.

Если вы можете (а если вы еще этого не сделали), рекомендуется создать базу данных, которая будет служить индексом для файлов, а не сканировать (например, ls) или поиск (например, find) для файлов все время.