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

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

Roman Bogachev VMware Specialist | Drone Pilot | Traveler

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

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

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

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

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

1
2
3
172.16.1.7	gfs01
172.16.1.8 gfs02
172.16.1.9 gfs03

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

Установка GlusterFS

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

1
2
yum install epel-release -y
yum install yum-priorities yum-utils -y

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

1
2
yum install centos-release-gluster
yum install glusterfs-server

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

1
2
systemctl start glusterd
systemctl enable glusterd

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

1
2
3
4
# 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

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

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

1
2
3
gluster peer probe gfs01
gluster peer probe gfs02
gluster peer probe gfs03

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[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.

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

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

1
2
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

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

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

1
2
gluster volume start files-one
gluster volume start files-two

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[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

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

1
2
3
4
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
1
2
3
4
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. Обратите внимание, что маунт выполняется каждый на своём сервере локально.

1
2
3
4
5
6
7
8
9
10
11
# 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.

1
2
3
4
5
6
7
8
9
10
11
# 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