УНИТе

Портал > Документация > Изграждане на GlusterFS-базирани клъстерни файлови системи в инфраструктурата на УНИТе под CentOS 7 и Scientific Linux 7

Изграждане на GlusterFS-базирани клъстерни файлови системи в инфраструктурата на УНИТе под CentOS 7 и Scientific Linux 7

Съдържание:

  1. Предварителна информация
  2. Изтегляне,инсталиране на необходимите пакети и стартиране на glusterfs върху сървърите, които участват в Gluster FS клъстера
  3. Предварително разделяне на физическото дисково пространство за споделените Gluster FS дялове и локалното им монтиране върху участниците в клъстера
  4. Топология на клъстера и настройки на пакетния филтър firewalld
  5. Създаване на ресурс в Gluster FS клъстера
  6. Локално монтиране и използване Gluster FS ресурсите върху сървъри и работни станции, които са клиенти на клъстера
  7. Криптиране на данните, обменяни между участниците в Gluster FS клъстера и клиентите

 

1. Предварителна информация

Gluster FS е клъстерна файлова система от висок клас, която се използва за предоставяне на мрежово достъпни файлови системи в облачни и HPC инфраструктури. Какви са предимства от използването на Gluster FS в HPC инфраструктура:

Транспортният IPsec протокол има следните предимства:

  • изцяло IP бизирана клъстерна файлова система:

    Това ознчава, че както отделните компоненти на клъстера, така и клиентите на ресурсите, могат да се намират в различни физически локации и да са свързани един към друг през Интернет. Не е нужно да се изграждат специални интранет системи, освен в случаите, когато се налага да се поддържа висока скорост на свързаност между участниците в клъстера.

  • позволява избор на активни нодове:

    В случай, че някой от компонените в клъстера отпадне, останалите компоненти провеждат избор помежду си и обявяват кои от ресурсите са синхронизирани.

  • позволява използването на RDMA при наличие на InfiniBand свързаност между нодовете:

    Това позволява да се постигне висока производителност и да се криптират големи потоци трафик с минимално влошаване на качеството на услугата, заради процеса на криптиране и декриптиране.

 

2. Изтегляне, инсталиране на необходимите пакети и стартиране на glusterfs върху сървърите, които участват в Gluster FS клъстера

Всички нужни пакети се намират в системното хранилище на CentOS 7 (подобна е ситуацията за Scientific Linux 7). Преди да започнете с инсталирането им, убедете се, че системата е актуализирана и последната версия на пакета kernel е инсталирана и ядрото, която я предоставя, е текущото работно ядро на системата. След това, използвайте yum за да инсталирате пакетите свързани с реализирането на Gluster FS сървъра:

$ sudo yum install centos-release-gluster
$ sudo install glusterfs glusterfs-libs glusterfs-server

За да стартирате Gluster FS мениджъра glusterd и да го укажете за стартиране при зареждане на системата, изпълнете следното:

$ sudo systemctl enable glusterd
$ sudo systemctl restart glusterd

 

3. Предварително разделяне на физическото дисково пространство за споделените Gluster FS дялове и локалното им монтиране върху участниците в клъстера

ВНИМАНИЕ: Процедурата описана по-долу се изпълнява върху всеки един от сървърите, които ще участват в Gluster FS клъстера. Тя не касае клиентите на клъстера - работни станции и сървъри, които само ще използват ресурсите отдалечено.

За примера по-долу се предполага, че всеки един от трите участника в Gluster FS клъстерирането, има при себе си RAID масив, който е видим локално в системата на участника като /dev/sdb (за примера този масив е с капацитет 4TB). Върху този диск на масив, трябва да се изгради GPT таблица и да се създадат четири дяла от по 1 терабайт, с помощта на parted:

$ sudo parted /dev/sdb mktable gpt
$ sudo parted -a optimal /dev/sdb mkpart primary 0TB 1TB
$ sudo parted -a optimal /dev/sdb mkpart primary 1TB 2TB        
$ sudo parted -a optimal /dev/sdb mkpart primary 2TB 3TB        
$ sudo parted -a optimal /dev/sdb mkpart primary 3TB 4TB 

След това върху всеки един от дяловете трябва да се създаде XFS файлова система:

$ sudo mkfs.xfs /dev/sdb1
$ sudo mkfs.xfs /dev/sdb2
$ sudo mkfs.xfs /dev/sdb3
$ sudo mkfs.xfs /dev/sdb4

Накрая, изпълнете blkid и проверте дали създадените XFS файлови системи са детектирани от ядрото. Трябва да видите резултат подобен на следния (гледайте първата колонка и тази с "TYPE"):

/dev/sdb1: UUID="7b28d124-146b-4fb5-8487-f77c2cb7b209" TYPE="xfs" PARTLABEL="primary" PARTUUID="6b353844-4760-4222-9131-3ed419940b69"
/dev/sdb2: UUID="690d2c92-3c86-4fd0-ac7c-f02c9995c79e" TYPE="xfs" PARTLABEL="primary" PARTUUID="c5b233cb-d2fd-47bf-a433-bec37efafa9e" 
/dev/sdb3: UUID="bdeead8d-29a0-44a4-b3de-6ebd31712b59" TYPE="xfs" PARTLABEL="primary" PARTUUID="c5aa2c04-f79c-4ff8-a3e7-2c316a40b9ef" 
/dev/sdb4: UUID="5755ab80-d76c-4fad-af20-1529b690051f" TYPE="xfs" PARTLABEL="primary" PARTUUID="fabfb0a8-0650-4548-9d59-9bfeac390847"

Във файла /etc/fstab създайте следните записи (вижте във вашия случай конкретните стойности на UUID - те ще са различни от тези в примера):

UUID=7b28d124-146b-4fb5-8487-f77c2cb7b209 /srv/glfs1              xfs     defaults        0 0
UUID=690d2c92-3c86-4fd0-ac7c-f02c9995c79e /srv/glfs2              xfs     defaults        0 0
UUID=bdeead8d-29a0-44a4-b3de-6ebd31712b59 /srv/glfs3              xfs     defaults        0 0
UUID=5755ab80-d76c-4fad-af20-1529b690051f /srv/glfs4              xfs     defaults        0 0

За да монтирате дяловете, съгласно въведената в /etc/fstab информация, изпълнете:

$ sudo mount -a

и ако не получите съобщение за грешка, ще видите дяловете с XFS файловите системи монтирани локално в /srv. Ако изпълните:

$ ls /srv

ще получите следния списък:

glfs1  glfs2  glfs3  glfs4

 

4. Топология на клъстера и настройки на пакетния филтър firewalld

ВНИМАНИЕ! Всичко в тази секция касае само сървърите, които са част от топологията на клъстера и не се отнася за работните станции и онези сървъри в инфраструктурата на УНИТе, които използват ресурсите от клъстера в ролята си на клиент!

За илюстрация на примерните конфигурации по-долу се предполага, че следните хостове ще участват в клъстерирането на Gluster FS ресурси (IPv4 адреса на хоста е в скобите):

host1.unite (192.168.199.1)
host2.unite (192.168.199.2)
host3.unite (192.168.199.3)

Дамонът glusterfsd слуша на порт ≥ 49152/tcp, като за всеки ресурс се стартира отделен порт. Този порт трябва да е достъпен на всеки от хостовете за останалите хостове в клъстера (за да има комуникация помежду им) и отделно трябва да бъде достъпен за клиентите, които ще монтират ресурси от клъстера локално при себе си. Допълнително, когато създавате споделени ресурси в клъстера, те могат да изискат използване на още един порт, ≥ 24007, по който да синхронизират комуникацията помежду си. Добре е предварително да отворите поне няколко порта ≥ 24007/tcp и 49152/tcp, за да може да покриете евентуалното деклариране на нови ресурси в клъстера, без да се налага да редактирате конфигурацията на firewalld. Това ознчава, че следните firewalld правила трябва да бъдат зададени върху всички членове на клъстера:

  • на host1.unite (192.168.199.1):

    $ sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.199.2/32 destination address=192.168.199.1/32 port port=49152-50000 protocol=tcp accept'
    $ sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.199.2/32 destination address=192.168.199.1/32 port port=24007-24017 protocol=tcp accept'
    $ sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.199.3/32 destination address=192.168.199.1/32 port port=49152-50000 protocol=tcp accept'
    $ sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.199.3/32 destination address=192.168.199.1/32 port port=24007-24017 protocol=tcp accept'
    $ sudo firewall-cmd --reload
  • на host2.unite (192.168.199.2):

    $ sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.199.1/32 destination address=192.168.199.2/32 port port=49152-50000 protocol=tcp accept'
    $ sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.199.1/32 destination address=192.168.199.2/32 port port=24007-24017 protocol=tcp accept'
    $ sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.199.3/32 destination address=192.168.199.2/32 port port=49152-50000 protocol=tcp accept'
    $ sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.199.3/32 destination address=192.168.199.2/32 port port=24007-24017 protocol=tcp accept'
    $ sudo firewall-cmd --reload
  • на host3.unite (192.168.199.3):

    $ sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.199.1/32 destination address=192.168.199.3/32 port port=49152-50000 protocol=tcp accept'
    $ sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.199.1/32 destination address=192.168.199.3/32 port port=24007-24017 protocol=tcp accept'
    $ sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.199.2/32 destination address=192.168.199.3/32 port port=49152-50000 protocol=tcp accept'
    $ sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.199.2/32 destination address=192.168.199.3/32 port port=24007-24017 protocol=tcp accept'
    $ sudo firewall-cmd --reload

 

5. Създаване на ресурс в Gluster FS клъстера

ВНИМАНИЕ! Всичко в тази секция касае само сървърите, които са част от топологията на клъстера и не се отнася за работните станции и онези сървъри в инфраструктурата на УНИТе, които използват ресурсите от клъстера в ролята си на клиент!

След като сте извършили всичко, както е описано по-горе, ще можете да пристъпите към декларирате ресурси в клъстера.

Сканирайте хостовете, които ще участват в клъстера за дадения ресурс. Това сканиране е необходимо, за да могат те да бъдат включени в таблицата на топологията на клъстера:

  • на host1.unite (192.168.199.1):

    $ sudo gluster peer probe host2.unite
    $ sudo gluster peer probe host3.unite
  • на host2.unite (192.168.199.2):

    $ sudo gluster peer probe host1.unite
    $ sudo gluster peer probe host3.unite
  • на host3.unite (192.168.199.3):

    $ sudo gluster peer probe host1.unite
    $ sudo gluster peer probe host2.unite

При успешна комуникация в хода на сканиранете, ще получавате отговора:

peer probe: success.

В случай, че хоста е вече добавен в таблицата с топологията, ще бъде върнат резултат подобен на:

peer probe: success. Host host1.unite port 24007 already in peer list

За нуждите на инфраструктурата на УНИТе, ще са нужни два типа Gluster FS ресурси:

  • репликиран/резериван:

    Този ресурс използва модел на репликация - изравнява съдържанието на една директория (чието съдържание е обект на ресурса) върху всички хостове в топологията. Създаването на подобен ресурс може да стане по следния начин:

    $ sudo gluster volume create glfs-vol1 replica 3 transport tcp host1.unite:/srv/glfs1/storage host2.unite:/srv/glfs1/storage host3.unite:/srv/glfs1/storage

    ВАЖНО! При наличието на RDMA, вместо tcp, при декларирането на ресурса, задайте tcp,rdma. При успешното създаване на ресурса, ще получите следното съобщение:

    volume create: glfs-vol1: success: please start the volume to access data

    Репликираният ресурс ще е представен и на трите хоста в топологията като директория /srv/glfs1/storage, която ще има едно и също съдържание и на трите хоста. След като ресурса е бил създаден, той трябва да се стартира, за да е достъпен:

    $ sudo gluster volume start glfs-vol1

    При успешно стартиране, ще получите като резултат:

    volume start: glfs-vol1: success
  • дистрибутиран:

    Този ресурс използва модел на репликация, който е аналог на модела на RAID0 - разпростира една директория и съдържанието ѝ върху няколко носителя, които са на различни хостове. Създаването на подобен ресурс може да стане по следния начин:

    $ sudo gluster volume create glfs-vol2 disperse 3 transport tcp host1.unite:/srv/glfs2/scratch host2.unite:/srv/glfs2/scratch host3.unite:/srv/glfs2/scratch

    ВАЖНО! При наличието на RDMA, вместо tcp, при декларирането на ресурса, задайте tcp,rdma. При успешното създаване на ресурса, ще получите следното съобщение:

    volume create: glfs-vol2: success: please start the volume to access data

    Репликираният ресурс ще е представен и на трите хоста в топологията като директория /srv/glfs2/scratch, която ще има привидно едно и също съдържание и на трите хоста. След като ресурса е бил създаден, той трябва да се стартира, за да е достъпен:

    $ sudo gluster volume start glfs-vol2

    При успешно стартиране, ще получите като резултат:

    volume start: glfs-vol2: success

За да видите моментното състояние на ресурсите в клъстера, може да изпълните:

$ sudo gluster volume status

Ако предположим, че са изградени два ресурса, съгласно примерите по-горе, то резултата ще бъде побен на следния:

Status of volume: glfs-vol1
Gluster process                             TCP Port  RDMA Port  Online  Pid
------------------------------------------------------------------------------
Brick host1.unite:/srv/glfs1/storage        49152     0          Y       14469
Brick host2.unite:/srv/glfs1/storage        49152     0          Y       18761
Brick host3.unite:/srv/glfs1/storage        49152     0          Y       2160 
Self-heal Daemon on localhost               N/A       N/A        Y       8081 
Self-heal Daemon on host2.unite             N/A       N/A        Y       17203
Self-heal Daemon on host3.unite             N/A       N/A        Y       5507 
 
Task Status of Volume glfs-vol1
------------------------------------------------------------------------------
There are no active volume tasks
 
Status of volume: glfs-vol2
Gluster process                             TCP Port  RDMA Port  Online  Pid
------------------------------------------------------------------------------
Brick host1.unite:/srv/glfs2/temp           49153     0          Y       7989 
Brick host2.unite:/srv/glfs2/temp           49153     0          Y       17181
Brick host3.unite:/srv/glfs2/temp           49153     0          Y       5485 
Self-heal Daemon on localhost               N/A       N/A        Y       8081 
Self-heal Daemon on host2.unite             N/A       N/A        Y       17203
Self-heal Daemon on host3.unite             N/A       N/A        Y       5507 
 
Task Status of Volume glfs-vol2
------------------------------------------------------------------------------
There are no active volume tasks

 

6. Локално монтиране и използване Gluster FS ресурсите върху сървъри и работни станции, които са клиенти на клъстера

ВНИМАНИЕ! Работните станции и сървъри, които ще монтират Gluster FS ресурси, обикновено не са част от Gluster FS клъстера и добрата практика по управлението на такива ресурси изисква да не бъдат част от него!

На сървърите и работните станции, трябва да имате инсталирани пакетите, чрез които те да могат да бъдат клиенти на Gluster FS ресурс:

$ sudo yum install centos-release-gluster
$ sudo yum install glusterfs-fuse

Когато тествате дали даден Gluster FS ресурс е монтируем локално, използвайте ръчно монтиране. След като се убедите, че ръчното монтиране е успешно, може да направите съответните записи в /etc/fstab за автоматично монтиране на ресурса при зареждане на системата. По-долу са представени и двата начина:

  • ръчно монтиране:

    Ръчното монтиране на ресурс става след като той е бил стартиран в клъстера (виж секция 5). В този случай, монтирането може да стане чрез следния команден ред:

    $ sudo mount -t glusterfs host1.unite:/glfs-vol1 /storage

    Ако получите съобщение за грешка от типа:

    Mount failed. Please check the log file for more details.

    то най-вероятната причина за това е проблеми с пакетния филтър (при условие, че всички участници в клъстера функционират). Друга причина може да е несъвместимост на версията на FUSE модула за Gluster FS с другите инструменти от клиентския пакет.

  • автоматично монтиране:

    Автоматичното монтиране на ресурс работи само за тези ресурси, които са достъпни в момента в клъстера (виж секция 5). Монтирането на ресурса при зареждане на системата се случва само, ако е било предварително зададено glusterd да бъде зареждан при стартирането на системата. Записът в /etc/fstab, на база на който ще става автоматичното монтиране, изглежда по подобен начин (заменете хоста и точката на монтирате с тази, която отговаря на вашата топология на ресурси и локална файлова система):

    host1.unite:/glfs-vol1 /storage glusterfs defaults,_netdev 0 0

 

7. Криптиране на данните, обменяни между участниците в Gluster FS клъстера и клиентите

Най-добрият начин да се криптира потокът данни между клиента и участниците в клъстера, а също така между клиентите и хостовете в клъстера, е използването на транспортен IPsec. Повече относно настройките на IPsec транспортната схема е дадено в документа "Изграждане на IPsec stateless транспорт за услугите в инфраструктурата на УНИТе под CentOS 7 и Scientific Linux 7".

Използването на SSL проксиране на TCP сесиите, на база на които е изградена Gluster FS връзката между хостовете в клъстера и клиентите, е сравнително натоварваща при много паралелни сесии. Възможно е да се използва Stunnel за проксиране на тези сесии в случаите, в които клиента се намира в Интернет, а не в локалния интранет на HPC. За подробности виж документа "Инсталиране и конфигуриране на реверсивен прокси сървър под Linux за контролиран достъп до TCP-базирани ресурси в инфраструктурата на УНИТе с поддръжка на TLS v1.3 под CentOS 7 и Scientific Linux 7".

 


Последна актуализация: 28 август 2019

2019 УНИТе, Веселин Колев