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 в вашу инфраструктуру.




