Glusterfs

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

Добав­ля­ем необ­хо­ди­мые репозитории:

и обнов­ля­ем­ся

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

Посмот­реть статус:

gluster 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, то сле­ду­ет выпол­нить сле­ду­ю­щую команду:

Здесь вме­сто 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/

[/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. Заключение

Гото­во! Теперь оста­ёт­ся толь­ко выбрать наи­бо­лее удоб­ный и под­хо­дя­щий тип (или несколь­ко типов одно­вре­мен­но) мон­ти­ро­ва­ния, и поль­зо­вать­ся им.