Thank you for reading this post, don't forget to subscribe!
GlusterFS — это распределённая, параллельная, линейно масштабируемая файловая система с возможностью защиты от сбоев. GlusterFS может объединить хранилища данных, находящиеся на разных серверах, в одну параллельную сетевую файловую систему. GlusterFS разделена на серверную и клиентскую части.
Рассмотрим установку серверной и клиентской частей распределённой файловой системы Gluster
В наличии у нас имеются 2 сервера и 1 клиентская машина.
Сеть: 192.168.1.0/24.
1-й сервер: хост glusterfs-srv1, IP-адрес 192.168.1.170
2-й сервер: хост glusterfs-srv2, IP-адрес 192.168.1.171
Клиентская машина: хост glusterfs-client1, IP-адрес 192.168.1.23
1. Подготовка и установка необходимого программного обеспечения
На всех машинах:
Устанавливаем wget и attr
yum install wget attr -y
Затем открываем файл /etc/hosts
vi /etc/hosts
и в нём пропишем IP-адреса и хосты машин
192.168.1.170 glusterfs-srv1
192.168.1.171 glusterfs-srv2
192.168.0.23 glusterfs-client1
Также необходимо отключить файрволл и удалить его из автозагрузки, так как клиентская машина обращается к серверам каждый раз по разным портам
systemctl stop firewalld
systemctl disable firewalld
Добавляем необходимые репозитории:
12 yum search centos-release-glusteryum install -y centos-release-gluster5.noarch
и обновляемся
yum update
Теперь создадим каталог /mnt/data
mkdir /mnt/data
На серверах:
Устанавливаем серверную часть GlusterFS
yum install -y glusterfs gluster-cli glusterfs-libs glusterfs-server
После этого подключаем новые жёсткие диски утилитой fdisk
fdisk /dev/sdb
Вводим n (add a new partition)
В Partition type выбираем p (primary)
Первый сектор: оставляем по умолчанию
Номер раздела: 1
Утилита снова предложит команду
Вводим w для применения изменений и выхода из fdisk
Затем создадим на жёстком диске файловую систему
mkfs.ext4 /dev/sdb1
и монтируем его в каталог /mnt/data
mount /dev/sdb1 /mnt/data
для того, чтобы новый жёсткий диск автоматически монтировался при загрузке сервера, открываем файл /etc/fstab
vi /etc/fstab
и впишем в него следующую строчку
/dev/sdb1 /mnt/data ext4 defaults 1 2
Запускаем службу GlusterFS и добавляем её в автозагрузку
systemctl start glusterd
systemctl enable glusterd
На клиентской машине
Устанавливаем клиентскую часть GlusterFS
yum install glusterfs-client
Полезно знать, что процессов у Гластера несколько, вот их назначения:
glusterd = management daemon
Главный демон, управляет вольюмом, тянет за собой остальные демоны, отвечающие за брики и восстановление данных.
glusterfsd = per-brick daemon
У каждого брика запускает свой glusterfsd демон.
glustershd = self-heal daemon
Отвечает за ребилд данных у реплицированных вольюмов в случаях отвала нод кластера.
glusterfs = usually client-side, but also NFS on servers
Например, прилетает с пакетом нативного клиента glusterfs-fuse.
2. Объединение серверов в кластер
Чтобы сервера работали совместно, объединим их в кластер.
Для этого на 1-м сервере glusterfs-srv1 вводим команду:
gluster peer probe glusterfs-srv2
должно появиться сообщение о результате
peer probe: success
Возможно, потребуется также и на 2-м сервере glusterfs-srv2
gluster peer probe glusterfs-srv1
должно появиться сообщение о результате
peer probe: success
Затем на обоих серверах перезапускаем службу GlusterFS
systemctl restart glusterd
После этого на любом из серверов (можно на обоих) проверяем
gluster pool list
Должна появиться такая табличка
[root@cent ~]# gluster pool list
UUID Hostname State
67996d88-9950-4ef2-b2e9-b4af7eabf668 glusterfs-srv2 Connected
c3ffda8a-15d3-4c2a-a5ba-90d86cbeb97a localhost Connected
Посмотреть статус:
1 gluster peer statusgluster volume info all
Уменьшим время в течение которого клиент ожидает ответ от сервера и в случае недоступности сервера автоматически переподключается к другому серверу в trusted storage pool(по умолчанию таймаут 42 секунды, что вынуждает клиента ожидать 42 секунды, чтобы переключитя на другую ноду,если текущая не отвечает)
# gluster volume set gvolume1 network.ping-timeout "5"
volume set: success
3. Настройка хранения и распределения данных
GlusterFS поддерживает 5 типов распределения данных, объединённых в том (volume):
— Distributed Volume (распределённый) — распределение данных в случайном порядке между каталогами, входящими в том
— Replicated Volume (реплицируемый) — зеркальное распределение данных (в каждом томе одинаковые файлы)
— Striped Volume (разделенный по частям) — разбиение файлов по частям и хранение каждой части на отдельном сервере
— Distributed Striped Volume (распределённый и разделенный по частям) — разбиение файлов на части и распределение по каталогам
— Distributed Replicated Volume (распределённый и реплицируемый) — распределение данных в случайном порядке по каталогам, каждый из которых имеет свою зеркальную копию
Настройка Distributed Volume
[spoiler]
На обоих серверах создадим папку /mnt/data/dv
mkdir /mnt/data/dv
На 1-м сервере glusterfs-srv1 создадим том dv-data и стартанём его
gluster volume create dv-data transport tcp glusterfs-srv1:/mnt/data/dv glusterfs-srv2:/mnt/data/dv force
gluster volume start dv-data
На клиентской машине создадим каталог /mnt/data/dv-data
mkdir /mnt/data/dv-data
и монтируем в него созданный том dv-data
mount.glusterfs glusterfs-srv1:/dv-data /mnt/data/dv-data
После монтирования тома в /mnt/data/dv-data можно копировать какие-либо данные. На клиентской машине они будут отображаться в исходном виде, на серверах же они будут распределены.
Для того, чтобы клиентская машина могла монтировать том при загрузке, необходимо открыть файл /etc/fstab
vi /etc/fstab
и добавить в него такую строку:
glusterfs-srv1:/dv-data /mnt/data/dv-data glusterfs defaults,_netdec 0 0
Если необходимо размонтировать том dv-data на клиентской машине, вводим команду:
umount /mnt/data/dv-data
Остановить и удалить том можно на 1-м сервере:
gluster volume stop dv-data
gluster volume delete dv-data
[/spoiler]
Настройка Replicated Volume
[spoiler]
На серверах создадим папку /var/shara
mkdir /var/shara
На 1-м сервере glusterfs-srv1 создадим том shara и стартанём его
gluster volume create shara replica 2 transport tcp glusterfs-srv1:/var/shara glusterfs-srv2:/var/shara force
gluster volume start shara
Где:
gluster
— команда для GlusterFS;volume
— команду следует применить к хранилищу (volume
);add-brick
— добавить «кирпич» (brick
);www
— имя хранилища, к которому добавляется «кирпич»;replica 2
— указываем, что тип хранилища реплицируемый, а количество ‘кирпичей’ увеличится на 1;glusterfs-srv1:/var/shara
— ip-адрес(или хостнейм) и абсолютный путь к месту, где будут храниться данные.
Если необходимо удалить «кирпич» из хранилища GlusterFS, то следует выполнить следующую команду:
1 2 3 4 |
gluster volume remove-brick shara replica 1 glusterfs-srv2:/var/shara force Removing brick(s) can result in data loss. Do you want to Continue? (y/n) y volume remove-brick commit force: success |
Здесь вместо add-brick
используем команду remove-brick
и количество реплик уменьшаем на 1 (было 2 станет 1).
Чтобы наверняка удалить peer - ов
rm -f /var/lib/glusterd/peers/*
systemctl restart glusterd
На клиентской машине создадим каталог /var/shara/
mkdir /var/shara/
и монтируем в него созданный том shara
mount.glusterfs glusterfs-srv1:/shara /var/shara/
После монтирования тома в /var/shara/ можно копировать какие-либо данные. На клиентской машине они будут отображаться в исходном виде, а на серверах же они будут реплицированы, то есть сервера будут служить зеркалами друг для друга.
Для того, чтобы клиентская машина могла монтировать том при загрузке, необходимо открыть файл /etc/fstab
vi /etc/fstab
и добавить в него такую строку:
glusterfs-srv1:/shara /var/shara/ glusterfs defaults,_netdec 0 0
Если необходимо размонтировать том shara на клиентской машине, вводим команду:
umount /var/shara/
Остановить и удалить том можно на 1-м сервере:
gluster volume stop shara
gluster volume delete shara
Чтобы данные копировались реплицировались с сервер 1 на сервер 2 и наоборот, необходимо:
примонтировать разделы:
на сервер1 выполняем:
mount -t glusterfs glusterfs-srv2:/shara /sh
на сервер 2 соответственно
mount -t glusterfs glusterfs-srv1:/shara /sh
отметим, что здесь директория /var/shara используется в качестве моста и использовать данную директорию при монтировании не возможно.
данные если создавать данные в директории /var/shara или /sh они будут корректно добавляться и на другие сервера.
создадим файловую систему из 4-х серверов:
[root@cent ]# gluster peer probe 192.168.1.171
peer probe: success.
[root@cent ]# gluster peer probe 192.168.1.172
peer probe: success.
[root@cent ]# gluster peer probe 192.168.1.173
peer probe: success.
[root@cent ]# gluster peer status
Number of Peers: 3
Hostname: 192.168.1.171
Uuid: 1d26e5b2-300e-4de3-aaca-a28a5b130906
State: Peer in Cluster (Connected)
Hostname: 192.168.1.172
Uuid: ad24f48f-b692-4ebf-921c-16920b28f000
State: Peer in Cluster (Connected)
Hostname: 192.168.1.173
Uuid: e90276da-a5f7-4897-bd73-b2638e6a2e3e
State: Peer in Cluster (Connected)
[root@cent shara]# gluster pool list
UUID Hostname State
1d26e5b2-300e-4de3-aaca-a28a5b130906 192.168.1.171 Connected
ad24f48f-b692-4ebf-921c-16920b28f000 192.168.1.172 Connected
e90276da-a5f7-4897-bd73-b2638e6a2e3e 192.168.1.173 Connected
c3ffda8a-15d3-4c2a-a5ba-90d86cbeb97a localhost Connected
gluster volume create shara replica 3 transport tcp 192.168.1.171:/var/shara 192.168.1.172:/var/shara 192.168.1.173:/var/shara force
volume create: shara: success: please start the volume to access data
gluster volume start shara
[root@cent ]# gluster volume info all
Volume Name: shara
Type: Replicate
Volume ID: c4a58a5d-cadc-419a-b9d5-5b273be2d4d6
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 3 = 3
Transport-type: tcp
Bricks:
Brick1: 192.168.1.171:/var/shara
Brick2: 192.168.1.172:/var/shara
Brick3: 192.168.1.173:/var/shara
Options Reconfigured:
performance.client-io-threads: off
nfs.disable: on
transport.address-family: inet
на сервере 1
mount -t glusterfs 192.168.1.170:/shara /var/shara2/
сервер 2,3,4
mkdir /var/shara2/
1 2 3 4 5 6 7 8 |
mount -t glusterfs 192.168.1.170:/shara /var/shara2/ mount -t glusterfs 192.168.1.170:/shara /var/shara2/ mount -t glusterfs 192.168.1.170:/shara /var/shara2/ добавляем в /etc/fstab 192.168.1.170:/shara /var/shara2 glusterfs defaults,_netdev 0 0 при данной настройке на клиентах(IP 171,172,173) данные дублируются как в /var/shara2/ так и /var/shara/ |
[/spoiler]
Настройка Striped Volume
[spoiler]На обоих серверах создадим папку /mnt/data/sv
mkdir /mnt/data/sv
На 1-м сервере glusterfs-srv1 создадим том sv-data и стартанём его
gluster volume create sv-data stripe 2 transport tcp glusterfs-srv1:/mnt/data/sv glusterfs-srv2:/mnt/data/sv force
gluster volume start sv-data
На клиентской машине создадим каталог /mnt/data/sv-data
mkdir /mnt/data/sv-data
и монтируем в него созданный том sv-data
mount.glusterfs glusterfs-srv1:/sv-data /mnt/data/sv-data
После монтирования тома в /mnt/data/sv-data можно копировать какие-либо данные. На клиентской машине они будут отображаться в исходном виде, а на серверах они будут разбиты на куски.
Для того, чтобы клиентская машина могла монтировать том при загрузке, необходимо открыть файл /etc/fstab
vi /etc/fstab
и добавить в него такую строку:
glusterfs-srv1:/sv-data /mnt/data/sv-data glusterfs defaults,_netdec 0 0
Если необходимо размонтировать том sv-data на клиентской машине, вводим команду:
umount /mnt/data/sv-data
Остановить и удалить том можно на 1-м сервере:
gluster volume stop sv-data
gluster volume delete sv-data
[/spoiler]
Настройка Distributed Striped Volume
[spoiler]
На 1-м сервере создадим 2 каталога /mnt/data/dsv1 и /mnt/data/dsv3
mkdir /mnt/data/dsv1 /mnt/data/dsv3
а на 2-м — 2 каталога /mnt/data/dsv2 и /mnt/data/dsv4
mkdir /mnt/data/dsv2 /mnt/data/dsv4
На 1-м сервере glusterfs-srv1 создадим том dsv-data и стартанём его
gluster volume create dsv-data stripe 2 transport tcp glusterfs-srv1:/mnt/data/dsv1 glusterfs-srv2:/mnt/data/dsv2 glusterfs-srv1:/mnt/data/dsv3 glusterfs-srv2:/mnt/data/dsv4 force
gluster volume start dsv-data
На клиентской машине создадим каталог /mnt/data/dsv-data
mkdir /mnt/data/dsv-data
и монтируем в него созданный том dsv-data
mount.glusterfs glusterfs-srv1:/dsv-data /mnt/data/dsv-data
После монтирования тома в /mnt/data/dsv-data можно копировать какие-либо данные. На клиентской машине они будут отображаться в исходном виде, а на серверах они будут разбиты на куски и распределены по каталогам.
Для того, чтобы клиентская машина могла монтировать том при загрузке, необходимо открыть файл /etc/fstab
vi /etc/fstab
и добавить в него такую строку:
glusterfs-srv1:/dsv-data /mnt/data/dsv-data glusterfs defaults,_netdec 0 0
Если необходимо размонтировать том dsv-data на клиентской машине, вводим команду:
umount /mnt/data/dsv-data
Остановить и удалить том можно на 1-м сервере:
gluster volume stop dsv-data
gluster volume delete dsv-data
[/spoiler]
Настройка Distributed Replicated Volume
[spoiler]
На 1-м сервере создадим 2 каталога /mnt/data/drv1 и /mnt/data/drv3
mkdir /mnt/data/drv1 /mnt/data/drv3
а на 2-м — 2 каталога /mnt/data/drv2 и /mnt/data/drv4
mkdir /mnt/data/drv2 /mnt/data/drv4
На 1-м сервере glusterfs-srv1 создадим том drv-data и стартанём его
gluster volume create drv-data replica 2 transport tcp glusterfs-srv1:/mnt/data/drv1 glusterfs-srv2:/mnt/data/drv2 glusterfs-srv1:/mnt/data/drv3 glusterfs-srv2:/mnt/data/drv4 force
gluster volume start drv-data
На клиентской машине создадим каталог /mnt/data/drv-data
mkdir /mnt/data/drv-data
и монтируем в него созданный том drv-data
mount.glusterfs glusterfs-srv1:/drv-data /mnt/data/drv-data
После монтирования тома в /mnt/data/drv-data можно копировать какие-либо данные. На клиентской машине они будут отображаться в исходном виде, на одном сервере они будут распределены по каталогам, а второй сервер будет выступать зеркалом первого.
Для того, чтобы клиентская машина могла монтировать том при загрузке, необходимо открыть файл /etc/fstab
vi /etc/fstab
и добавить в него такую строку:
glusterfs-srv1:/drv-data /mnt/data/drv-data glusterfs defaults,_netdec 0 0
Если необходимо размонтировать том drv-data на клиентской машине, вводим команду:
umount /mnt/data/drv-data
Остановить и удалить том можно на 1-м сервере:
gluster volume stop drv-data
gluster volume delete drv-data
[/spoiler]
4. Заключение
Готово! Теперь остаётся только выбрать наиболее удобный и подходящий тип (или несколько типов одновременно) монтирования, и пользоваться им.