Glus­terFS часть 5. Создание томов

GlusterFS. Все статьи цикла

Может показаться, что управление GlusterFS — нетривиальная задача, но на практике все очень просто и практически интуитивно.

Прежде чем создать распределенный по нескольким узлам том, необходимо объединить серверы в доверенный пул.

Если у вас два сервера, например gl01 и gl02, то на первом выполняем следующую команду;

gluster peer probe gl02 

peer probe: success.

 Если серверов больше, то тоже самое выполняем с остальными.

Создание Replicated-тома

Пожалуй самая простая конфигурация.

gluster volume create rep01 replica 2 gl01:/gluster/gv01 gl02:/gluster/gv01


volume create: rep01: success: please start the volume to access data

 Здесь rep01 — это имя создаваемого тома, а replica 2 — его конфигурация которая говорит о том, что данные будут храниться в двух экземплярах, на gl01:/gluster/gv01 и gl02:/gluster/gv01 соответственно.

Далее запускаем том;

gluster volume start rep01 


volume start: gv01: success

Получить информацию о конфигурации тома можно с помощью команды info:

gluster volume info rep01


Volume Name: rep01
Type: Replicate
Volume ID: 5895cdd2-c56f-440b-b176-6be4ab8cd80c
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: gl01:/gluster/gv01
Brick2: gl02:/gluster/gv01

 Расширение тома

В данном случае, добавление еще одной или нескольких файловых систем никак не скажется на доступном объеме хранилища а лишь увеличит число копий(реплик).

gluster volume add-brick rep01 replica 3 gl01:/gluster/gv03

В данном примере добавляемая файловая система размещается на одном из серверов пула. Если же необходимо создать реплику на новом сервере, его предварительно нужно включить в пул (peer probe), как это было показано в начале раздела. Далее, можно добавить новую файловую систему с помощью команды add-brick, увеличив количеств реплик на 1 (replica 4).

Репликация имеющихся данных на новые файловые системы будет произведена некоторое через время автоматически.

Создание Distributed-тома

Для создания такого тома необходима минимум одна файловая система. В дальнейшем том можно расширять новыми ФС сколько угодно.

gluster volume create distr01 transport tcp gl01:/distr01 gl02:/distr01

В этом примере создается том (distr01) который будет состоять из двух файловых систем (/distr01, /distr01) расположенных на серверах gl01 и gl02.
Если локальная файловая система является частью корневой ФС сервера то необходимо добавить в конец ключ force для принудительного создания тома.

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

Расширить том очень просто;

gluster volume add-brick distr01 gl03:/distr01

После добавления новых ФС, они будут оставаться пустыми пока на них не будут записаны новые файлы. Что бы равномерно распределить между всеми кирпичами уже имеющиеся данные необходимо выполнить процедуру перераспределения(rebalance).

gluster volume rebalance distr01 start


volume rebalance: distr01: success: Starting rebalance on volume distr01 has been successful.
ID: f1f0df34-a0e2-4583-9eeb-c67c201388ef

В результате все данные на этом томе будут, насколько это возможно, равномерно распределены между узлами хранения. На клиентской стороне видимых изменений произойти не должно.

Удаление под тома;

gluster volume remove-brick distr01 gl03:/distr01

Все данные находящиеся на этой ФС будут недоступны пользователю через том distr01

Создание Distributed Replicated тома

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

gluster volume create dr_rep replica 2 gl01:/dr gl02:/dr gl01:/dr2 gl02:/dr2

В этом примере, число реплик равно двум — replica 2. Это означает, что все записываемые на том данные будут храниться в двух экземплярах. Далее сервера указываются парами gl01:/dr gl02:/dr и следом gl01:/dr2 gl02:/dr2. Каждая пара будет реплицировать данные между собой.
Так как это Distributed том, половина записанных данных будет находится на первой паре, по копии на каждом сервере, а вторая половина на второй паре соответственно. Важно, чтобы файловые системы в одной паре находились на разных узлах!

Расширить том так же просто. Единственное условие, файловые системы должны добавляться парами:

gluster volume add-brick dr_rep replica 2 gl03:/dr3 gl04:/dr3

После добавления необходимо выполнить перераспределение данных (rebalance)

Если нужен еще более надежный том, то можно увеличить число реплик и соответственно количество файловых систем.

gluster volume create dr_rep replica 3 gl01:/dr gl02:/dr gl03:/dr gl01:/dr2 gl02:/dr2 gl03:/dr2

Здесь параметр replica равен 3 а соответственно при создании или при расширении тома серверы должны указываться тройками.

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

Чередующийся том

Тома такого типа совершенно небезопасны, но возможно кому-то это и не нужно.

gluster volume create st_vol stripe 2 gl01:/st_vol gl02:/st_vol

Здесь создаётся том с именем st_vol, типом stripe (чередующийся) и состоять он будет из двух файловых систем на разных серверах.

Так как данные, записываемые на такой том, будут разделены пополам между двумя серверами, размер каталога на каждом сервере будет в два раза меньше чем суммарный объем на клиенте. При этом визуально содержимое будет идентичное.

Расширение такого тома не поддерживается, так как нельзя заново расщепить имеющиеся данные на новое число частей. При выполнении команды (add-brick) будет выдано предупреждение о том что все существующие данные на расширяемом томе могут быть потеряны. В моем случае так и произошло. Хотя данные на серверах остались, клиент же видел лишь пустой каталог. В таких случаях что бы не рисковать рекомендуется выполнить резервную копию данных, создать том с нужными параметрами заново и вернуть данные обратно.

Прочие команды

Удаление тома

Предварительно его необходимо остановить:

gluster volume stop <имя_тома>

 а затем можно удалить

gluster volume delete <имя_тома>

При этом данные на дисках всех серверов остаются нетронутыми.