Що таке кластерні файлові системи і в чому їх ключова відмінність від звичайних файлових систем?
Давно вивчав цю тему, але ніяк не доходили руки написати щось цілісне. Отже, що ж таке кластерна файлова система? Вкрай просто - це файлова система, яка примонтировать в декількох місцях.
Допитливий читач відразу поставить логічне запитання - як можна один дисковий носій підключити до декількома ПК? Зрозуміло, домашнє залізо такого не вміє, а ось серверні SCSI масиви цілком так вміють. Також до варіантів підключення одного носія до кількох ПК варто віднести всілякі транспортні протоколи типу iSCSI і AoE, які дозволяють експортувати блоковий пристрій в мережу і виконати його підключення до декількох машин.
Отже, припустимо, у нас є якесь блоковий пристрій, підключений до двох серверів з якогось з перелічених вище інтерфейсів. Припустимо, на носії існувала якась класична файлова система (скажімо, ext3) і ми змогли змонтувати її на запис на обох вузлах (звертаю увагу, що випадок абстрактний, можливо, те, що я описую зробити неможливо).
Тепер же давайте подумаємо, що буде, якщо два вузли спробують одночасно звернутися до одним і тим же секторам на носії зі спробою щось туди записати? А вийти може все, що завгодно - дані запишуться частково від одного вузла, частково від іншого; один з вузлів перепише дані записані іншим і т.д. Зрозуміло, що це призведе до того, що файлова система як мінімум потребують перевірки своєї структури (fsck), а як максимум повністю вийде з ладу. Очевидно, обидва випадки фатальні, так як для виправлення ситуації потрібно відключати файлову систему.
Як же перемогти цю проблему? Тут нам на допомогу приходить страшна штука на ім'я DLM, а розшифровується вона як Distributed Lock Manager. Що ж це означає і як працює? По-перше, працює він на всіх вузлах, де змонтована файлова система, по-друге, DLM, запущені на всіх вузлах, обмінюються між собою інформацією за допомогою мережі. А суть цього механізму в тому, що він дозволяє координувати між собою операції, які можуть спричинити за собою конкурентний доступ до будь-якого ресурсу файлової системи або накопичувача. Тобто, в наведеному вище прикладі перший вузол захопив би блокування на запис, почав робити, що йому потрібно, в цей же час другий вузол смиренно б чекав своєї черги і після цього б зробив все, що йому потрібно. Як результат всієї цієї операції ми маємо цілісну файлову систему і ніяких суперечливих змін.
Отже, які ж кластерні файлові системи існують? По-перше, це, звичайно ж, GFS (GFS2) від RedHat і OCFS2 від Oracle. Також сюди, мабуть, варто віднести Lustre (хоча вона до всього іншого ще і розподілена).