Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

Оцените статью

GlusterFS — это масштабируемая, распределённая файловая система с открытым исходным кодом, которая объединяет хранилища нескольких серверов в единое пространство имён. Она идеально подходит для создания отказоустойчивых и высокопроизводительных хранилищ, особенно в средах, где требуется простота настройки и отсутствие единой точки отказа. В этой статье мы подробно рассмотрим процесс развёртывания кластера GlusterFS на трёх узлах под управлением Ubuntu Linux, начиная с подготовки инфраструктуры и заканчивая тестированием производительности. Вы узнаете, как настроить DNS, установить пакеты, открыть порты, объединить узлы в кластер, создать том и подключить его на клиентах. Также мы разберём типичные ошибки и способы их устранения.

Подготовка

Прежде чем приступить к установке, необходимо обеспечить корректное сетевое взаимодействие между узлами будущего кластера. Для этого:

  • Настройте разрешение DNS-имён на своём внутреннем DNS-сервере или пропишите имена хостов в файле /etc/hosts на каждом узле. Это критически важно, так как GlusterFS использует имена хостов для идентификации участников кластера.
  • Проверьте, что все хосты будущего кластера доступны как по коротким, так и по полным доменным именам (FQDN). Например, prod-srv-01 и prod-srv-01.example.local. Несоответствие может привести к ошибкам при создании тома.

Подключаем последнюю стабильную версию репозитория и устанавливаем необходимые компоненты на каждом из узлов кластера. В данном примере используется версия GlusterFS 9, но вы можете выбрать актуальную на момент чтения.

# add-apt-repository ppa:gluster/glusterfs-9
# apt update
# apt install glusterfs-client glusterfs-server
# systemctl start glusterd.service
# systemctl enable glusterd.service

Пояснение:
glusterfs-server — демон, управляющий работой кластера.
glusterfs-client — утилиты для монтирования томов на клиентах (в нашем случае клиентами будут сами узлы кластера).
glusterd — основной сервис, который необходимо запустить и добавить в автозагрузку.

Для корректной работы GlusterFS необходимо разрешить взаимодействие между узлами по следующим портам:

  • 24007–24010 TCP (основные порты демона)
  • 49152–49153 TCP (порты для работы с томами)
  • 38465–38467 TCP (порты для управления)
  • 111 TCP/UDP (порт RPC)

Пример настройки для UFW в Ubuntu Linux (замените 185.133.42.65 на IP-адрес вашей подсети или конкретного узла):

# ufw allow from 185.133.42.65 to any port 24007:24010 proto tcp
# ufw allow from 185.133.42.65 to any port 49152:49153 proto tcp
# ufw allow from 185.133.42.65 to any port 38465:38467 proto tcp
# ufw allow from 185.133.42.65 to any port 111 proto tcp
# ufw allow from 185.133.42.65 to any port 111 proto udp

Если вы используете iptables, правила будут аналогичными. Убедитесь, что брандмауэр не блокирует трафик между узлами.

Объединяем узлы в кластер

Теперь, когда все узлы готовы, добавим два дополнительныхaliceai узла к первому (главному). Выполните на первом узле:

# gluster peer probe prod-srv-02
# gluster peer probe prod-srv-03

Что такое peer probe?
Это команда, которая добавляет новый узел в кластер. После выполнения на первом узле, остальные узлы узнают друг о друге автоматически.

Проверяем статус кластера из трёх узлов. Выполните на любом узле:

# gluster peer status

Number of Peers: 2

Hostname: prod-srv-02

Uuid: 0e496b5f-6419-42fd-9e68-12304b2408c9

State: Peer in Cluster (Connected)

Hostname: prod-srv-03
 Uuid: 8859e4d4-bd54-40e8-be9b-5e6879b25eac
 State: Peer in Cluster (Connected)

Пока всё идёт хорошо, но есть нюанс: при запросе статуса с других узлов (не с того, на котором выполнялся peer probe) центральный узел может отображаться не по имени, а по IP-адресу. Это нормально, если DNS или файл hosts настроены не полностью. Пример:

gluster peer status

Number of Peers: 2

Hostname: 185.133.42.65

Uuid: d6f8728c-dfc7-48d5-96b2-1c0bcde88638

State: Peer in Cluster (Connected)

Hostname: prod-srv-02
 Uuid: 0e496b5f-6419-42fd-9e68-12304b2408c9
 State: Peer in Cluster (Connected)

Важно: Если вы видите IP вместо имени, это не ошибка, но может усложнить дальнейшую настройку. Рекомендуется привести все записи к единому виду (имена или IP) в файле /etc/hosts на всех узлах.

Создаём хранилище

На каждом из узлов создаём каталог, который будет использоваться как «кирпич» (brick) для хранения данных GlusterFS.

# mkdir /opt/gluster-storage

Что такое brick?
Brick — это базовый элемент хранения в GlusterFS, представляющий собой каталог на файловой системе узла. Том состоит из одного или нескольких bricks, объединённых по определённой схеме (репликация, распределение и т.д.).

Теперь собираем том из трёх bricks. Обратите внимание, что один из хостов может быть указан по IP-адресу, если он не резолвится в PTR-запись (обратное DNS-имя). В нашем примере первый узел указан как IP, остальные — по имени.

gluster volume create gluster_volume replica 3 185.133.42.65:/opt/gluster-storage/ prod-srv-02:/opt/gluster-storage/ prod-srv-03:/opt/gluster-storage/

Пояснение параметров:

replica 3 — создаётся том с тройной репликацией, то есть каждый блок данных хранится на трёх узлах. Это обеспечивает отказоустойчивость: выход из строя одного или даже двух узлов не приведёт к потере данных.

— Если у вас только два узла, можно использовать replica 2 или добавить арбитр (arbiter) — специальный узел, который хранит только метаданные, но не данные. Пример для двух узлов и одного арбитра:

gluster volume create gluster_volume replica 3 arbiter 1 185.133.42.65:/opt/gluster-storage/ prod-srv-02:/opt/gluster-storage/ prod-srv-03:/opt/gluster-storage/

Настройка и запуск клиентов на узлах кластера

На каждом узле кластера создаём точку монтирования:

# mkdir /mnt/gluster-storage

Прописываем монтирование тома GlusterFS в файл /etc/fstab. Это обеспечит автоматическое подключение после перезагрузки.

localhost:/gluster_volume /mnt/gluster-storage glusterfs defaults,_netdev 0 0

Пояснение:
localhost:/gluster_volume — том монтируется через локальный сервер (демон glusterd на этом же узле).
_netdev — опция, указывающая, что файловая система зависит от сети; система будет ждать сеть перед монтированием.

Вариант с указанием FailOver-сервера (если один из узлов выйдет из строя, клиент переключится на другой):

gluster-1:/gluster_volume /mnt/gluster-storage glusterfs defaults,_netdev,backupvolfile-server=gluster-2 0 0

Здесь gluster-1 — предпочитаемый сервер, gluster-2 — резервный.

Для чистоты эксперимента можно попробовать перезагрузить хосты (если это не продакшн-контур, конечно) и убедиться, что том монтируется автоматически.

Тестирование производительности

Для теста использовались три географически распределённых узла, объединённых каналом связи максимум 100 мегабит, без VPN. Результаты показывают, как сильно сказывается сетевая задержка и пропускная способность на производительность GlusterFS.

На хосте (локальный диск)

Линейная запись:

# dd if=/dev/zero of=/tmp/test.bin bs=1M count=1024

1024+0 records in
 1024+0 records out
 1073741824 bytes (1,1 GB, 1,0 GiB) copied, 3,13427 s, 343 MB/s

Линейное чтение:

dd if=/tmp/test.bin of=/dev/null bs=1M count=1024

1024+0 records in
 1024+0 records out
 1073741824 bytes (1,1 GB, 1,0 GiB) copied, 1,80814 s, 594 MB/s

В точке монтирования GlusterFS

Линейная запись:

# dd if=/dev/zero of=/mnt/gluster-storage/test.bin bs=1M count=1024

1024+0 records in
 1024+0 records out
 1073741824 bytes (1,1 GB, 1,0 GiB) copied, 272,866 s, 3,9 MB/s

Линейное чтение:

# dd if=/mnt/gluster-storage/test.bin of=/dev/null bs=1M count=1024

1024+0 records in
 1024+0 records out
 1073741824 bytes (1,1 GB, 1,0 GiB) copied, 5,60246 s, 192 MB/s

Анализ результатов:
— Скорость записи через GlusterFS (3,9 МБ/с) значительно ниже локальной (343 МБ/с) из-за необходимости реплицировать данные по сети на три узла и ограничения канала в 100 Мбит (около 12,5 МБ/с теоретически).
— Скорость чтения (192 МБ/с) выше записи, так как данные могут читаться с ближайшего узла (локально), но всё равно уступает локальному диску из-за накладных расходов протокола.
— Вполне предсказуемый результат для геораспределённого кластера с узким каналом. Для повышения производительности рекомендуется использовать более скоростные каналы связи (1 Гбит/с и выше) и, возможно, настроить кэширование.

Заключение

Мы рассмотрели полный цикл развёртывания GlusterFS на Ubuntu Linux: от настройки сети и установки пакетов до создания тома, монтирования и тестирования. GlusterFS — мощный инструмент для построения отказоустойчивых хранилищ, но его производительность сильно зависит от качества сети и конфигурации. Надеемся, что это руководство поможет вам успешно внедрить GlusterFS в вашу инфраструктуру.

Похожие записи

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Запихать Mysql в Kubernetes оказалось не очень хорошей идеей и я решил основательно пересмотреть инфраструктуру своего pet-проекта и за основу будет принят кластер из трех серверов. На каждом узле кластера…

Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования

У меня уже есть небольшая инструкция по установке NFS-клиент-серверного взаимодействия в CentOS, и теперь нужно дополнить её вариантом для Ubuntu Linux. В этой статье мы подробно разберём настройку NFS-клиента на…

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Читать еще статьи

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования

Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования

Как проверить работу камеры в Ubuntu Linux: диагностика USB и встроенных веб-камер

Как проверить работу камеры в Ubuntu Linux: диагностика USB и встроенных веб-камер

Полное руководство по установке Docker, Docker Compose, kubectl, Helm и k9s в Linux

Полное руководство по установке Docker, Docker Compose, kubectl, Helm и k9s в Linux

Настройка маршрутизации через VipNet: пошаговое руководство для RedOS

Настройка маршрутизации через VipNet: пошаговое руководство для RedOS