MogileFS — одна з перших опенсорсних відповідей на задачу, до якої рано чи пізно приходить будь-яка велика веб-платформа: як надійно й дешево зберігати десятки мільйонів файлів користувачів, не купуючи SAN і не довіряючи жодному окремому диску? У цьому посібнику розбираємо, що таке MogileFS, як саме працює його архітектура, чим він відрізняється від сучасних альтернатив на кшталт Ceph і S3-сумісних сховищ і як розрахувати реальний кластер на виділених серверах.
Одним реченням: MogileFS — це розподілена файлова система рівня застосунку з відкритим кодом, яка зберігає кожен файл кількома цілими репліками на незалежних вузлах, а базою MySQL відстежує, де лежить кожна копія — даючи відмовостійкість без RAID і спільного сховища.
MogileFS коротко
| Властивість | Значення |
|---|---|
| Тип | Розподілена ФС рівня застосунку / об'єктне сховище |
| Автор | Brad Fitzpatrick — Danga Interactive (команда LiveJournal) |
| Перший реліз | Середина 2000-х (розроблений ~2004 для LiveJournal) |
| Мова | Perl (серверна частина) |
| Ліцензія | Вільне ПЗ — ті самі умови GPL / Artistic, що й у Perl |
| Метадані | MySQL (єдине джерело істини про розташування файлів) |
| Демон зберігання | mogstored — віддає дані по HTTP / WebDAV |
| Демон-координатор | mogilefsd (трекер) |
| Модель доступу | За непрозорим ключем через клієнтську бібліотеку — не POSIX-монтування |
| Надлишковість | Реплікація цілих файлів (налаштовувана кількість копій), без RAID |
| Оптимальне навантаження | Write-once / read-many blob-и, що віддаються по HTTP |
Ключова ідея: без RAID, без єдиної точки відмови
Традиційне сховище купує надійність залізом — RAID-масиви, дубльовані контролери, дорогі спільні файлери. MogileFS іде зворотним шляхом: вважати, що залізо дешеве й обов'язково відмовить, а надійність брати із софту. Кожен файл зберігається як одна чи кілька цілих реплік на незалежних вузлах. Ні страйпінгу, ні парності для перебудови. Якщо диск помирає, копії на інших вузлах лишаються цілими, і фоновий процес просто до-реплікує їх до потрібної кількості.
Оскільки вона працює на рівні застосунку, а не як ядерна ФС, MogileFS не монтується як NFS і не дає POSIX-семантики. Застосунок звертається до неї через клієнтську бібліотеку й адресує файли непрозорим ключем, а не шляхом. Саме цей компроміс дозволяє їй горизонтально масштабуватися на звичайних дисках на бюджетних виділених серверах.
Чотири компоненти
| Компонент | Демон / технологія | Роль | Зберігає стан? |
|---|---|---|---|
| Трекер | mogilefsd | Stateless-координатор: відповідає «де ключ X?», видає місця для запису, планує реплікацію | Ні |
| База метаданих | MySQL | Єдине джерело істини: файл → пристрої, домен, клас, стан реплікації | Так — резервуйте її |
| Вузол зберігання | mogstored | Легкий HTTP/WebDAV-демон з даними файлів на звичайних локальних ФС | Лише дані |
| Клієнт | бібліотека (Perl, PHP, Python, Ruby, Java, Go) | Зберігає/читає/видаляє за ключем; читає й пише напряму на вузли | Ні |
Оскільки весь спільний стан лежить у MySQL, трекери stateless і взаємозамінні — їх запускають кілька для відмовостійкості, і будь-який обслужить будь-який запит. Адміністративна утиліта mogadm реєструє хости, пристрої, домени та класи. База метаданих — єдиний компонент, який треба захищати: тримайте її на надійному сховищі та реплікуйте (зазвичай MySQL primary/replica).
Шукаєте сервер, який просто працює?
Valebyte VPS — NVMe, підтримка 24/7, розгортання за 60 секунд.
Домени, класи та реплікація
MogileFS розкладає файли по доменах (просторах імен, наприклад по одному на застосунок) і класах усередині домену. Клас несе політику реплікації — насамперед mindevcount, мінімальну кількість окремих пристроїв, на які має бути скопійовано файл цього класу. Фоновий реплікатор постійно звіряє реальність з метаданими й створює або переміщує копії, доки кожен файл не задовольнить політику класу. Той самий механізм самовідновлює кластер після відмови вузла чи диска.
| Приклад класу | mindevcount | Типове застосування | Накладні витрати |
|---|---|---|---|
| thumbnails | 2 | Дешево відтворювані похідні | 2× |
| user_uploads | 3 | Невідновні оригінали | 3× |
| cache | 1 | Тимчасові, відтворювані дані | 1× |
Цільова надійність має пряму ціну: клас із mindevcount=3 потроює сиру ємність, яку треба закласти. Це число — головний драйвер того, скільки диска потребує кластер, — плануйте його до купівлі вузлів.
Як записується файл
- Клієнт просить трекер створити новий файл у заданому домені/класі.
- Трекер обирає відповідні пристрої й повертає тимчасові URL для запису.
- Клієнт робить
PUTданих напряму на один чи кілька вузлів зберігання по HTTP. - Клієнт повідомляє трекеру про завершення запису; трекер фіксує розташування файлу та ключ у MySQL.
- Асинхронно реплікатор доводить файл до повної кількості реплік його класу на різних пристроях.
«MogileFS — наша розподілена файлова система з відкритим кодом. Її властивості: рівень застосунку — не потрібні спеціальні модулі ядра; відсутність єдиної точки відмови; автоматична реплікація файлів; краще, ніж RAID; плоский простір імен.»
— Danga Interactive, оригінальний опис проєкту MogileFS
MogileFS проти Ceph, GlusterFS і S3/MinIO
MogileFS старший за більшу частину сучасного стеку розподіленого зберігання й займає навмисно вузьку нішу. Ось як він співвідноситься з інструментами, з якими його найчастіше порівнюють:
| Система | Тип | Доступ | POSIX-монтування? | Надлишковість | Оптимальна для |
|---|---|---|---|---|---|
| MogileFS | ФС рівня застосунку | Ключ через клієнт / HTTP | Ні | Цілі репліки | Масштабні write-once/read-many blob-и |
| Ceph (RADOS/RGW) | Об'єкт + блок + ФС | S3/Swift, RBD, CephFS | Так (CephFS) | Реплікація або erasure coding | Універсально, до ексабайтів |
| GlusterFS | POSIX розподілена ФС | Монтування (FUSE/NFS) | Так | Репліковані / dispersed томи | Спільна POSIX-ФС |
| MinIO / S3 | Об'єктне сховище | S3 API | Ні | Erasure coding | Сучасні S3-сумісні застосунки |
Якщо потрібна монтована POSIX-ФС, низьколатентні випадкові читання/записи або стандартний S3 API — доречніший один з інших. Якщо ж потрібне гранично просте blob-сховище цілими репліками, що переживає втрату вузла без RAID і масштабується додаванням дешевих дисків, — MogileFS досі робить це чисто.
Шукаєте сервер, який просто працює?
Valebyte VPS — NVMe, підтримка 24/7, розгортання за 60 секунд.
Де MogileFS доречний — і де ні
Чудово підходить: користувацькі завантаження, галереї зображень, вкладення пошти, статичні ассети — усе, що адресується за ID і віддається по HTTP, пишеться один раз і читається багаторазово. Сильні сторони — дешеве горизонтальне масштабування, стійкість до відмови вузлів без RAID та операційна простота для такого навантаження.
Погано підходить: монтована POSIX-ФС, низьколатентні випадкові читання/записи, часта модифікація на місці чи сувора транзакційність. Тут беріть CephFS, GlusterFS або S3-сумісне сховище.
Запуск MogileFS на виділених серверах
Мінімальний продакшн хоче щонайменше два вузли зберігання на різних фізичних машинах (щоб клас із двома репліками пережив втрату цілого хоста), плюс два трекери та репліковану пару MySQL під метадані. Кожен вузол зберігання — це просто дешеві диски й запущений mogstored; масштабування — додаванням нових. Саме таке навантаження лягає на кілька незалежних виділених серверів у різних доменах відмови, а не на одну велику машину — потрібна ізоляція диска й мережі, а не спільне шасі.
Для шару зберігання важливіша ємність на долар, ніж сира швидкість, тому місткі HDD виділені сервери або спеціалізовані storage-сервери — природний дім для реплік. Вузол MySQL з метаданими й трекери розмістіть на швидших NVMe виділених серверах, а якщо репліки розподілені по кількох майданчиках — закладіть 10 Gbps виділені сервери, щоб ре-реплікація після збою не забивала канали. Ось актуальні виділені сервери, на яких можна підняти вузли зберігання:
| CPU | ОЗУ | Сховище | Трафік | Ціна | Дія |
|---|---|---|---|---|---|
| Intel Xeon-E 2136 3.3GHz 6 cores | 32 GB DDR4 ECC | 2x 512 GB (NVME SoftRAID) | Unmetered @ 1 Gbps | $59.00/mo | Налаштування |
| Intel Xeon-D 2141I 2.2GHz 8 cores | 128 GB DDR4 ECC | 2x 512 GB (NVME SoftRAID) | Unmetered @ 1 Gbps | $74.00/mo | Налаштування |
| AMD Ryzen 5 3600X 3.8GHz 6 cores | 64 GB DDR4 ECC | 2x 512 GB (NVME SoftRAID) | Unmetered @ 500 Mbps | $97.00/mo | Налаштування |
| Intel Xeon-E 2386G 3.5GHz 6 cores | 32 GB DDR4 ECC | 2x 512 GB (NVME SoftRAID) | Unmetered @ 1 Gbps | $111.00/mo | Налаштування |
| AMD Ryzen 7 3800X 3.9GHz 8 cores | 64 GB DDR4 ECC | 2x 960 GB (NVME SoftRAID) | Unmetered @ 500 Mbps | $127.00/mo | Налаштування |
| AMD Ryzen 5 5600X 3.7GHz 6 cores | 64 GB DDR4 ECC | 2x 512 GB (NVME SoftRAID) | Unmetered @ 1 Gbps | $127.00/mo | Налаштування |
| Intel Xeon-E 2388G 3.2GHz 8 cores | 32 GB DDR4 ECC | 2x 6 TB + 2x 512 GB (SATA Hybrid SoftRAID) | Unmetered @ 3 Gbps | $127.00/mo | Налаштування |
| AMD Epyc 7371 3.1GHz 16 cores | 128 GB DDR4 ECC | 2x 6 TB + 2x 960 GB (SATA Hybrid SoftRAID) | Unmetered @ 1 Gbps | $161.00/mo | Налаштування |
| AMD Ryzen 7 5800X 3.8GHz 8 cores | 64 GB DDR4 ECC | 2x 960 GB (NVME SoftRAID) | Unmetered @ 1 Gbps | $161.00/mo | Налаштування |
| AMD Ryzen 9 5900X 3.7GHz 12 cores | 32 GB DDR4 ECC | 2x 4 TB (SATA SoftRAID) | Unmetered @ 1 Gbps | $165.00/mo | Налаштування |
| Intel Xeon Silver 4214R 2.4GHz 12 cores | 96 GB DDR4 ECC | 2x 6 TB + 2x 960 GB (SATA Hybrid SoftRAID) | Unmetered @ 2 Gbps | $180.00/mo | Налаштування |
| AMD Ryzen 7700X | 64GB ECC DDR5 | 2x 1 TB (NVMe) | 100TB @ 3Gbps | $207.00/mo | Налаштування |
| AMD Epyc 7313 3.0GHz 16 cores | 1 TB DDR4 ECC | 2x 6 TB + 2x 960 GB (SATA Hybrid SoftRAID) | Unmetered @ 1 Gbps | $286.00/mo | Налаштування |
| AMD Ryzen 7 Pro 3700 3.6GHz 8 cores | 32 GB DDR4 ECC | 6x 14 TB (SAS SoftRAID) | Unmetered @ 1 Gbps | $295.00/mo | Налаштування |
| AMD EPYC 4464P 3.7GHz 16 cores | 128 GB DDR4 ECC | 4x 7.68 TB (NVME SoftRAID) | Unmetered @ 5 Gbps | $304.00/mo | Налаштування |
Рекомендований розрахунок вузлів
| Роль | CPU | RAM | Диск | Мережа |
|---|---|---|---|---|
| Вузол зберігання (mogstored) | Скромний (2–4 ядра) | 8–16 ГБ | Місткий HDD/SSD, JBOD — RAID не потрібен | 1–10 Gbps |
| Трекер (mogilefsd) | 2–4 ядра | 4–8 ГБ | Невеликий SSD/NVMe | 1 Gbps+ |
| MySQL з метаданими | 4+ ядра | 16 ГБ+ | NVMe (надійний, реплікований) | 1 Gbps+ |
Часті запитання
Чи підтримується й використовується MogileFS у 2025?
MogileFS радше зрілий і стабільний, ніж активно розвивається. Він лишається міцним, перевіреним у бою варіантом для своєї ніші — об'ємне blob-сховище на серійному залізі, — хоча нові об'єктні сховища та кластерні ФС забрали більшість універсальних сценаріїв.
Чи використовує MogileFS RAID?
Ні. MogileFS навмисно відмовляється від RAID і натомість тримає кілька цілих копій кожного файлу на різних пристроях і хостах. Проєкт історично називав це «краще, ніж RAID», бо втрачений диск чи вузол відновлюється ре-реплікацією з уцілілих копій, а не перебудовою масиву.
Чи можна змонтувати MogileFS як звичайну ФС?
У звичному сенсі — ні. Це сховище рівня застосунку, доступ до якого йде за ключем через клієнтську бібліотеку або по HTTP; POSIX-семантики й монтування ядром воно не дає. Потрібна монтована ФС — використовуйте GlusterFS або CephFS.
Яка БД потрібна MogileFS?
База MySQL зберігає всі метадані — які файли існують і на яких пристроях лежать їхні репліки. Трекери stateless; саме MySQL треба резервувати й робити високодоступною.
Скільки серверів потрібно для старту?
Для реальної надлишковості — мінімум два вузли зберігання на різних фізичних хостах плюс хоча б один трекер і один MySQL (по два для відмовостійкості). Двох незалежних виділених серверів достатньо, щоб пережити відмову цілого хоста при класі з двома репліками.
Шукаєте сервер, який просто працює?
Valebyte VPS — NVMe, підтримка 24/7, розгортання за 60 секунд.
Історична довідка та джерела
MogileFS виріс з інженерного стеку LiveJournal середини 2000-х і разом із memcached, Perlbal і Gearman став відомою цеглинкою для масштабування великих веб-проєктів на серійному залізі. Сьогодні він лишається надійним вибором для своєї ніші. Першоджерела: сторінка й код проєкту MogileFS (спочатку danga.com/mogilefs, тепер на GitHub), Perl-клієнт на MetaCPAN і архітектурні нотатки Danga Interactive епохи LiveJournal.