Задать вопрос

Как сделать простой горизонтальный шардинг для файловой системы?

Данные хранятся в файловой системе в папках нескольких уровней. Целый id транслируется в "адрес" папки, например, /data/AF/BF/C4/06/, где лежит несколько бинарных файлов с наборами данных для этого id.

Хостится у недорогого провайдера, где выгоднее взять ещё одну коробку, чем нарастить диск в существующей. По мере роста пришлось подключить несколько новых серверов и перенести на них часть деревьев. Верхний уровень папок теперь разбит как-то так:
00–3F – основной сервер
40–7F – 1-й дополнительный
80–FF – 2-й дополнительный

Делалось всё в спешке, поэтому просто подключил папки с доп. серверов по NFS и вместо части папок в /data/ теперь лежат симлинки на NFS маунты. Всё работает ок.

Теперь хочется задействовать и вычислительные способности доп. серверов, запуская worker'ов или бэкапы на них.

В принципе, можно симметрично замаунтить на них папки с «удалённых» серверов и так же, симлинками собрать полный набор папок 00–FF в рабочей папке данных.

«Правильно» ли будет такое масштабирование проекта? На каждом из N серверов будет N–1 маунтов с остальных.

Один раз попробовал так сделать – почти всё отработало, но появились «артефакты», с которыми так и не разобрался: при создании новой под-под-папки на одном из серверов возникали циклические симлинки, если имя создаваемой папки совпадало с именем родительской.

Например, требовалось создать /data/AF/C7/C7/56/ (из php, mkdir() с $recursive = true). /data/AF/C7 уже существовала, но вместо вложенной в неё новой папки C7 создавался симлинк на родительский C7, и скрипт вылетал с критической ошибкой о невозможности создания директории. Так и не понял, почему это возникает.

Может быть, стоит посмотреть на другие решения для хранения файловых данных и горизонтального шардинга? Hadoop'овский HDFS кажется overkill'ом для моей маленькой задачи.
  • Вопрос задан
  • 337 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
zoonman
@zoonman
⋆⋆⋆⋆⋆
Ответ написан
Комментировать
@dglushenok
Возможно Вам подойдет Gluster.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы