Тестирование распределенной (кластерной) файловой системы MooseFS


Давно мечтал поиграть во что-нибудь класстерное. Дошли руки поискать и выкопать распределенную файловую систему. Т.к. серверные вещи у меня живут в основном под FreeBSD и ее знаю лучше, то хотел под нее и чтобы сразу завелось.

В итоге выкопал MooseFS. Игрался с версией 2.0.73.

Что оно умеет:

  • Разные количество репликаций от 1 до 9.
  • Снэпшоты - шустрые и вроде правильные, т.е. не занимающие отдельное место. UPDATE: но все файлы в снэпшоте кушают ресурсы мастера, похоже, несколько меньше, чем обычные файлы, но тоже неплохо. Создаются снепшоты моментально, удаляются как обычные файлы, т.е. может занять длительное время.
  • Восстановление удаленных файлов - специальная корзина TRASH (информацию можно найти можно тут)
  • В платной версии отсутствует единая точка отказа, в открытой нужно допиливать или пытаться использовать mfs-failover или что-то похожее.
  • Какая-то веб мордочка.

Некоторые особенности работы:

  • Клиент mfsmount отправляет и получает данные с Chunk серверов напрямую.

Установку производил на свеже скаченную виртуалку с оффсайта - FreeBSD-10.1-RELEASE-amd64.vmdk.xz.

Все основное по документации с комерческого офсайта. Но нашлись некоторые мелочи.

В связи стем, что во FreeBSD 10 fuse запихнули в ядро, изменился способ работы с ним:

  • Для загрузки нужно теперь писать  kldload fuse
  • для постоянной загрузки в /boot/loader.conf нужно прописать - fuse_load="YES"

Для установки веб морды потребовалось установить moosefs-cgiserv - pkg install moosefs-cgiserv. В конфиге прописать место положение мастера и запустить.

После того, как поставил и немого посмотрел, была задача, посмотреть, как она себя ведет в  более интересных ситуациях. Для этого склонировал рабочую виртуальную машину, поменял на ней IP адрес и запустил.

Как ни странно, Chunk Server сразу подключился к мастеру и сразу на файловой системе появилось дополнительное место.

Настроил 2 реплики - mfsrsetgoal 2 /mnt/mfs, подождал пока разъедутся по серверам и начал издеваться.

1. Отключение одного Chunk сервера.

  • На файловой системе уменьшается место
  • Продолжает стабильно работать

2. Отключение обоих Chunk серверов.

  • На файловой ситеме место кончилось
  • Файловая система на ls реагирует сильно задумчиво, но списки выводит, возможно из кэша.
  • Чтение из файлов на одной машине, что-то прочитал, видимо взял что-то из кэша.
  • Чтение из файлов на другой машине - через некоторое время вываливается ошибка:
     # cat /mnt/mfs/test.img1.178BO > /dev/null
    cat: /mnt/mfs/test.img1.178BO: Operation timed out
    В логах:
    Aug  3 09:45:00 jabber mfsmount[3881]: file: 3706, index: 0, chunk: 4425, version: 3 - there are no valid copies
    Aug  3 09:46:01 jabber mfsmount[3881]: file: 3706, index: 0, chunk: 4425, version: 3 - there are no valid copies

3. Возвращение в строй Chunk сервера

  • Появляется место которое этот сервер выдает
  • Работа с файлами восстанавливается.

4. Удаление chunk'a на одном Chunk сервере

  • Продолжается стабильная работа
  • На вебморде видно, что сначала один чанк был в одной копии, а через некоторое время он разъехался по серверам
  • В логах:
    Aug  3 09:59:49 moosefs2 mfsmount[2038]: file: 4015, index: 0 - fs_readchunk returned status: Chunk lost
    Aug  3 09:59:49 moosefs2 mfsmount[2038]: error reading file number 4015: ENXIO (No such device or address)
  • В логах на мастере:
    Aug  3 10:00:13 moosefs2 mfsmaster[1922]: store process has finished - store time: 9.848
    Aug  3 10:03:19 moosefs2 mfsmaster[1922]: chunk 0000000000001285 has only invalid copies (2) - fixing it
    Aug  3 10:03:19 moosefs2 mfsmaster[1922]: chunk 0000000000001285_00092E23 - invalid copy on (192.168.99.2 - ver:000900E9)
    Aug  3 10:03:19 moosefs2 mfsmaster[1922]: chunk 0000000000001285_00092E23 - valid copy on (192.168.99.33 - ver:00092E23)

5. Удаление конкретного chunk на всех серверах

  • В логах мастера
    Aug  3 09:58:12 moosefs2 mfsmaster[1922]: chunk 0000000000001285 has only invalid copies (2) - please repair it manually
    Aug  3 09:58:12 moosefs2 mfsmaster[1922]: chunk 0000000000001285_00092E24 - invalid copy on (192.168.99.31 - ver:0009141C)
    Aug  3 09:58:12 moosefs2 mfsmaster[1922]: chunk 0000000000001285_00092E24 - invalid copy on (192.168.99.33 - ver:00092E23)
  • Чтение файла отваливается по таймауту:
    # time cat /mnt/mfs/* > /dev/null
    cat: /mnt/mfs/test.img1.178BO: Operation timed out

6. Повреждение внутри чанка - аналочично удалению, только с руганью на check sum.

7. Остановка Мастер сервера

  • Все обращения к примонтированному разделу дожидаются таймаута и отваливаются.
  • В логах:
    Aug  3 10:26:08 moosefs2 mfsmount[2038]: can't connect to master ("192.168.99.31":"9421")
  • При запуске - все восстанавливается

8. Запрет трафика между Chunk сервером и клиентом, при наличии нескольких чанк серверов

  • Работа клиента продолжается
  • Падает скорость

Тестирование работы на двух клиентах одновременно.

1. Подключение

  • на 2 клиентах без проблем
  • на web интерфейсе видно, кто подключен и как

2. Листинг каталогов, при неиспользовании перенаправлении вывода

  • Без особых проблем, md5 на файле, который пишется другим клиентом каждый раз разный, что и должно быть.

3. Конкурентная запись в один файл

  • Первично не понятно - dd ошибкой не вывалился
  • В логах появилось:
    moosefs2 mfsmount[2038]: file: 4019, index: 0 - fs_writechunk returned status: Chunk locked

4. Перенаправление в файл

  • Важно - в документации (п.7.16) написано, что так делать нельзя!
  • Вроде все отрабатывает
  • При попытке отмонтировать ловим hardlock
  • При конкурентном перенаправлении, на каждом клиенте свое видение файла.