Glusterfs centos 7 настройка
Обновлено: 04.07.2024
GlusterFS — это распределённая, параллельная, линейно масштабируемая файловая система с возможностью защиты от сбоев. GlusterFS может объединить хранилища данных, находящиеся на разных серверах, в одну параллельную сетевую файловую систему. GlusterFS разделена на серверную и клиентскую части.
Рассмотрим установку серверной и клиентской частей распределённой файловой системы Gluster
В наличии у нас имеются 2 сервера и 1 клиентская машина.
Сеть: 192.168.1.0/24.
1-й сервер: хост glusterfs-srv1, IP-адрес 192.168.1.170
2-й сервер: хост glusterfs-srv2, IP-адрес 192.168.1.171
Клиентская машина: хост glusterfs-client1, IP-адрес 192.168.1.23
1. Подготовка и установка необходимого программного обеспечения
На всех машинах:
Устанавливаем wget и attr
Затем открываем файл /etc/hosts
и в нём пропишем IP-адреса и хосты машин
Также необходимо отключить файрволл и удалить его из автозагрузки, так как клиентская машина обращается к серверам каждый раз по разным портам
systemctl stop firewalld
systemctl disable firewalld
Добавляем необходимые репозитории:
Теперь создадим каталог /mnt/data
Устанавливаем серверную часть GlusterFS
yum install -y glusterfs gluster-cli glusterfs-libs glusterfs-server
После этого подключаем новые жёсткие диски утилитой fdisk
Вводим n (add a new partition)
В Partition type выбираем p (primary)
Первый сектор: оставляем по умолчанию
Номер раздела: 1
Утилита снова предложит команду
Вводим w для применения изменений и выхода из fdisk
Затем создадим на жёстком диске файловую систему
и монтируем его в каталог /mnt/data
для того, чтобы новый жёсткий диск автоматически монтировался при загрузке сервера, открываем файл /etc/fstab
и впишем в него следующую строчку
/dev/sdb1 /mnt/data ext4 defaults 1 2
Запускаем службу GlusterFS и добавляем её в автозагрузку
systemctl start glusterd
systemctl enable glusterd
На клиентской машине
Устанавливаем клиентскую часть GlusterFS
Полезно знать, что процессов у Гластера несколько, вот их назначения:
glusterd = management daemon
Главный демон, управляет вольюмом, тянет за собой остальные демоны, отвечающие за брики и восстановление данных.
glusterfsd = per-brick daemon
У каждого брика запускает свой glusterfsd демон.
glustershd = self-heal daemon
Отвечает за ребилд данных у реплицированных вольюмов в случаях отвала нод кластера.
glusterfs = usually client-side, but also NFS on servers
Например, прилетает с пакетом нативного клиента glusterfs-fuse.
2. Объединение серверов в кластер
Чтобы сервера работали совместно, объединим их в кластер.
Для этого на 1-м сервере glusterfs-srv1 вводим команду:
gluster peer probe glusterfs-srv2
должно появиться сообщение о результате
peer probe: success
Возможно, потребуется также и на 2-м сервере glusterfs-srv2
gluster peer probe glusterfs-srv1
должно появиться сообщение о результате
peer probe: success
Затем на обоих серверах перезапускаем службу GlusterFS
После этого на любом из серверов (можно на обоих) проверяем
Должна появиться такая табличка
[root@cent
gluster volume info all
Уменьшим время в течение которого клиент ожидает ответ от сервера и в случае недоступности сервера автоматически переподключается к другому серверу в trusted storage pool(по умолчанию таймаут 42 секунды, что вынуждает клиента ожидать 42 секунды, чтобы переключитя на другую ноду,если текущая не отвечает)
3. Настройка хранения и распределения данных
GlusterFS поддерживает 5 типов распределения данных, объединённых в том (volume):
— Distributed Volume (распределённый) — распределение данных в случайном порядке между каталогами, входящими в том
— Replicated Volume (реплицируемый) — зеркальное распределение данных (в каждом томе одинаковые файлы)
— Striped Volume (разделенный по частям) — разбиение файлов по частям и хранение каждой части на отдельном сервере
— Distributed Striped Volume (распределённый и разделенный по частям) — разбиение файлов на части и распределение по каталогам
— Distributed Replicated Volume (распределённый и реплицируемый) — распределение данных в случайном порядке по каталогам, каждый из которых имеет свою зеркальную копию
Настройка Distributed Volume
На обоих серверах создадим папку /mnt/data/dv
На 1-м сервере glusterfs-srv1 создадим том dv-data и стартанём его
gluster volume create dv-data transport tcp glusterfs-srv1:/mnt/data/dv glusterfs-srv2:/mnt/data/dv force
gluster volume start dv-data
На клиентской машине создадим каталог /mnt/data/dv-data
и монтируем в него созданный том dv-data
mount.glusterfs glusterfs-srv1:/dv-data /mnt/data/dv-data
После монтирования тома в /mnt/data/dv-data можно копировать какие-либо данные. На клиентской машине они будут отображаться в исходном виде, на серверах же они будут распределены.
Для того, чтобы клиентская машина могла монтировать том при загрузке, необходимо открыть файл /etc/fstab
и добавить в него такую строку:
glusterfs-srv1:/dv-data /mnt/data/dv-data glusterfs defaults,_netdec 0 0
Если необходимо размонтировать том dv-data на клиентской машине, вводим команду:
Остановить и удалить том можно на 1-м сервере:
gluster volume stop dv-data
gluster volume delete dv-data
Настройка Replicated Volume
На серверах создадим папку /var/shara
На 1-м сервере glusterfs-srv1 создадим том shara и стартанём его
gluster volume create shara replica 2 transport tcp glusterfs-srv1:/var/shara glusterfs-srv2:/var/shara force
gluster volume start shara
- gluster — команда для GlusterFS;
- volume — команду следует применить к хранилищу ( volume );
- add-brick — добавить «кирпич» ( brick );
- www — имя хранилища, к которому добавляется «кирпич»;
- replica 2 — указываем, что тип хранилища реплицируемый, а количество ‘кирпичей’ увеличится на 1;
- glusterfs-srv1:/var/shara — ip-адрес(или хостнейм) и абсолютный путь к месту, где будут храниться данные.
Если необходимо удалить «кирпич» из хранилища GlusterFS, то следует выполнить следующую команду:
gluster volume remove-brick shara replica 1 glusterfs-srv2 :/var/shara force Removing brick ( s ) can result in data loss . Do you want to Continue ? ( y/n ) yЗдесь вместо add-brick используем команду remove-brick и количество реплик уменьшаем на 1 (было 2 станет 1).
Чтобы наверняка удалить peer - ов
rm -f /var/lib/glusterd/peers/*
systemctl restart glusterd
На клиентской машине создадим каталог /var/shara/
и монтируем в него созданный том shara
mount.glusterfs glusterfs-srv1:/shara /var/shara/
После монтирования тома в /var/shara/ можно копировать какие-либо данные. На клиентской машине они будут отображаться в исходном виде, а на серверах же они будут реплицированы, то есть сервера будут служить зеркалами друг для друга.
Для того, чтобы клиентская машина могла монтировать том при загрузке, необходимо открыть файл /etc/fstab
и добавить в него такую строку:
glusterfs-srv1:/shara /var/shara/ glusterfs defaults,_netdec 0 0
Если необходимо размонтировать том shara на клиентской машине, вводим команду:
Остановить и удалить том можно на 1-м сервере:
gluster volume stop shara
gluster volume delete shara
Чтобы данные копировались реплицировались с сервер 1 на сервер 2 и наоборот, необходимо:
примонтировать разделы:
на сервер1 выполняем:
mount -t glusterfs glusterfs-srv2:/shara /sh
на сервер 2 соответственно
mount -t glusterfs glusterfs-srv1:/shara /sh
отметим, что здесь директория /var/shara используется в качестве моста и использовать данную директорию при монтировании не возможно.
данные если создавать данные в директории /var/shara или /sh они будут корректно добавляться и на другие сервера.
создадим файловую систему из 4-х серверов:
Hostname: 192.168.1.171
Uuid: 1d26e5b2-300e-4de3-aaca-a28a5b130906
State: Peer in Cluster (Connected)
Hostname: 192.168.1.172
Uuid: ad24f48f-b692-4ebf-921c-16920b28f000
State: Peer in Cluster (Connected)
Hostname: 192.168.1.173
Uuid: e90276da-a5f7-4897-bd73-b2638e6a2e3e
State: Peer in Cluster (Connected)
gluster volume create shara replica 3 transport tcp 192.168.1.171:/var/shara 192.168.1.172:/var/shara 192.168.1.173:/var/shara force
volume create: shara: success: please start the volume to access data
В этом руководстве мы рассмотрим настройку распределенной файловой системы GlusterFS на кластере, состоящем из трех узлов. Кластерные файловые системы часто используются в отказоустойчивых системах для обеспечения общего хранилища файлов.
Мы не рекомендуем использовать кластерные системы в задачах, где предполагается интенсивная запись данных, требующая высоких показателей IOPS и прогнозируемую задержку IO. Однако, для задач, в которых операции чтения значительно преобладают над операциями записи и нет требований к ультранизкой задержке IO, кластерные файловые системы вполне могут использоваться.
Настройка разрешения имен для приватной сети
В рамках настройки будем полагать, что все узлы соединены доверенной приватной сетью, в которой они доступны по доменными именам:
- server1.private 10.0.0.1/24
- server2.private 10.0.0.2/24
- server3.private 10.0.0.3/24
Убедитесь, что серверы находятся в разных доменах отказа, чтобы не столкнуться с ситуацией, когда авария затронет сразу две или больше машин.
В ходе настройки будем предполагать, что используются серверы под управлением Debian 9, Ubuntu 16.04 или 18.04 или CentOS7.
Файрвол, SELinux, AppArmor
Мы предполагаем, что для приватной сети весь трафик разрешен и не блокируется. AppArmor (Ubuntu, Debian), SELinux не накладывают ограничений или полностью отключены.
Установка NTPD
В кластерных системах очень важно, чтобы все серверы имели одинаковое время. Даже небольшой лаг времени может привести к проблемам. Для решения этой проблемы необходимо установить сервер NTPD на каждом из узлов.
Ubuntu, Debian Linux:
CentOS 7:
Выбор фактора репликации
Задание пространства для файловой системы
В реальной настройке для хранения данных GlusterFS выделяют отдельные дисковые устройства, на которых создается файловая система и отдается целиком под управление GlusterFS. В нашем варианте мы будем считать, что файловая система доступна по пути /opt/gluster, вы можете смонтировать к этому каталогу свое устройство с файловой системой или использовать пространство корневой системы, как будем делать мы.
На каждом узле создадим каталог /opt/gluster-volume:
При выделении отдельного устройства для тома GlusterFS рекомендуется создать на нем файловую систему XFS
Установка и настройка GlusterFS
На каждом узле выполним установку GlusterFS и активируем сервер. На случай, если установочная информация устареет, вы можете обратиться к разделу оригинальной документации GlusterFS.
Debian Linux:
Ubuntu Linux 16.04, 18.04:
CentOS 7:
Добавление узлов в пул
Для добавления узлов в пул узлов необходимо на любом из узлов выполнить команду:
Посмотреть добавленные в пул узлы можно командой:
Создание тома хранения данных
Теперь, когда все серверы находятся в пуле, можно создать том для хранения данных. Поскольку в нашем примере том создается в корневой файловой системе, нам придется использовать аргумент force.
Убедиться в том, что том создан можно с помощью команды:
Для активации тома его необходимо запустить:
Теперь можно запросить состояние тома gfs:
Информация о томе:
Настройка доступа к тому
Для настройки безопасности выполните следующие команды, которые позволяют получать доступ к тому только этим трем серверам, на которых установлен GlusterFS, если у вас есть другие клиенты, их необходим тоже добавить:
Монтирование тома
Проверим монтирование тома в ручном режиме, выполнив на каждом узле:
Проверим, что в файловую систему можно добавлять файлы и они становятся доступны на других узлах. Запустите эту команду на любом из узлов:
Проверьте на двух других узлах, что файл доступен:
Добавьте на каждом хосте запись в /etc/fstab для автоматического монтирования тома при запуске системы:
Перезапустите каждый сервер поочередно для того, чтобы убедиться, что после старта сервер автоматически монтирует каталог /mnt/gluster:
Почему не Ceph
По сравнению с GlusterFS Ceph более сложна в настройке и более тяжеловесна (MON,OSD, MDS). Для распределенных файловых систем начального уровня, которые развертываются на малом количестве узлов GlusterFS выглядит более предпочтительной и легковесной.
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
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
192.168.51.1 gluster1
192.168.51.2 gluster2
Это необходимо сделать на обоих машинах. Дальше нам нужно создать пул. Неважно какую машину вы выберете для этого все будет работать одинаково. Мы будем использовать 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
Выводы
В этой статье мы рассмотрели как выполняется настройка Glusterfs для хранения и репликации данных на нескольких серверах в сети. Этому может быть мало применений для домашних пользователей, но такая технология незаменима при обработке больших объемов данных в организациях. Жаль, что пока Glusterfs работает очень медленно, особенно с небольшими файлами и если узлов не много, а синхронизация будет выполняться через интернет, то целесообразнее использовать lsyncd.
Пример установки и настройки репликации GlusterFS с защитой SSL сертификатов.
Предисловие
GlusterFS на тестах показал очень низкую производительность. Был создан кластер из двух серверов и одним клиентом с гигабитным каналам. Rsync и обычный cp работал со скоростью 70.59kB/s. 200МБ копировался час. Вобщем производительность у гластера очень низкая.
Установка на Ubuntu
Установка на Centos 7
Проверка статуса запуска
Настройка безопасности
По умолчанию, к кластеру может подключиться любой. Чтобы этого не произошло, нужно включить SSL и создать сертификаты. Тогда к вашему кластеру могут подключиться только те сервера чьи сертификаты прописаны в glusterfs.ca.
Включите SSL настройки:
На каждом хосте, входящий в кластер glusterfs сделайте следующие настройки:
Файл glusterfs.ca должен содержать ключи со всех серверов содержимого файлов glusterfs.pem.
При желании можете сгенерировать dhparam:
После настроек перезапустите сервис:
Настройка IPTables
Создание кластера реплики
Предположим у вас два сервера с IP адресами 192.168.1.10 и 192.168.1.11. На них будет установлен gluster сервер с репликой. На каждом хосте в файле /etc/hosts пропишите хосты кластера.
На 0м сервере выполните команду. Это позволит подключить первый сервер к нулевому.
Проверьте подключение пиров:
После подключение серверов, создайте на двух серверах папки /data/volume1. Там будут хранится файлы кластера.
В параметре auth.allow вы можете указать IP адреса клиентов через запятую, которые могут монтировать volume. Например: 192.168.1.15,192.168.1.50
На клиенте. Создайте папку.
Подключитесь к кластеру с клиента:
Если все прошло успешно, добавьте монтирование в /etc/fstab.
Опция backupvolfile-server позволяет, если не доступен srv1, подключаться к srv2. Это работает только в момент первого подключения к кластеру. После подключения к кластеру, клиент узнает все IP адреса кластера, и уже работает с ними напрямую.
Читайте также: