Устанавливаем wget и attr
yum install wget attr -y
Также необходимо отключить файрволл и удалить его из автозагрузки, так как клиентская машина обращается к серверам каждый раз по разным портам
systemctl stop firewalld
systemctl disable firewalld
Добавляем необходимые репозитории:
1 2 |
<strong>yum search centos-release-gluster yum install -y centos-release-gluster5.noarch</strong> |
Устанавливаем серверную часть GlusterFS
yum install -y glusterfs gluster-cli glusterfs-libs glusterfs-server
Далее запускаем службу glusterd и добавляем в автозагрузку;
systemctl start glusterd
systemctl enable glusterd
отключаем сетевой экран и SELinux.
vi /etc/sysconfig/selinux
SELINUX=disabled
Примечание: Во избежание различных проблем, рекомендуется использовать службу NTP для синхронизации времени серверов хранения и клиентов, а также использовать DNS вместо локальных файлов hosts.
Устанавливаем клиентскую часть GlusterFS
yum install glusterfs-client
====================================
Создание томов
Прежде чем создать распределенный по нескольким узлам том, необходимо объединить серверы в доверенный пул.
Если у вас два сервера, например 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 <имя_тома>
При этом данные на дисках всех серверов остаются нетронутыми.
==================================================
Монтирование томов
Наиболее популярные средства для доступа к Gluster-тому это NFS и собственный клиент(Gluster Native Client)
Подключить том по NFS можно без какой либо подготовки системы:
- mount gl01:/<имя_тома> /<каталог_монтирования>
В таком случае, сервис Gluster на узлах хранения подгрузит соответствующий транслятор и будет вести себя как NFS-сервер третей версии.
А вот что бы пользоваться клиентом, придется предварительно его установить:
на Ubuntu:
- apt-get install glusterfs-client
на CentOS:
- yum -y install glusterfs glusterfs-fuse
После установки клиента, монтирование тома выглядит следующим образом:
- mount.glusterfs gl01:/<имя_тома> /<каталог_монтирования>
Монтирование с помощью fstab
Добавляем строчку в /etc/fstab вида:
gl01.mydomain.com:/<имя_тома> /<каталог_монтирования> glusterfs defaults,_netdev 0 0
Примечание: Выполненные тесты производительности протоколов доступа показали, что NFS наиболее эффективен при чтении любых данных и записи мелких файлов. Собственный клиент показал лучшую производительность при интенсивной записи больших файлов. Особенно это видно при записи с нескольких клиентов.
=================================================
Тонкая настройка
При создании нового тома, в рабочей директории по умолчанию (/var/lib/glusterd/vols) создается поддиректория с именем соответствующим названию тома. В этом каталоге размещается вся служебная информация о конкретном томе среди которой несколько файлов с расширением *.vol. Главный из них это trusted-<имя-тома>-fuse.vol, он описывает общие параметры тома; информацию о серверах, топологию репликации, и некоторые общие параметры используемых трансляторов. В файлах <имя-тома>-<имя-сервера>-<имя-каталога>.vol описываются параметры трансляторов серверов.
Отрывок vol-файла trusted-r1-fuse.vol:
[spoiler]volume rp-client-0 # секция описывающая первый сервер
type protocol/client # тип/подтип транслятора
option send-gids true
option password bdcb0d40-a4b2-40f9-ab7e-404f6eedcf1b
option username ce259dd4-ffaf-4cbb-ab80-8419dec5dc67
option transport-type tcp
option remote-subvolume /dr
option remote-host gl01
end-volume
volume rp-client-1 # секция описывающая второй сервер
type protocol/client # тип/подтип транслятора
option send-gids true
option password bdcb0d40-a4b2-40f9-ab7e-404f6eedcf1b
option username ce259dd4-ffaf-4cbb-ab80-8419dec5dc67
option transport-type tcp
option remote-subvolume /dr
option remote-host gl02
end-volume
volume r1-replicate-0 # топология репликации
type cluster/replicate # тип/подтип транслятора
subvolumes r1-client-0 r1-client-1 # реплика с client-0 на client-1
end-volume
volume r1-dht # эти параметры определяют как будут
type cluster/distribute # распределяться поступаемые данные
subvolumes r1-replicate-0 # в нашем случае не как т.к. том не Distributed
end-volume
…
…
volume r1-io-cache # параметры кеширования
type performance/io-cache # тип/подтип транслятора
option cache-size 64MB
option cache-timeout 4
option max-file-size 2MB
subvolumes r1-read-ahead
end-volume
[/spoiler]
Каждая секция описывает определенные параметры транслятора. Последовательность секций соответствует цепочке трансляторов через которую проходят данные. Хотя vol-файлы могут использоваться для изменения параметров томов и серверов, на мой взгляд они более полезны для иллюстрации работы ФС изнутри и понимания команды set.
- gluster volume set <том> <ключ> <значение>
Данная команда позволяет изменять значения параметров некоторых трансляторов на лету.
Например задать список клиентов которым разрешен доступ к тому:
- gluster volume set r1 auth.allow 10.200.77.45,10.200.77.46
или задать наиболее эффективные значения параметров производительности
- performance.write-behind-window-size 1073741824
- performance.cache-refresh-timeout 1
- performance.cache-size 1073741824
- performance.read-ahead off
Доступный список опций, описания и значения по умолчанию можно найти на официальном сайте.
=============================================
Квоты
Еще одна интересная возможность которая очень полезна в облачной среде, где одним томом может пользоваться множество пользователей.
Существует два вида квот: на каталог и на том.
Вначале необходимо их включить для конкретного тома:
- gluster volume quota r1 enable
Установить квоту на весь том в 1GB:
- gluster volume quota r1 limit-usage / 1GB
квота на конкретный каталог тома:
- gluster volume quota r1 limit-usage /test 100MB
Вывести список квот:
- gluster volume quota r1 list
Path Hard-limit Soft-limit Used Available
-----------------------------------------
/test 100.0MB 80% 0Bytes 100.0MB
/ 1.0GB 80% 0Bytes 1.0GB
Стоит заметить, что срабатывают квоты не моментально. Например при свободных 50 МБ иногда может получиться записать файл размером в 200 МБ и обрыва записи не произойдет.