- Установка.
- Настройка.
- Основные понятия Хост/Устройство Домен/Класс. Как хранятся данные и каким образом отдаются.
- Внутреннее устройство.
- Выводы.
Установка
Весь процесс установки для Ubuntu можно прочесть тут: http://code.google.com/p/mogilefs/wiki/InstallOnUbuntu
Настройка
И привожу примеры своих рабочих конфигов (хранятся по-умолчанию в /etc/mogilefs).
---mogilefsd.conf ---
#daemonize = 1
db_dsn = DBI:mysql:mogilefs:host=127.0.0.1
db_user = root
#db_pass =
listen = 127.0.0.1:7001
conf_port = 7001
listener_jobs = 10
delete_jobs = 1
replicate_jobs = 5
mog_root = /mnt/mogilefs
reaper_jobs = 1
---mogstored.conf ---
maxconns = 10000
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501
docroot = /var/mogdata
Установить mogadm для администрования сервера MogileFS
Документация, исходные тексты и инструкция по инсталляции тут: http://search.cpan.org/~dormando/MogileFS-Utils/mogadm
Модуль для php: http://pecl.php.net/package/mogilefs/
Установка: http://projects.usrportage.de/index.fcgi/php-mogilefs/wiki/installation
Также по требуется nginx собранный с модулем mogilefs
Установка, конфигурация, исходники: http://grid.net.ru/nginx/mogilefs.ru.html
Стоит учесть, что порт трекера по-умолчанию 7001, в случае другого порта требуется указать его в настройках nginx
Основные понятия Хост/Устройство Домен/Класс. Как хранятся данные и каким образом отдаются.
domain> - глобальный неймспейс для трекера.
class - уникальный относительно домена идентификатор класса объекта, для которого могут быть настроены кастомные политики репликации. Обычно соответствует определенному типу файлов, скажем mp3, картинки.
host - физический сервер (коннектор трекера)
device - устройство для хранения данных при надлежащее некоторому хосту. На физическом уровне соответствует под папке в папке docroot(/var/mogdata) с соответствущим идентификатору названию + префикс dev (пример: dev1).
Для начала создадим хост:
# mogadm host add 127.0.0.1 --status=alive
# mogadm host list
127.0.0.1 [1]: alive
IP: 127.0.0.1:7500
Теперь добавим устройства с уникальным идентификатором "1" и "2" на сервере 127.0.0.1:
# mogadm device add 1 127.0.0.1 --status=alive
# mogadm device add 2 127.0.0.1 --status=alive
# mkdir /var/mogdata/dev1
# mkdir /var/mogdata/dev2
# chmod -R 700 /var/mogdata
# chown -R mogstored:nobody /var/mogdata
# cat /var/mogdata/dev1/usage
available: 13116348
device: /dev/sda6
disk: /var/mogdata/dev1
time: 1246615145
total: 21568432
use: 36%
used: 7356456
# mogadm device list
127.0.0.1 [1]: alive
used(G) free(G) total(G)
dev1: alive 7.016 13.553 20.568
dev2: alive 7.016 13.553 20.568
Все на этом законфилось конфигурирование физической части , теперь перейдем к добавлению домена (test) и класса(default1) с минимальным кочичеством копий данных на разных устройствах равным = 2
# mogadm domain add test
# mogadm class test default1 --mindevcount=2
# mogadm domain list
domain class mindevcount
-------------------- -------------------- -------------
test default1 2
Собственно все. На текущий момент у Вас работающая копия MogileFS с одним трекером 1 стораджем и 2 девайсами :)
Теперь напишем простой сркипт который положит себя в сторадж и достанет:
connect('127.0.0.1', 7001, 'test');
$client->put(__FILE__, 'self', 'default1');
$metadata = $client->get('self');
var_dump($metadata);
$client->close();
/*
array(3) {
["path2"]=>
string(51) "http://127.0.0.1:7500/dev2/0/000/000/0000000004.fid"
["path1"]=>
string(51) "http://127.0.0.1:7500/dev1/0/000/000/0000000004.fid"
["paths"]=>
string(1) "2"
}
*/
Тоесть видно что файлы хратся сразу на 2х устройствах, что соотвествует конфигурации, и их можно получить через веб напрямую с 7500 порта. Физически файлы также расположены оп приведенным путям. Балансирование через nginx позволяет стрыть реальные пути, и организовать контроль отдачи файлов, для защиты от скачивания или предоставления платного контента.
Внутреннее устройство
Рис. 1 Внутрее устройство MogileFS
Суть работы следующая существет множество трекеров и множество стораджей и всего одна база данных которая говрит, что и где сосбтвенно лежит.
Структура БД mogileFS
mysql> show tables;
+----------------------+
| Tables_in_mogilefs |
+----------------------+
| class | список классов
| device | список устройств
| domain | список доменов
| file | список файлов с уникальными ключами
| file_on | связка файл - устройство
| file_on_corrupt | связка файл -устройство
| file_to_delete | файлы для удаления
| file_to_delete_later | файлы для отложенного удаления
| file_to_replicate | файлы требующие репликации
| fsck_log | лог fsck
| host | список хостов
| server_settings | версия схемы данных
| tempfile | временные файлы
| unreachable_fids | битые файлы
+----------------------+
Put file:
- Файл загружается в трекер.
- Трекер создает запись в таблице file и загружает в сторадж после этого id файла помещается в таблицу file_to_replicate для репликации с другими серверами.
- Каждая реплика вычитает 1 из записи в таблице file_to_replicate. Производя копирование файла тебе отмечает в таблице file_on места хранения файла.
- Так продолжатся до тех пока запись в таблице file_to_replicate не достигнет 0, после чего запись удаляется и процесс реплицирования прекращается.
Get get:
- Идет подключение к одному из трекеров.
- Если файл не менялся данные берутся из кеша, если менялся трекер лезет в БД и смотрит где лежат файлы.
- После чего проверяется статус устройств alive/down
- Для живых устройств достаются сервера
- Трекер запрашивает сторадж для того, чтоб узнать жив он или нет.
- Найденные пути отдаются клиенту.
Выводы
Плюсы:
- простота установки и поддержки
- настройка параметров репликации
- API библиотеки для всех популярных языков программирования
Минусы:
- Как видно из архитектуры сервер БД - единая точка отказа. При выходе его из строя падает все.
- Производительность решения ограничена производительностью сервера БД.
- Не нативный интерфейс для загрузки и получения файлов.
Немає коментарів:
Дописати коментар