Используемые термины: GlusterFS , Astra Linux .
В инструкции будет рассмотрен пример создания кластера GlusterFS. Нами будут использоваться 3 сервера:
- server1: 192.168.0.10.
- server2: 192.168.0.11.
- server3: 192.168.0.12.
В качестве операционной системы используется Astra Linux. Также инструкция подойдет для Debian или Ubuntu.
Подготовка системы к настройке
Установка и запуск GlusterFS
Подготовка репозитория (опционально)
Установка пакетов
Настройка диска, выделенного для GlusterFS
Создание GlusterFS-тома
Настройка подключения клиента к GlusterFS-тому
Удаление тома
Предварительная настройка
Подготовим наши серверы к развертыванию и настройке GlusterFS.
1. Установка curl
Обновляем кэш репозиториев:
apt update
Устанавливаем curl:
apt install curl
* данный пакет позволяет выполнять запросы по сети, в частности, для загрузки файлов.
2. Настройка брандмауэра
По умолчанию, в системах Linux на базе Deb брандмауэр работает в режиме «пропустить все». Но если в нашей системе он используется и блокирует соединения, нам необходимо открыть следующие порты:
- 24007 — обработка запросов сервисом glusterfsd.
- 24008 — порт управления.
- 49152-49156 — порты кирпичиков (brick), которые являются единицей хранения GlusterFS. На каждый кирпич свой порт. В данном примере мы открыли портов с небольшим запасом.
Вводим команды:
iptables -I INPUT -m state —state NEW -m tcp -p tcp —dport 24007:24008 -j ACCEPT
iptables -I INPUT -m state —state NEW -m tcp -p tcp —dport 49152:49156 -j ACCEPT
Для сохранения правил используем iptables-persistent:
apt install iptables-persistent
netfilter-persistent save
Установка GlusterFS
Для установки самой актуальной версии GlusterFS мы воспользуемся официальным источником пакетов. Выполняем данные команды на всех серверах кластера.
В штатном источнике пакетов Linux уже может быть GlusterFS. При желании, можно пропустить часть с настройкой репозитория и перейти к установке .
Настройка репозитория
Скачиваем и устанавливаем ключ репозитория glusterfs:
curl -fsSL https://download.gluster.org/pub/gluster/glusterfs/9/rsa.pub | gpg —dearmor > /etc/apt/trusted.gpg.d/gluster.gpg
В репозитории glusterfs нет отдельного дистрибутива для Astra Linux, поэтому нам нужно выполнить установку репозитория для Debian. Для этого нам нужно правильно сопоставить нашу версию Astra Linux с версией последнего. В зависимости от редакции системы, используем одну из двух страниц официального источника:
1. Таблица вариантов исполнения Astra Linux Special Edition .
2. Таблица вариантов исполнения Astra Linux Common Edition .
Например, если мы используем Astra Linux SE 1.7, то ей будет соответствовать версия Debian Buster.
Для удобства, создадим переменную, значением которой будет сопоставленная версия:
export DEB_VERSION=buster
Теперь создадим файл с настройками репозитория:
echo «deb [signed-by=/etc/apt/trusted.gpg.d/gluster.gpg] https://download.gluster.org/pub/gluster/glusterfs/LATEST/Debian/${DEB_VERSION}/amd64/apt ${DEB_VERSION} main» > /etc/apt/sources.list.d/gluster.list
* команда запишет строку доступа к репозиторию glusterfs, подставив значение из созданной переменной. Результат будет сохранен в файле /etc/apt/sources.list.d/gluster.list .
Обновляем кэш репозиториев:
apt update
Установка glusterfs
Вводим команду:
apt install glusterfs-server
Разрешаем сервис glusterd и стартуем его:
systemctl enable glusterd
systemctl start glusterd
В зависимости от версии Astra Linux, сервис может называться glusterfs-server. Тогда команды будут следующие:
systemctl enable glusterfs-server
systemctl start glusterfs-server
Проверяем статус:
systemctl status glusterd
Или:
systemctl status glusterfs-server
GlusterFS установлена.
Подготовка диска
Предположим, что на всех трех серверах у нас есть диск /dev/sdb, который мы хотим задействовать под нужды GlusterFS.
Для удобства, на каждом сервере создадим переменную с данным именем диска:
export DISK_NAME=sdb
Зачистим диск
wipefs —all —force /dev/${DISK_NAME}
* утилита wipefs зачистит все метаданные диска.
Создадим файловую систему:
mkfs.xfs -i size=512 /dev/${DISK_NAME}
* в данном примере, файловая система xfs с размером индексного дескриптора 512 байт. Данные параметры указаны в официальной документации GlusterFS.
Создадим каталог для хранения brick:
mkdir -p /data/brick1
* brick (или кирпич) — это единица хранения GlusterFS. По сути, обычный каталог с обычной файловой системой, где будут размещены служебные данные.
Посмотрим идентификаторы дисков на всех серверах, которые будут использоваться для построения GlusterFS:
blkid | grep ${DISK_NAME}
Теперь откроем файл:
vi /etc/fstab
И добавим информацию для автоматического монтирования диска:
UUID=3bb0b16a-fca8-4a93-b734-dd88e2bed53f /data/brick1 xfs defaults 1 2
* где:
- UUID — идентификатор диска, который мы получили с помощью команды blkid.
- /data/brick1 — созданный каталог, в котором будет храниться информация о brick.
- xfs — файловая система, в которой был нами отформатирован диск.
Выполняем монтирование с использованием новой строки в fstab:
mount -a
Проверяем, что диск примонтировался:
df -h
Мы готовы к созданию кластерной файловой системы.
Настройка GlusterFS
Все серверы должны обращаться друг к другу по имени. Если в нашей инфраструктуре нет внутреннего DNS, на серверах открываем файл hosts:
vi /etc/hosts
И добавляем информацию о именах серверов и их адресах. В нашем случае записи будут такие:
192.168.0.10 server1
192.168.0.11 server2
192.168.0.12 server3
Теперь переходим на один из серверов кластера, например, на server1 и присоединяем к кластеру другие серверы:
gluster peer probe server2
gluster peer probe server3
* в нашем примере это серверы server2 и server3 .
Мы должны увидеть сообщение об успешном присоединении
peer probe: success
Теперь можно попробовать ввести команду с любого другого сервера:
gluster peer probe server1
Мы должны увидеть:
peer probe: success. Host server1 port 24007 already in peer list
* данное сообщение означает, что server1 уже добавлен к кластеру.
Теперь на любом из серверов введем:
gluster peer status
Мы должны увидеть:
Number of Peers: 2
Hostname: server2
Uuid: f0e7b138-4874-4bc0-ab91-54f20c7068b4
State: Peer in Cluster (Connected)
Hostname: server3
Uuid: f0e7b138-4532-4bc0-ab91-54f20c701241
State: Peer in Cluster (Connected)
* на server1 мы увидим два пира до server2 и server3, а на server2 — server1 и server3 и так далее.
Создадим каталог для брика (основной единицы хранения в GlusterFS):
mkdir -p /data/brick1/gv0
* /data/brick1 — каталог, который мы создали на этапе выше.
Создадим том glusterfs с типом replicated:
gluster volume create gv0 replica 3 server1:/data/brick1/gv0 server2:/data/brick1/gv0 server3:/data/brick1/gv0
* где:
- gv0 — имя тома.
- replica — указываем на количество сервер, используемых для репликации данных
- server[1,2,3] — перечисляем серверы-участники и пути к каталогам для brick.
** есть возможность создать тома разных типов, от чего зависит политика хранения данных. Подробнее можно почитать в официальной документации .
Мы также можем создать кластер из двух нод репликации и одной — свидетеля. Для этого выполняем команду:
gluster volume create gv0 replica 2 arbiter 1 server1:/data/brick1/gv0 server2:/data/brick1/gv0 server3:/data/brick1/gv0
* в данном примере серверы server1 и server2 будут серверами репликации (идут по списку первыми), а server3 будет arbiter.
Мы должны увидеть что-то на подобие:
volume create: gv0: success: please start the volume to access data
Чтобы активировать том, вводим команду:
gluster volume start gv0
Мы должны увидеть:
volume start: gv0: success
Подробнее состояние тома можно посмотреть командой:
gluster volume info
В моем примере было:
Volume Name: gv0
Type: Replicate
Volume ID: f25cc3d8-631f-41bd-96e1-3e22a4c6f71f
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 3 = 3
Transport-type: tcp
Bricks:
Brick1: server1:/data/brick1/gv0
Brick2: server2:/data/brick1/gv0
Brick3: server3:/data/brick1/gv0
Options Reconfigured:
transport.address-family: inet
Том создан и работает.
Подключение тома к клиенту
Мы можем проверить работу GlusterFS на одном из серверов или на любом компьютере в сети.
Необходимо, чтобы в системе был установлен клиент:
apt install glusterfs-client
Создадим каталог, который будет точкой монтирования:
mkdir /mnt/gluster-test
Вводим команду:
mount -t glusterfs server1:/gv0 /mnt/gluster-test
* данной командой мы примонтируем созданный том gv0 в каталог /mnt/gluster-test .
Проверим синхронизацию файлов — создадим любой файл в смонтированном каталоге:
touch /mnt/gluster-test/testfile
На сервере с GlusterFS проверим, что файл появился в каталоге тома:
ls /data/brick1/gv0
Перманентное подключение
Чтобы каталог с glusterfs был примонтирован после перезагрузки системы, нам нужно добавить настройку в файл fstab.
Для начала, отмонтируем предыдущий каталог:
umount /mnt/gluster-test
Откроем файл fstab:
vi /etc/fstab
Пропишем:
server1:/gv0 /srv glusterfs defaults,_netdev 0 0
* обратите внимание на адрес сервера, к которому мы будем подключаться (в моем примере server1 ).
Выполняем монтирование каталогов с использованием fstab:
mount -a
Удаление тома
На всех серверах открываем fstab:
vi /etc/fstab
Удаляем строку, где мы монтировали удаляемый том:
server1:/gv0 /srv glusterfs defaults,_netdev 0 0
* в нашем примере мы удалим том gv0 .
Отмонтируем раздел. В нашем примере мы его монтировали в каталог /srv:
umount /srv
Останавливаем вольюм:
gluster volume stop gv0
Система запросит подтверждения — вводим y :
Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y
Теперь можно удалить раздел в самом гластере:
gluster volume delete gv0
Мы будем предупреждены, что данные будут потеряны. Соглашаемся:
Deleting volume will erase all information about the volume. Do you want to continue? (y/n) y
Если удаление пройдет корректно, мы увидим что-то на подобие:
volume delete: gv0: success