обзор и настройка glusterfs


Начну с теории. GlusterFS — распределенная файловая система без сервера метаданных. Поддерживает stripe запись на разные сервера, репликацию, балансировку нагрузки. Имеет встроенный NFS сервер. Это далеко не полный список возможностей GlusterFS, которая разрабатывается под крылом корпорации Red Hat. 

Для чего может потребоваться эта файловая система?

  • Для создания большого онлайн хранилища при наличии нескольких серверов;

  • для создания отказоустойчивого распределенного хранилища резервных копий;

  • при развертывании облачных решений, в качестве сетевого диска для образов виртуальных машин;

  • коммунальная файлопомойка, состоящая из компьютеров продвинутых соседей;

  • зеркало серверов АНБ для раздачи по BitTorrent;

  • придумайте сами.

Ниже описан простой пример настройки GlusterFS на нескольких серверах. Конечно, ее можно настроить и на одном сервере, но это будет уже не распределенная и не параллельная ФС.

Первым делом нужно установить GlusterFS на сервера, я использовал последнюю версию пакета с официального сайта. На тот момент это была 3.3

После тривиальной установки приступим к проектированию архитектуры хранилища. Заранее стоит определиться, сколько приблизительно серверов мы будем использовать, какой будет фактор репликации, будет ли использоваться stripe, NFS. Какие меры будут приняты по обеспечению безопасности передачи и хранения данных. Также стоит предусмотреть возможность добавления/исключения серверов из хранилища, стандарт именования директорий-блоков (в Gluster используется терминология brick), точек монтирования.

Заранее предупрежу, что эта файловая система пока не подходит в качестве хранилища высоконагруженной базы данных. У нее достаточно плохая производительность при случайной записи, а также записи мелких файлов.

Я знал заранее, сколько серверов будет использоваться, и, исходя из этого прикинул объем будущего хранилища при тройном факторе репликации.

Под блоки GlusterFS можно выделять как блочные устройства (разделы, диски), так и просто директории. Я создал по одному XFS разделу на серверах под Gluster.

-i опция задает размер байт под иноду, по умолчанию это 256 байт.

mkfs.xfs -i size=512 /dev/sda3

Дальше банальщина: создается директория

mkdir /glusterblock

Туда монтируется наш раздел

mount /dev/sda3 /glusterblock

Создаем директорию для будущей GlusterFS, это полезно для всяческих проверок, например, если раздел не примонтирован, мы увидим директорию /glusterblock, но не увидим поддиректорию brick.

mkdir /glusterblock/brick

На всех серверах запускаем демон glusterd

/etc/init.d/glusterd start

На любом сервере из тех, где находится блок ФС, не важно каком, т. к. Gluster не централизированная, создаем том. Предположим, что у нас 3 настроенных сервера.

for i in host1 host 2 host3; do gluster peer probe $i; done

Том будет называться gvol и будет использоваться тройная репликация, что повысит отказоустойчивость.

При падении двух серверов, ФС будет продолжать работать, если не настроить кворум.

gluster volume create gvol replica 3
host1:/glusterblock/brick
host2:/glusterblock/brick
host3:/glusterblock/brick

Стартуем

gluster volume start gvol

Проверяем, что том создался успешно

gluster volume info gvol

Вы должны увидеть список подключенных хостов.

Теперь можно монтировать нашу ФС с помощью драйвера FUSE куда угодно

mount -t glusterfs host1:/gvol /mnt

Имя сервера можно использовать любое из тех, которые образуют том и работают.

Для того, чтоб заработал нативный NFS нужно установить nfs-utils на всех хостах, где включен демон glusterd.

Также не забываем добавить наш раздел sda3 в fstab, а glusterd в автозагрузку.

GlusterFS поддерживается fstab для FUSE, не говоря уже про NFS. Чтоб настроить автомонтирование при загрузке системы в /etc/fstab пропишите вот такую строку, изменив имя хоста, тома и точки монтирования

<hostname>:/<volname> /<mountpoint> glusterfs defaults,_netdev 0 0

Опции файловой системы задаются командой

gluster volume set <volname> <option.name> <value>

Тут можно посмотреть список доступных опций с описанием.

Что касается производительности, то по большей части все упирается в сеть.

При репликации, т. к. она синхронная скорость записи равна скорости сети/кол-во реплик.

Скорость чтения приблизительно равна пропускной скорости сети -10%.

При использовании NFS скорость чтения/записи была несколько ниже, чем для FUSE.

Скорость работы GlusterFS очень зависит от инфраструктуры, на официальном сайте приводятся тесты для Fibre Channel со stripe записью, которые показывают очень неплохие результаты.

К плюсам можно отнести активную разработку, поддержку крупной компанией, легкость настройки, отсутствие сервера метаданных, обилие настроек и возможностей, хорошую скорость работы.

Из минусов можно отметить отсутствие сжатия и дедупликации, но это можно реализовать на уровне файловой системы раздела блока Gluster, в нашем примере это XFS, которую можно заменить на BTRFS, но не рекомендуется делать в промышленных установках, т.к. она пока ещё очень «сырая».

Также к минусам можно отнести отсутствие драйверов на уровне ядра Linux, когда та же Lustre поставляется в ядре.

Каждый вибирает то, что ему больше всего подходит для решения конкретных задач. Со своей стороны могу лишь порекомендовать GlusterFS как надежную распределенную файловую систему верхнего уровня (приложений).