Настройка GlusterFS в Astra Linux

Используемые термины: 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