GlusterFS

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 12:42, 9 ноября 2016.
GlusterFS
Создатели: Gluster
Разработчики: Red Hat, Inc.
Постоянный выпуск: 3.6.8 / January 30, 2016 (2016-01-30)
Предыдущий выпуск: 3.7.8[1] / February 10, 2016 (2016-02-10)
Операционная система: Linux, OS X, NetBSD, OpenSolaris
Тип ПО: Distributed file system
Лицензия: GNU General Public License v3[2]
Веб-сайт www.gluster.org

GlusterFS — это распределённая, параллельная, линейно масштабируемая файловая система с возможностью защиты от сбоев. С помощью InfiniBand RDMA или TCP/IP GlusterFS может объединить хранилища данных, находящиеся на разных серверах, в одну параллельную сетевую файловую систему. GlusterFS работает в пользовательском пространстве при помощи технологии FUSE, поэтому не требует поддержки со стороны ядра операционной системы и работает поверх существующих файловых систем (ext3, ext4, XFS, ReiserFS и т.п.). В отличие от других распределённых файловых систем, таких как Lustre и Ceph, для работы GlusterFS не требуется отдельный сервер для хранения метаданных.[3]

432.jpeg

Архитектура

GlusterFS разделена на серверную и клиентскую части. На каждом сервере работает демон glusterfsd который делает доступным для клиентов локальное хранилище в качестве тома. Клиентский процесс glusterfs соединяется с одним или несколькими серверами посредством TCP/IP или InfiniBand и объединяет все доступные серверные тома в один, используя расширяемые трансляторы (функциональные модули системы). Получившийся том монтируется на клиентском хосте при помощи механизма Filesystem in Userspace (FUSE).

Большая часть функциональности GlusterFS реализована в виде трансляторов (модулей). Использование необходимых трансляторов и их настройка позволяет гибко конфигурировать режим работы системы. Трансляторы реализуют следующую функциональность:

  • Синхронная репликация между серверами (нельзя расширить уже существующий том, добавив сервер для репликации);
  • Чередование порций данных между серверами (Striping);
  • Распределение файлов между серверами;
  • Балансировка нагрузки;
  • Восстановление после отказа узла (в ручном режиме с помощью опроса файлов (ls -lR или find на смонтированом томе));
  • Опережающее чтение (read-ahead) и запаздывающая запись (write-behind) для увеличения быстродействия;
  • Дисковые квоты.

Архитектура 3.0

Сетевая файловая система GlusterFS состоит из следующих компонент:

  • подлежащие файловые системы (ext3, ext4, XFS), которые называются томами хранения (brick, кирпич);
  • сервер glusterfsd на каждом хосте с подлежащей файловой системой; сервер может обслуживать несколько томов хранения; исходный том хранения (файловая система) может быть экспортирован непосредственно или преобразован с помощью цепочки модулей-трансляторов (оптимизация, добавление функций); конечным модулем цепочки является транспортный модуль - TCP/IP (порт 6996), unix-сокет, ib-verb, ib-sdp;
  • клиент glusterfs, обеспечивающий с помощью FUSE доступ к экспортированным томам (файловым системам) всем процессам на своём хосте; импортированный с помощью транспортного модуля том может использоваться непосредственно или преобразован с помощью цепочки модулей-трансляторов (сборка составных томов, оптимизация); собранный том (volume) может быть экспортирован как единое целое;
  • библиотека libglusterfs, которую можно встроить в приложение для прямого обращения к серверу, минуя уровень файловой системы и FUSE (настройки в /etc/booster.fstab, переменная окружения GLUSTERFS_BOOSTER_FSTAB, предзагрузка разделяемой библиотеки LD_PRELOAD=/usr/lib64/glusterfs/glusterfs-booster.so);
  • оптимизированный сервер NFS (unfs3), который может импортировать тома и раздавать их NFS клиентам.

Архитектура 3.1

Сетевая файловая система GlusterFS состоит из следующих компонент:

  • подлежащие файловые системы (ext3, ext4, ZFS, XFS, jfs), которые называются томами хранения (brick, кирпич);
  • сервер glusterfsd на каждом хосте с подлежащей файловой системой; сервер может обслуживать несколько томов хранения; исходный том хранения (файловая система) может быть экспортирован непосредственно или преобразован с помощью цепочки модулей-трансляторов (оптимизация, добавление функций); конечным модулем цепочки является транспортный модуль - TCP/IP (порты c 24007 по 24009+число_томов-1), unix-сокет, ib-verb, ib-sdp; встроенный сервер NFSv3 (только tcp, несовместим с ядерным сервером NFS - требуется выгрузить модули nfs и lockd, а lockd нужен NFS-клиенту), который может раздавать тома NFS клиентам (порты с 38465 по 38465+число_серверов-1 и 111);
  • демон glusterd на каждом сервере управляет своими glusterfsd, общается с соседями и управляется командой gluster;
  • утилита командной строки gluster позволяет динамически изменять конфигурацию через интерфейс с glusterd;
  • клиент glusterfs, обеспечивающий с помощью FUSE доступ к экспортированным томам (файловым системам) всем процессам на своём хосте; импортированный с помощью транспортного модуля том может использоваться непосредственно или преобразован с помощью цепочки модулей-трансляторов (сборка составных томов, оптимизация); собранный том (volume) может быть экспортирован как единое целое;
  • библиотека libglusterfs, которую можно встроить в приложение для прямого обращения к серверу, минуя уровень файловой системы и FUSE (настройки в /etc/booster.fstab, переменная окружения GLUSTERFS_BOOSTER_FSTAB, предзагрузка разделяемой библиотеки LD_PRELOAD=/usr/lib64/glusterfs/glusterfs-booster.so).

Модули(трансляторы)

Трансляторы являются мощным механизмом, предоставляемым GlusterFS, который расширяет возможности файловых систем с помощью определённого интерфейса. Интерфейсы транслятора работают и на стороне сервера и на стороне клиента, что означает, что на одной стороне может быть загружен тот же транслятор, что и на другой. Трансляторы - это бинарные динамические объекты (.so), загружаемые в момент выполнения, исходя из параметров в файле томов. В GlusterFS - расширения производительности, расширяющие возможности и инструменты отладки - все реализованы как трансляторы. Модули (трансляторы) выстраиваются в цепочку обслуживания, на входе и выходе транслятора - том. Самый нижний модуль сервера (типа storage/posix) указывает на подлежащую файловую систему. Описание томов (модулей) на сервере обычно находится в файле. Файл имеет построчный формат, комментарии начинаются с '#'. Описание модуля начинается с команды volume и указанием имени получающегося тома, тип и подтип модуля (через '/') указываются командой type, ссылки на подлежащие тома указываются командой subvolumes с указанием имён томов нижнего уровня, параметры модуля задаются командами option, завершается описание модуля командой end-volume. Имена регистрозависимые. Подтома должны быть описаны до своего использования. Возможно написание единого конфигурационного файла как для сервера, так и для клиента.[4]

Модули

  • storage (описание подлежащей файловой системы на сервере)
    • posix (обеспечивает POSIX семантику при работе с файлами подлежащей файловой системы)
      • option directory имя-каталога (корень подлежащей файловой системы)
      • option o-direct {disable|enable} (возможность посылать запросы в обход кеша VFS; глючит в 3.0.3)
      • option export-statfs-size {yes|no} (для решения проблем с df при описании нескольких томов под одной точкой монтирования)
      • option mandate-attribute {on|off} (требовать от подлежащей файловой системы поддержки расширенных атрибутов)
      • option span-devices число (0; обслуживать указанное количество файловых систем, подмонтированных внутрь подлежащей файловой системы)
      • option background-unlink {no|yes} (удаление больших файлов в фоновом режиме)
    • bdb (каталоги хранятся в подлежащей файловой системе, файлы каталога хранятся в формате Berkley DB (key - имя файла, value - содержимое файла) в файле storage_db.db в каталоге, отсутствует в пакете)
      • option directory имя-каталога (корень подлежащей файловой системы)
      • option logdir имя-каталога (журналы БД)
      • option errfile имя-файла (для сообщений об ошибках)
      • option dir-mode формат-chmod (возвращается при запросе)
      • option file-mode формат-chmod (возвращается при запросе)
      • option page-size байт (д.б. равно размеру блока подлежащей файловой системы)
      • option open-db-lru-limit число (количество открытых БД на каталог?)
      • option lock-timeout (максимальное время блокировки замка)
      • option checkpoint-interval секунд (меньше - медленная работа, больше - увеличение потерь)
      • option transaction-timeout (максимальное время блокировки транзакции)
      • option mode {cache|persistent} (persistent гарантирует восстановление после сбоя
      • option access-mode {btree|hash}

Установка и настройка GlusterFS, в качестве ОС — Centos6

252345.png

Подготовка

Базовое

Базовые вещи :

  • синхронизация времени (ntp);
  • доступность узлов (сеть, dns или /etc/hosts);
  • диск под gluster volume;

Репозиторий

 # cd /etc/yum.repos.d/
 # curl -O http://download.gluster.org/pub/gluster/glusterfs/LATEST/EPEL.repo/glusterfs-epel.repo
Firewall

Для работы glusterfs необходимо открыть следующие порты на всех узлах: Основные:

  • 24007 TCP;
  • 24008 TCP;

portmapper:

  • 111 TCP,UDP

Один порт на каждый brick:

  • 49152 TCP;
  • 49153 TCP;

Установка

На обоих узлах:

 # yum install glusterfs-server
 # chkconfig glusterd on && service glusterd start

Настройка

Создание пула

Создаю доверенный пул, состоящий из двух узлов:

[gluster01.local]# gluster peer probe gluster02.local
[gluster01.local]# gluster peer status

Number of Peers: 1

Uuid: 13b60b47-15d9-446a-bf66-81306c0cd3fa
State: Peer in Cluster (Connected)
Hostname: gluster02.local
[gluster02.local]# gluster peer status

Number of Peers: 1

Hostname: gluster01.local
Port: 24007
Uuid: 73385a33-a0a0-4f0d-90cc-5496e3b653b7
State: Peer in Cluster (Connected)

Раздел: /dev/vdb1, примонтированный в /opt/gluster Директория, с которой будет работать glusterfs и которая будет являться brick: /opt/gluster/glfs

Затем создаю volume: В моем случае:

# gluster volume create gv0 replica 2 gluster01.local:/opt/gluster/glfs gluster02.local:/opt/gluster/glfs

Посмотреть статус volume можно:

# gluster volume info

Volume Name: gv0
Type: Replicate
Volume ID: 404f70f5-c04c-4e3e-b90e-c585b141155c
Status: Created
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: gluster01.local:/export/glfs
Brick2: gluster02.local:/export/glfs
Теперь можно стартовать volume:
# gluster volume start gv0

Использование volume

Для того что бы начать использовать созданный volume достаточно его примонтировать:

# mount -t glusterfs gluster01.local:gv0 /mnt/<ref>http://jnotes.ru/install-and-settings-glustrerfs.html</ref>

Примечания

  1. "glusterfs-3.7.8 released". gluster.org. 10 Feb 2016. Retrieved 10 Feb 2016. 
  2. "Gluster 3.1: Understanding the GlusterFS License". Gluster Documentation. Gluster.org. Retrieved 2014-04-30. 
  3. GlusterFS [Электронный ресурс] : — Режим доступа : https://ru.wikipedia.org/wiki/GlusterFS
  4. GlusterFS [Электронный ресурс] : — Режим доступа : https://www.gluster.org/community/documentation//index.php/Ru:GlusterFS