GlusterFS — это файловая система для распределенного хранения данных, которая до недавнего времени была доступна только для корпоративных пользователей. Сейчас же она распространяется с открытым исходным кодом и ее могут использовать все желающие.
С помощью GlusterFS можно создать масштабированный, виртуальный пул, приспособленный для работы RAID через сеть интернет. с различными методами объединения пространства. В дополнение здесь есть возможности, которых нет в аппаратных решениях. В этой статье мы рассмотрим как выполняется настройка GlusterFS в Ubuntu и на что способна эта файловая система.
Как работает GlusterFS
GlusterFS создает общий пул для хранения данных на основе нескольких сетевых устройств. Все это объединяется общим пространством имен, к которому есть доступ у всех пользователей. В качестве пользователей могут выступать как локальные программы, так и облачные сервисы.
В отличие от других подобных программных продуктов для GlusterFS не обязательно иметь отдельный сервер с метаданными для поиска файлов в пуле. Все файлы идентифицируются по хэшу и становятся очень просто доступными.
Файловая система реализована в пространстве пользователя и для доступа к реальной файловой системе используется Fuse. Это позволяет работать с файловой системой более просто и прозрачно. Хотя существует библиотека libgfapi, которая дает прямой доступ к жесткому диску, позволяет более эффективно хранить образы виртуальных машин qemu.
Как уже говорилось GlusterFS позволяет объединять несколько сетевых устройств в одну файловую систему. Они могут связываться между собой с помощью TCP/IP или InfiniBand. Общее хранилище будет доступно с помощью клиента GlusterFS, по NFS или Samba.
При зеркалировании данных элементарной единицей считается один файл, а при разделении, отдельные части файла разделяются между системами. Этот подход хорошо масштабируется при использовании больших систем, и чем больше систем, тем выше производительность. Вы можете создавать несколько копий файла и использовать разделение одновременно. Баланс между зеркалированием и разделением важен для максимальной производительности и безопасности данных.
Объем GlusterFS очень просто расширить, для этого достаточно добавить еще одно устройство.
Установка GlusterFS
Все необходимые пакеты есть в официальных репозиториях большинства дистрибутивов. Например, для установки GlusterFS в Fedora достаточно выполнить:
sudo dnf install glusterfs glusterfs-cli glusterfs-server
А в Ubuntu:
sudo apt install glusterfs glusterfs-cli glusterfs-server
Дальше нам нужно запустить сервис и убедится, что он запущен и работает:
sudo systemctl start glusterd.service
$ sudo systemctl status glusterd.service
Или:
sudo systemctl start glusterfs-server.service
$ sudo systemctl status glusterfs-server.service
Команда gluster
Для управления всеми возможностями Glusterfs используется утилита gluster. Для того чтобы вы могли лучше ориентироваться в ней мы рассмотрим ее синтаксис и использование. Синтаксис команды выглядит следующим образом:
$ gluster команда подкоманда параметры
Вот основные команды:
- volume — управление разделами;
- peer — управление подключенными машинами;
- snapshot — работа со снапшотами;
Рассмотрим синтаксис основных команд volume, с помощью которых будет выполняться настройка glusterfs:
- volume info — информация о томе;
- volume create — создать новый том на устройстве;
- volume delete — удалить том;
- volume start — запустить том;
- volume stop — временно остановить том;
- volume add-brick — добавить раздел к тому;
- volume remove-brick — удалить раздел из тома;
- volume replace-brick — заменить раздел на другой;
- volume rebalance — перебалансировать файлы.
Дальше рассмотрим команды peer, которые мы тоже сегодня будем использовать:
- peer probe — подключить новый компьютер к пулу;
- peer detach — отключить компьютер от пула;
- peer status — отобразить подключенные устройства.
Теперь вы знаете достаточно, чтобы продолжить работу с программой. И разобраться в возможных проблемах. Дальше мы рассмотрим как настроить Glusterfs для хранения данных.
Настройка Glusterfs
Мы будем настраивать распределение данных GlusterFS между двумя системами, сервис должен быть установлен и настроен на обоих из них. На обоих компьютерах наши устройства хранения смонтированы в /storage. Перед тем как начать работать с Glusterfs, давайте добавим ip адреса наших серверов /etc/hosts, чтобы обращаться с ними было легче:
sudo vi /etc/hosts
Это необходимо сделать на обоих машинах. Дальше нам нужно создать пул. Неважно какую машину вы выберете для этого все будет работать одинаково. Мы будем использовать gluster1. Чтобы комьпютеры могли получить доступ друг к другу, нужно открыть несколько портов в брандмауэре:
firewall-cmd --zone=public --add-port=24007-24008/tcp --permanent
$ firewall-cmd --zone=public --add-port=24009/tcp --permanent
$ firewall-cmd --zone=public --add-service=nfs --add-service=samba --add-service=samba-client --permanent
$ firewall-cmd --zone=public --add-port=111/tcp --add-port=139/tcp --add-port=445/tcp --add-port=965/tcp --add-port=2049/tcp --add-port=38465-38469/tcp --add-port=631/tcp --add-port=111/udp --add-port=963/udp --add-port=49152-49251/tcp --permanent
$ firewall-cmd --reload
Для подключения машины gluster2 выполните команду:
sudo gluster peer probe gluster2
Локальная система автоматически добавляется к пулу, поэтому дополнительно ничего делать не нужно. С помощью следующей команды мы создадим хранилище с репликацией на двух подключенных системах:
sudo gluster volume create gv0 replica gluster1:/storage/brick1/gv0/ gluster2:/storage/brick1/gv0/
По умолчанию используется протокол TCP/IP для взаимодействия, но вы можете вручную указать InfiniBand. Если вы попытаетесь создать хранилище на корневом разделе, то у вас ничего не получиться, для его создания нужно добавить в конец команды опцию force. Далее смотрим информацию о созданном хранилище:
sudo gluster volume info gv0
Дальше можно запустить созданную группу:
sudo gluster volume start gv0
Существует несколько способов получить доступ к хранилищу GlusterFS. Работа через FUSE будет наиболее быстрой. Также можно использовать Samba или NFS. Кроме того, преимущество использование официального клиента, в том, что вы можете получить доступ к отдельным хранилищам. Для подключения Glusterfs с помощью официального инструмента используйте mount:
sudo mount -t glusterfs gluster1:/gv0 /mnt/glusterfs/
Для настройки автоматического монтирования вам понадобится добавить строку в /etc/fstab. Вы можете очень легко расширить существующий пул при необходимости, для этого просто добавьте новый раздел:
sudo gluster peer probe gluster3
sudo gluster volume add-brick replica 3 gv0 gluster3:/storage/brick1/gv0/
Естественно, что ip адрес узла gluster3 должен быть добавлен в файл /etc/hosts. Сначала мы добавляем его в список пиров, затем инициализируем на нем наш раздел. После выполнения команды наше хранилище будет состоять из трех устройств. Вы можете очень просто удалить один из разделов и открепить устройство:
sudo gluster volume remove-brick gv0 gluster3:/storage/brick1/gv0/
$ sudo gluster peer detach gluster3
Когда вы добавляете или удаляете разделы, необходимо пересортировать данные, система работала наиболее эффективно. Для этого выполните:
gluster volume rebalance gv0 start
Чтобы посмотреть статус балансировки используйте команду status:
gluster volume rebalance gv0 status
Настройка шифрования GlusterFS
Если все узлы находятся в приватной сети, то это еще ничего, но если вы собираетесь применять GlusterFS через сеть, то желательно включить шифрование и аутентификацию по RSA ключу. По умолчанию никакая аутентификация не используется. Сначала создаем серитфикаты на каждом узле:
cd /etc/ssl/
$ sudo openssl genrsa -out glusterfs.key 2048
$ sudo openssl req -new -x509 -key glusterfs.key -subj "/CN=gluster1" -out glusterfs.pem
Скопируйте ключ gluster.key на другой сервер и создайте там на основе него сертификат, вместо gluster0 используйте имя своего хоста:
cd /etc/ssl/
$ sudo openssl req -new -x509 -key glusterfs.key -subj "/CN=gluster2" -out glusterfs.pem
Объедините содержимое обоих файлов pem и файле .ca и разместите его на всех серверах в папке /etc/ssl:
cat /etc/ssl/glusterfs.pem gluster2.pem > glusterfs.ca
Включите поддержку шифрования и перезапустите сервер:
sudo touch /var/lib/glusterd/secure-access
$ sudo systemctl restart glusterd
Включите ssl на всех серверах и клиентах:
sudo gluster volume set gv0 auth.ssl-allow '*'
$ gluster volume set gv0 server.ssl on
Теперь перезапустите группу томов:
sudo gluster vol stop gv0
$ sudo gluster vol start gv0
Проверить работает ли ssl сейчас вы можете посмотрев лог файл:
grep -i ssl /var/log/glusterfs/gv0.log