Развёртывание GlusterFS на Linux

Пошаговая инструкция по установке и настройке кластера серверов на примере CentOS Stream 8.3, Debian GNU/Linux 10.9 и Ubuntu Server 20.10 для организации распределённой файловой системы GlusterFS и объединение её в единое файловое хранилище.

Для этого нам потребуется:

  • 2 сервера
  • по одному дополнительному жёсткому диску на каждый сервер, где будут храниться данные
  • 1 машина (желательно тоже серверная) для монтирования томов сервера

Подготовка машин

В первую очередь необходимо настроить имена хостов. В этой статье они организованы следующим образом:

  • первый сервер — IP: 192.168.1.53 — glusterfs-srv1.local
  • второй сервер — IP: 192.168.1.54 — glusterfs-srv2.local
  • клиентская машина — IP: 192.168.1.50 — glusterfs-client.local

Это необходимо прописать в DNS-сервере. Если его нет, тогда на каждой машине открываем файл /etc/hosts

# vi /etc/hosts

и в самом конце прописываем такие строчки:

192.168.1.53 glusterfs-srv1.local glusterfs-srv1
192.168.1.54 glusterfs-srv2.local glusterfs-srv2
192.168.1.50 glusterfs-client.local glusterfs-client

Теперь на всех машинах останавливаем и выключаем FirewallD

# systemctl stop firewalld && systemctl disable firewalld

В CentOS Stream устанавливаем пакет centos-release-gluster

# yum install centos-release-gluster

Настройка серверов

Устанавливаем серверную часть GlusterFS

В CentOS Stream:

# dnf install glusterfs-server

или

# yum install glusterfs-server

В Debian и Ubuntu Server:

# apt install glusterfs-server

Создаём каталог /mnt/data

# mkdir /mnt/data

Теперь необходимо разметить дополнительный жёсткий диск. Можно с помощью утилиты cfdisk

# cfdisk /dev/sdb

Лучше всего будет сделать один раздел sdb1 на жёстком диске sdb.

Далее форматируем созданный раздел, например в ext4

# mkfs.ext4 /dev/sdb1

и монтируем его в /mnt/data

# mount /dev/sdb1 /mnt/data

После этого открываем файл /etc/fstab

# vi /etc/fstab

и в самом конце пропишем строчку:

/dev/sdb1    /mnt/data    ext4    defaults 1 2

Это позволит монтировать раздел при загрузке ОС.

Для проверки можно перезагрузить сервера

# shutdown -r now

или выполнить команду, которая примонтируем все прописанные устройства с файла /etc/fstab

# mount -a 

Теперь перезапускаем службу glusterd и включаем её в автозагрузку

# systemctl start glusterd && systemctl enable glusterd

Далее собираем наши сервера в кластер. Для этого с сервера с хостом glusterfs-srv1.local запускаем команду:

# gluster peer probe glusterfs-srv2.local

Должно появиться сообщение:

peer probe: success

Можно также запустить со второго сервера команду:

# gluster peer probe glusterfs-srv1.local

Должно появиться такое же сообщение.

После этого на обоих серверах перезапустим службу glusterd

# systemctl restart glusterd

и проверим статус пулов:

# gluster pool list

Появится таблица со столбцами UUID, Hostname и State. State на всех хостах должен быть в режиме Connected.

Настройка клиентской машины

Устанавливаем клиентскую часть GlusterFS

В CentOS Stream:

# yum install glusterfs glusterfs-cli glusterfs-client

В Debian и Ubuntu Server:

# apt install glusterfs glusterfs-cli glusterfs-client

И создаём каталог /mnt/data, в который будут примонтированы тома из серверов

# mkdir /mnt/data 

Настройка томов

GlusterFS поддерживает несколько типов распределения данных, объединённых в том (volume):

  • Distributed Volume (распределённый) — распределение данных в случайном порядке между каталогами, входящими в том
  • Replicated Volume (реплицируемый) — зеркальное распределение данных (в каждом томе одинаковые файлы)
  • Striped Volume (разделённый по частям) — разбиение файлов по частям и хранение каждой части на отдельном сервере
  • Distributed Striped Volume (распределённый и разделённый по частям) — разбиение файлов на части и распределение по каталогам
  • Distributed Replicated Volume (распределённый и реплицируемый) — распределение данных в случайном порядке по каталогам, каждый из которых имеет свою зеркальную копию

Настройка Distributed Volume

На серверах создадим каталог /mnt/data/dv:

# mkdir /mnt/data/dv

Создадим том на любом из серверов

# gluster volume create dv-data transport tcp glusterfs-srv1.local:/mnt/data/dv glusterfs-srv2.local:/mnt/data/dv force

должно появиться сообщение:

volume create: dv-data: success: please start the volume to access data

Теперь стартанём том dv-data

# gluster volume start dv-data

должно появиться сообщение:

volume start: dv-data: success

На клиенте создадим каталог /mnt/data/dv-data

# mkdir /mnt/data/dv-data

и примонтируем к нему том

# mount.glusterfs glusterfs-srv1.local:/dv-data /mnt/data/dv-data

Теперь открываем файл /etc/fstab

# vi /etc/fstab

и в самом конце добавим такую строчку:

glusterfs-srv1.local:/dv-data   /mnt/data/dv-data       glusterfs       defaults 0 0

Для проверки перезагрузим машину

# shutdown -r now

или примонтируем всё, что прописано в /etc/fstab

# mount -a

Настройка Replicated Volume

На серверах создадим каталог /mnt/data/rv

# mkdir /mnt/data/rv

Создадим том на любом из серверов

# gluster volume create rv-data replica 2 transport tcp glusterfs-srv1.local:/mnt/data/rv glusterfs-srv2.local:/mnt/data/rv force

должно появиться сообщение:

volume create: rv-data: success: please start the volume to access data

Теперь стартанём том rv-data

# gluster volume start rv-data

должно появиться сообщение:

volume start: rv-data: success

На клиенте создадим каталог /mnt/data/rv-data

# mkdir /mnt/data/rv-data

и примонтируем к нему том

# mount.glusterfs glusterfs-srv1.local:/rv-data /mnt/data/rv-data

Теперь открываем файл /etc/fstab

# vi /etc/fstab

и в самом конце добавим такую строчку:

glusterfs-srv1.local:/rv-data   /mnt/data/rv-data       glusterfs       defaults 0 0

Для проверки перезагрузим машину

# shutdown -r now

или примонтируем всё, что прописано в /etc/fstab

# mount -a

Настройка Striped Volume

На серверах создадим каталог /mnt/data/sv

# mkdir /mnt/data/sv

Создадим том на любом из серверов

# gluster volume create sv-data stripe 2 transport tcp glusterfs-srv1.local:/mnt/data/sv glusterfs-srv2.local:/mnt/data/sv force

должно появиться сообщение:

volume create: sv-data: success: please start the volume to access data

Теперь стартанём том sv-data

# gluster volume start sv-data

должно появиться сообщение:

volume start: sv-data: success

На клиенте создадим каталог /mnt/data/sv-data

# mkdir /mnt/data/sv-data

и примонтируем к нему том

# mount.glusterfs glusterfs-srv1.local:/sv-data /mnt/data/sv-data

Теперь открываем файл /etc/fstab

# vi /etc/fstab

и в самом конце добавим такую строчку:

glusterfs-srv1.local:/sv-data   /mnt/data/sv-data       glusterfs       defaults 0 0

Для проверки перезагрузим машину

# shutdown -r now

или примонтируем всё, что прописано в /etc/fstab

# mount -a

Настройка Distributed Striped Volume

На сервере glusterfs-srv1.local создадим 2 каталога: /mnt/data/dsv1 и /mnt/data/dsv3

# mkdir /mnt/data/dsv1 /mnt/data/dsv3

На сервере glusterfs-srv2.local также создадим 2 каталога: /mnt/data/dsv2 и /mnt/data/dsv4

# mkdir /mnt/data/dsv2 /mnt/data/dsv4

Создадим том на любом из серверов

# gluster volume create dsv-data stripe 2 transport tcp glusterfs-srv1.local:/mnt/data/dsv1 glusterfs-srv2.local:/mnt/data/dsv2 glusterfs-srv1.local:/mnt/data/dsv3 glusterfs-srv2.local:/mnt/data/dsv4 force

должно появиться сообщение:

volume create: dsv-data: success: please start the volume to access data

Теперь стартанём том dsv-data

# gluster volume start dsv-data

должно появиться сообщение:

volume start: dsv-data: success

На клиенте создадим каталог /mnt/data/dsv-data

# mkdir /mnt/data/dsv-data

и примонтируем к нему том

# mount.glusterfs glusterfs-srv1.local:/dsv-data /mnt/data/dsv-data

Теперь открываем файл /etc/fstab

# vi /etc/fstab

и в самом конце добавим такую строчку:

glusterfs-srv1.local:/dsv-data   /mnt/data/dsv-data       glusterfs       defaults 0 0

Для проверки перезагрузим машину

# shutdown -r now

или примонтируем всё, что прописано в /etc/fstab

# mount -a

Настройка Distributed Replicated Volume

На сервере glusterfs-srv1.local создадим 2 каталога: /mnt/data/drv1 и /mnt/data/drv3

# mkdir /mnt/data/drv1 /mnt/data/drv3

На сервере glusterfs-srv2.local также создадим 2 каталога: /mnt/data/drv2 и /mnt/data/drv4

# mkdir /mnt/data/drv2 /mnt/data/drv4

Создадим том на любом из серверов

# gluster volume create drv-data replica 2 transport tcp glusterfs-srv1.local:/mnt/data/drv1 glusterfs-srv2.local:/mnt/data/drv2 glusterfs-srv1.local:/mnt/data/drv3 glusterfs-srv2.local:/mnt/data/drv4 force

должно появиться сообщение:

volume create: drv-data: success: please start the volume to access data

Теперь стартанём том drv-data

# gluster volume start drv-data

должно появиться сообщение:

volume start: drv-data: success

На клиенте создадим каталог /mnt/data/drv-data

# mkdir /mnt/data/drv-data

и примонтируем к нему том

# mount.glusterfs glusterfs-srv1.local:/drv-data /mnt/data/drv-data

Теперь открываем файл /etc/fstab

# vi /etc/fstab

и в самом конце добавим такую строчку:

glusterfs-srv1.local:/drv-data   /mnt/data/drv-data       glusterfs       defaults 0 0

Для проверки перезагрузим машину

# shutdown -r now

или примонтируем всё, что прописано в /etc/fstab

# mount -a

Другие команды GlusterFS

Просмотр списка пулов в кластере

# gluster pool list

Добавить новый пул в кластер

# gluster peer probe glusterfs-srv3.local

Удалить пул из кластера

# gluster peer detach glusterfs-srv3.local

Просмотр списка томов

# gluster volume list

Просмотр состояния тома

# gluster volume status

Остановка работы тома

# gluster volume stop volume-name

Удаление тома

# gluster volume delete volume-name

Запуск ребалансировки тома

# gluster volume rebalance volume-name start

Просмотр состояния ребалансировки тома

# gluster volume rebalance volume-name status

Добавить раздел к тому

# gluster volume add-brick replica 3 volume-name glusterfs-srv3.local:/mnt/data/volume-data-2/

Удалить раздел из тома

# gluster volume remove-brick volume-name glusterfs-srv3.local:/mnt/data/volume-data-2/

Заключение

GlusterFS поднят, теперь остаётся лишь решить, какой тип распределения данных использовать, настроить его и запустить. Подойти к этому лучше серьёзно, так как необходимо учесть многие технические моменты.

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

Ваш адрес email не будет опубликован.