Пошаговая инструкция по установке и настройке кластера серверов на примере 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 поднят, теперь остаётся лишь решить, какой тип распределения данных использовать, настроить его и запустить. Подойти к этому лучше серьёзно, так как необходимо учесть многие технические моменты.