Wolf
Roman Grossi
Tobishua
Digital nomad and originality

Для начала несколько слов о том, что такое GlusterFS: как говорит Википедия, GlusterFS - это распределённая, параллельная, линейно масштабируемая файловая система с возможностью защиты от сбоев. Ну, вы поняли, да? Имеем несколько серверов (лучше, если географически распределённых) и с помощью GlusterFS строим на них распределённую файловую систему, которая будет реплицирована или распределена по ним или всё вместе (да, так тоже можно). Что имеем в итоге: возможность создания ОЧЕНЬ больших файловых хранилищ, отказоустойчивость и прочее-прочее.
В этом посте напишу некоторое введение в работу с GlusterFS на Ubuntu (или на любом другом debian-like дистрибутиве).

Шаг 1. Установка

Первым делом нужно установить пакет glusterfs-server (в Ubuntu Server 16.04 он есть в дефолтных репозиториях).

apt update && apt install glusterfs-server

Естественно всё это нужно делать сразу на всех необходимых нодах (удобнее использовать для этого Ansible).

Шаг 2. Создание раздела для GlusterFS

После того, как glusterfs-server будет установлен, нужно понять какой раздел/директорию мы отдадим для него (стоит иметь ввиду, что GlusterFS не рекомендует использовать корневой раздел под создание директории), поэтому, предположим, что у вас случайно в сервер завалялся второй диск без файловой системы и отформатируем его в XFS (почему именно XFS? Ну мы же будем строить огромное хранилище данных и XFS позволит нам немного выиграть в скорости).

Предположим, что раздел вы уже создали с помощью fdisk, так что создаём на нём файловую систему:

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

sdb1 нужно заменить на ваш диск и номер раздела. Опять же, файловая система нужна нам на всех нодах.

После этого можем смониторовать новую файловую систему на всех нодах:

mkdir -p /mnt/gluster
echo '/dev/sdb1 /mnt/gluster xfs defaults 1 2' >> /etc/fstab
mount -a && mount

В моём примере мы монтируем ФС в /mnt/gluster и прописываем соответствующую точку монтирования в /etc/fstab

Шаг 3. Создание пула

Теперь нужно внести некоторые изменения в правила iptables (для того, чтобы ноды могли общаться между собой). Так как у меня используется приватная сеть 10.0.0.0/8, я просто добавил такое правило:

iptables -I INPUT -p all -s 10.0.0.0/8 -j ACCEPT

У вас оно может отличаться в зависимости от используемой сети/наличия приватной сети.

Теперь делаем пул из двух серверов (в моём примере это будут серверы с IP-адресами 10.0.0.20 и 10.0.0.30):
На сервере с IP-адресом 10.0.0.20 вводим:

gluster peer probe 10.0.0.30

А на сервере с IP-адресом 10.0.0.30:

gluster peer probe 10.0.0.20

После этого можно проверить статус пула командой 

gluster peer status

Шаг 4. Настройка раздела GlusterFS

После создания пула, можно приступать к созданию раздела для GlusterFS.
Для этого на двух серверах создаём отдельные директории для нашего раздела, например:

mkdir -p /mnt/gluster/strg

Пришло время выбрать тип раздела (их у GlusterFS несколько). Не буду описывать их отдельно, а лучше прикреплю изображения из документации GlusterFS:

GlusterFS Distributed volume GlusterFS Replicated volume GlusterFS Striped volume GlusterFS Distributed Replicated volume GlusterFS Distributed Striped volume GlusterFS Striped Replicated volume

Предположим, что на наших нодах есть RAID-1 и поэтому избыточность нам не нужна, но будет неплохо иметь масштабируемое хранилище - наш выбор Distributed.

Создаём Distributed-раздел:

gluster volume create strg 10.0.0.20:/mnt/gluster/strg 10.0.0.30:/mnt/gluster/strg

Эта и последующие команды выполняются только на одной ноде из пула!

После создания запустим раздел:

gluster volume start strg

И посмотрим детали о наших разделах:

gluster volume info

Вывод будет примерно такой:

Volume Name: strg
Type: Distributed-Replicate
Volume ID: 6978cddd-e744-4047-821d-4635689570d8
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: 10.0.0.20:/mnt/gluster/strg
Brick2: 10.0.0.30:/mnt/gluster/strg
Options Reconfigured:
performance.readdir-ahead: on

Теперь монтируем наш раздел:

mount -t glusterfs 10.0.0.20:/strg /mnt

И смотрим сколько на нём места:

df -i

Готово! GlusterFS работает!

В одном из следующих постов я напишу о том, как добавить дополнительные кирпичи (bricks) в наш раздел и как с этим всем вообще жить :)

Комментарии к этому хорошему посту: