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
Was this helpful?
0 / 0