Пробуем кластерную файловую систему GridFS
Сейчас есть множество кластерных файловых систем, например DRBD, GlusterFS и другие. В этой заметке я хочу рассказать о файловой системе GridFS, от разработчиков MongoDB стартапа 10gen. Интерес к кластерным ФС возник у меня не случайно, а в следствии поиска решения задачи распределённого хранения картинок пользователей (ака CDN).
10gen stack
Вообще 10gen предлагают свой стек технологий на подобии LAMP.
Файловая система в нём представлена несколькими системами, главной из которых является масштабируемая универсальная система GridFS, которая является и хранилищем данных для документо-ориентированной базы данных MongoDB. Для хранения файлов проекта (исходный код скриптов, CSS, HTML и другие файлы) применяется надстройка SCF (Source Code Filesystem), которая работает и управляется поверх системы контроля версий Git (заметьте, в подобных проектах очень удобно совмещать систему контроля версий и непосредственно каталог проекта, который доступный через веб-сервер, поэтому и в Aptana Cloud применяется такой подход, правда через более привычный SVN).
GridFS
Основная прелесть GridFS заключается в том, что распределение файлов она берет полностью на себя. Думаю вам стоит посмотреть короткую презентацию про эту ФС.
Установка и настройка GridFS в Ubuntu
1. Подготовка системы (установка пакетов в т.ч. библиотек Boost и Fuse)
|
1 |
sudo aptitude install build-essential libcurl4-openssl-dev libxml2-dev libfuse-dev comerr-dev libfuse2 libidn11-dev libkrb5-dev libldap2-dev libselinux1-dev libsepol1-dev pkg-config fuse-utils sshfs libboost-all-dev libattr1 libattr1-dev scons |
2. Устанавливаем Mongodb. Нам нужна версия > 1.1.2
|
1 |
sudo aptitude install mongodb |
3. Скачиваем gridfs-fuse с помощью git (или вручную через github.com).
На самом деле авторским является вот этот репозиатрий, однако его исходники у меня не компилятся, а вот с репозитария chealand вполне.
|
1 2 |
cd ~ git clone https://github.com/cheald/gridfs-fuse.git |
4. Компилируем его с помощью scons
|
1 2 |
cd ./gridfs-fuse/ scons |
5. Монтируем GridFS
Теперь у нас скомпилился бинарник mount_gridfs, попробуем примонтировать его к нашей системе.
|
1 2 |
sudo mkdir /media/gridfs sudo ./mount_gridfs --db=test --host=localhost /media/gridfs |
6. Проверяем работу GridFS, например попробуем скопировать файл utils.h в неё
|
1 2 |
sudo ls /media/gridfs sudo cp utils.h /media/gridfs/utils.h |
А теперь попробуем прочитать его с помощью ls и mongofiles
|
1 2 3 4 5 |
andrey@vbox:~/gridfs-fuse$ sudo ls /media/gridfs utils.h andrey@vbox:~/gridfs-fuse$ mongofiles list connected to: 127.0.0.1 utils.h 1911 |
Файл на месте, теперь для удобства можно перекинуть mount_gridfs в /usr/bin и прописать монтирование в стартовые скрипты.
Недостатки GridFS и перспективы
Т.к. сейчас GridFS-fuse это экспериментальный проект, то в примонтированном диске нельзя создавать папки. Хотя никто не запрещает монтировать разные базы в разные каталоги, что может частично устранить эту проблему.
Однако если учесть, что небезызвестная Sequoia Capital только что инвестировала в 10gen 20 миллионов долларов (а ещё 10 миллионов у них уже было), похоже что у проекта GridFS есть хорошие перспективы среди кластерных файловых систем.
Mongofiles
В поставке mongodb есть замечательная утилиат mongofiles, которая позволяет закачивать/выкачивать и просматривать файлы в GridFS. Она поддерживает команды list, put, get для файлов.