Настраиваем распределённую файловую систему GlusterFS на CentOS 7

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




Основным преимуществом GlusterFS является то, что мы можем масштабировать хранилище до нескольких петабайт без какого-либо простоя, а также обеспечивает избыточность и высокую доступность хранилища.




Доступ к Gluster-ресурсу можно получать как с использованием FUSE, так и через NFS-протокол версии не ниже третьей. В последнем случае (доступ по NFS) демон Gluster подгружает соответствующий транслятор, который выступает в роли NFS-сервера и не может работать совместно с другими NFS-серверами. Несмотря на то, что разработчики Gluster декларируют совместимость с CIFS, в действительности такая совместимость средствами самого Gluster не обеспечивается, поэтому для экспорта Windows-клиентам необходимо создать разделяемый ресурс средствами Samba. Wikipedia




Ознакомиться с терминологией GlusterFS можно в официальной документации




В статье будет рассмотрен один из примеров построения отказоустойчивого и масштабируемого хранилища. В качестве хостов будут использованы виртуальные с сервера с минимальной установкой CentOS 7.




172.16.1.7 gfs01

172.16.1.8 gfs02

172.16.1.9 gfs03




Заранее добавим эти записи в файл /etc/hosts на каждом сервере.




Установка GlusterFS




Установка дополнительных пакетов.




yum install epel-release -y

yum install yum-priorities yum-utils -y




GlusterFS доступен в репозитории CentOS SIG, установим его:




yum install centos-release-gluster

yum install glusterfs-server




Запускаем сервис и добавляем в автозапуск.




systemctl start glusterd

systemctl enable glusterd




Добавляем правила на firewall для корректной работы сервиса.




# firewall-cmd --zone=public --add-service=nfs --add-service=samba --add-service=samba-client --permanent

# firewall-cmd --zone=public --add-port=111/tcp --add-port=139/tcp --add-port=445/tcp --add-port=965/tcp --add-port=2049/tcp 

--add-port=38465-38469/tcp --add-port=631/tcp --add-port=111/udp --add-port=963/udp --add-port=24007-24009/tcp --add-port=49152-49251/tcp --permanent

# firewall-cmd --reload




Настройка Volume




Формируем доверенный пул хранения




На первом хосте выполняем команды для формирования доверенного пула хранения с соседними хостами.




gluster peer probe gfs01

gluster peer probe gfs02

gluster peer probe gfs03




Проверям статус:




[root@gfs01 ~]# gluster peer status

Number of Peers: 2



Hostname: gfs02

Uuid: 247b073e-1bb2-4784-b3d5-a39a915f3d17

State: Peer in Cluster (Connected)



Hostname: gfs03

Uuid: 3befd565-5cff-48d4-9b8e-f1956119e0b4

State: Peer in Cluster (Connected)



[root@gfs01 ~]# gluster pool list

UUID Hostname State

247b073e-1bb2-4784-b3d5-a39a915f3d17 gfs02 Connected

3befd565-5cff-48d4-9b8e-f1956119e0b4 gfs03 Connected

bc6f57b3-ddb9-4511-b9da-3202950eb43c localhost Connected




Создаём брики




В данной статье рассмотрен вариант в обычными директориями, рекомендуется использовать разделы или тома LVM.




mkdir -p /folder-one && mkdir -p /folder-two




После этого создаём общий ресурс с именем files-one и files-two с репликой 3 (обратите внимание, что количество реплик равно количеству серверов).




gluster volume create files-one replica 3 gfs01:/folder-one gfs02:/folder-one gfs03:/folder-one force

gluster volume create files-two replica 3 gfs01:/folder-two gfs02:/folder-two gfs03:/folder-two force




Запускаем тома




Выполняем запуск созданных томов




gluster volume start files-one

gluster volume start files-two




Проверяем их статус:




[root@gfs01 ~]# gluster volume status files-one

Status of volume: files-one

Gluster process TCP Port RDMA Port Online Pid

------------------------------------------------------------------------------

Brick gfs01:/folder-one 49152 0 Y 31747

Brick gfs02:/folder-one 49152 0 Y 31654

Brick gfs03:/folder-one 49152 0 Y 31632

Self-heal Daemon on localhost N/A N/A Y 31823

Self-heal Daemon on gfs03 N/A N/A Y 31701

Self-heal Daemon on gfs02 N/A N/A Y 31723



Task Status of Volume files-one

------------------------------------------------------------------------------

There are no active volume tasks







[root@gfs01 ~]# gluster volume status files-two

Status of volume: files-two

Gluster process TCP Port RDMA Port Online Pid

------------------------------------------------------------------------------

Brick gfs01:/folder-two 49153 0 Y 31802

Brick gfs02:/folder-two 49153 0 Y 31702

Brick gfs03:/folder-two 49153 0 Y 31680

Self-heal Daemon on localhost N/A N/A Y 31823

Self-heal Daemon on gfs02 N/A N/A Y 31723

Self-heal Daemon on gfs03 N/A N/A Y 31701



Task Status of Volume files-two

------------------------------------------------------------------------------

There are no active volume tasks




Настраиваем отказоустойчивость пулов




gluster volume set files-one network.ping-timeout 5

gluster volume set files-one cluster.quorum-type fixed

gluster volume set files-one cluster.quorum-count 1

gluster volume set files-one performance.quick-read on




gluster volume set files-two network.ping-timeout 5

gluster volume set files-two cluster.quorum-type fixed

gluster volume set files-two cluster.quorum-count 1

gluster volume set files-two performance.quick-read on




network.ping-timeout — устанавливаем период опроса в 5 секунд, вместо 42 по умолчанию.
cluster.quorum-type(нет|auto|fixed) — Если установлено значение fixed, этот параметр разрешает запись в файл, только если количество активных блоков в этом наборе реплик (к которому принадлежит файл) больше или равно количеству, указанному в параметре quorum-count.
cluster.quorum-count — количество блоков, которые должны быть активны в наборе реплик, чтобы разрешить запись.
performance.quick-read(on|off) — включение быстрого чтения для транслятора пула.




Монтируем пулы




Монтируем пулы к рабочим директориям.
К примеру пул files-one будет использоваться для директории /home/pictures, равно как пул files-two для /home/docs. Обратите внимание, что маунт выполняется каждый на своём сервере локально.




# On gfs01

mount -t glusterfs gfs01:/files-one /home/pictures

mount -t glusterfs gfs01:/files-two /home/docs



# On gfs02

mount -t glusterfs gfs02:/files-one /home/pictures

mount -t glusterfs gfs02:/files-two /home/docs



# On gfs03

mount -t glusterfs gfs03:/files-one /home/pictures

mount -t glusterfs gfs03:/files-two /home/docs




Для автоматического монтирования пулов при загрузке необходимо добавить соответствующие записи в /etc/fstab.




# On gfs01

gfs01:/files-one /home/pictures glusterfs defaults,_netdev 0 0

gfs01:/files-two /home/docs glusterfs defaults,_netdev 0 0



# On gfs02

gfs02:/files-one /home/pictures glusterfs defaults,_netdev 0 0

gfs02:/files-two /home/docs glusterfs defaults,_netdev 0 0



# On gfs03

gfs03:/files-one /home/pictures glusterfs defaults,_netdev 0 0

gfs03:/files-two /home/docs glusterfs defaults,_netdev 0 0



2021-03-17T23:13:52
Software