BeeGFS - распределённая файловая система.

Thank you for reading this post, don't forget to subscribe!

офи­ци­аль­ный сайт:
https://www.beegfs.io/wiki/TableOfContents

BeeGFS явля­ет­ся рас­пре­де­лён­ной фай­ло­вой систе­мой - аля ceph.
при­сту­пим к уста­нов­ке, у нас име­ет­ся 3 тачки:
beegfs1 - 192.168.1.170
beegfs2 - 192.168.1.171
beegfs3 - 192.168.1.172
На всех нодах добав­ля­ем репозиторий:

теперь уста­но­вим пакеты:

yum install beegfs-mgmtd # служ­ба управления
yum install beegfs-meta libbeegfs-ib # служ­ба мета­дан­ных; libbeegfs-ib тре­бу­ет­ся толь­ко для RDMA
yum install beegfs-storage libbeegfs-ib # служ­ба хра­не­ния; libbeegfs-ib тре­бу­ет­ся толь­ко для RDMA
yum install beegfs-client beegfs-helperd beegfs-utils # ути­ли­ты кли­ен­та и команд­ной строки
yum install beegfs-admon # admon

yum install kernel-devel gcc
yum install java-1.8* (толь­ко на той тач­ке где ста­вим beegfs-admon)

Общая коман­да для установки:
yum install beegfs-mgmtd beegfs-meta libbeegfs-ib beegfs-storage libbeegfs-ib beegfs-client beegfs-helperd beegfs-utils beegfs-admon kernel-devel gcc

remote direct memory access, RDMA Уда­лён­ный пря­мой доступ к памя­ти (англ. remote direct memory access, RDMA) — аппа­рат­ное реше­ние для обес­пе­че­ния пря­мо­го досту­па к опе­ра­тив­ной памя­ти дру­го­го ком­пью­те­ра при помо­щи высо­ко­ско­рост­ной сети. Такой доступ поз­во­ля­ет полу­чить доступ к дан­ным, хра­ня­щим­ся в уда­лён­ной систе­ме без при­вле­че­ния средств опе­ра­ци­он­ных систем обо­их ком­пью­те­ров. Явля­ет­ся мето­дом пере­сыл­ки дан­ных с высо­кой про­пуск­ной спо­соб­но­стью и низ­кой задерж­кой сиг­на­ла, и осо­бен­но поле­зен в боль­ших парал­лель­ных вычис­ли­тель­ных систе­мах — кластерах.

 

Опи­са­ние пакетов:

Роли паке­ты
Сер­вер управ­ле­ния (один узел)
  • Управ­ля­ет кон­фи­гу­ра­ци­ей и член­ством в группе
  • Имя хоста или IP-адрес долж­ны быть извест­ны дру­гим узлам во вре­мя запус­ка службы
beegfs-mgmtd
Сер­вер мета­дан­ных (хотя бы один узел)
  • Хра­нит инфор­ма­цию ката­ло­га и выде­ля­ет фай­ло­вое про­стран­ство на сер­ве­рах хранения
beegfs-meta
Сер­вер хра­не­ния (хотя бы один узел)
  • Хра­нит сырое содер­жи­мое файла
beegfs-storage
кли­ент
  • Модуль ядра для мон­ти­ро­ва­ния фай­ло­вой системы
  • Тре­бу­ет­ся демон userpace helper для реги­стра­ции и раз­ре­ше­ния име­ни хоста
beegfs-client
beegfs-helperd
Под­держ­ка RDMA
  • биб­лио­те­ки для под­держ­ки RDMA для мета­дан­ных и служб хранения
libbeegfs-ib
Admon - Сер­вер адми­ни­стри­ро­ва­ния и мони­то­рин­га (необя­за­тель­но)
  • Обес­пе­чи­ва­ет гра­фи­че­ский интерфейс
  • Непре­рыв­ный мони­то­ринг серверов
  • Живая ста­ти­сти­ка
  • beegfs-mon не дол­жен быть уста­нов­лен на одном сервере
beegfs-admon
Mon - Сер­вер мони­то­рин­га на осно­ве InfluxDB (необя­за­тель­но)
  • Непре­рыв­ный мони­то­ринг серверов
  • Живая ста­ти­сти­ка
  • beegfs-admon не дол­жен быть уста­нов­лен на одном сервере
beegfs-mon
Ути­ли­ты BeeGFS для администраторов
  • инстру­мент beegfs-ctl для адми­ни­стри­ро­ва­ния из команд­ной строки
  • инстру­мент beegfs-fsck для про­вер­ки фай­ло­вой системы
  • Несколь­ко неболь­ших вспо­мо­га­тель­ных скриптов
beegfs-utils
Общий BeeGFS
  • Общие фай­лы для всех пакетов
beegfs-common

Созда­ём раз­дел на каж­дом сер­ве­ре куда будем ста­вить beegfs
[root@beegfs1 ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
[root@beegfs1 ~]# vgcreate beegfs /dev/sdb
Volume group "beegfs" successfully created
[root@beegfs1 ~]# lvcreate -n beegfs -L 2G beegfs
Logical volume "beegfs" created.
[root@beegfs1 ~]# mkfs.ext4 -L beegfs /dev/mapper/beegfs-beegfs

мон­ти­ру­ем на каж­дом сервере:
[root@beegfs1 ~]# mkdir -p /data/beegfs/storage
[root@beegfs1 ~]# mount /dev/mapper/beegfs-beegfs /data/beegfs/storage/

Добав­ля­ем в автозагрузку:
vim /etc/fstab
/dev/mapper/beegfs-beegfs /data/beegfs/storage ext4 defaults 1 2

добав­ля­ем в /etc/hosts:
192.168.1.170 beegfs1
192.168.1.171 beegfs2
192.168.1.172 beegfs3

созда­ём ssh клю­чи и рас­ки­ды­ва­ем их по хостам:
[root@beegfs1 ~]# ssh-keygen
[root@beegfs1 ~]# ssh-copy-id beegfs1
[root@beegfs1 ~]# ssh-copy-id beegfs2
[root@beegfs1 ~]# ssh-copy-id beegfs3

Стар­ту­ем админку:
systemctl start beegfs-admon

далее перей­дём к установке,
захо­дим по ссылке:
http://192.168.1.170:8000/
будет ска­чан jar файл запус­ка­ем его.

Если вы хоти­те запу­стить гра­фи­че­ский интер­фейс из его место­по­ло­же­ния по умол­ча­нию на хосте Admon, исполь­зуй­те сле­ду­ю­щую команду:

её мож­но исполь­зо­вать если у вас настро­ен напри­мер xming.

Мы запу­стим ска­чан­ный jar файл
beegfs-admon-gui.jar, откро­ет­ся сле­ду­ю­щее окно:
ука­зы­ва­ем наш ip адрес:

на откро­ет­ся сле­ду­ю­щее окно в кото­ром мы ука­зы­ва­ем поль­зо­ва­те­ля administrator и пароль admin:
Нажи­ма­ем логин и пере­хо­дим на сле­ду­ю­щее окно:
сле­ва мы видим панель конфигурации

дан­ный раз­дел позволяет:

  • Опре­де­лить имя хоста ваших сер­ве­ров и зада­чи их фай­ло­вой системы.
  • Исполь­зуй­те пра­вую кноп­ку мыши для добав­ле­ния / импор­та / уда­ле­ния хостов
  • Воз­мож­ные вари­ан­ты выбо­ра систе­мы: «Сер­вер мета­дан­ных», «Сер­вер хра­ни­ли­ща» и Кли­ен­ты. Кли­ен­ты ука­зы­ва­ют­ся толь­ко для уста­нов­ки rpm / deb паке­тов BeeGFS.
  • Рас­по­ло­же­ние демо­на управ­ле­ния и служб адми­ни­стри­ро­ва­ния и мони­то­рин­га при­вя­за­но к ваше­му хосту управления.

Пере­хо­дим в раз­дел installation -> (два­жды кли­ка­ем по) configuration, откро­ет­ся сле­ду­ю­щее окно:

в нём мы добав­ля­ем сер­ве­ра мета­дан­ных фай­ло хра­ни­ли­ща и кли­ен­тов, так­же можем задать имя демона.

Сле­ду­ю­щим шагом явля­ет­ся уста­нов­ка неко­то­рых основ­ных пара­мет­ров кон­фи­гу­ра­ции для служб BeeGFS.

  • Опи­са­ние каж­до­го пара­мет­ра кон­фи­гу­ра­ции мож­но про­смот­реть, наве­дя ука­за­тель мыши на инфор­ма­ци­он­ный символ.
  • Поля запол­не­ны по умол­ча­нию, поэто­му вам не нуж­но ниче­го менять, если у вас нет осо­бых потребностей. 
    • При­ме­ча­ние:
      • BeeGFS исполь­зу­ет локаль­ную и базо­вую фай­ло­вую систе­му для хра­не­ния дан­ных сво­ей фай­ло­вой системы.
      • Эти дан­ные хра­нят­ся в «Ката­ло­ге мета­дан­ных» и «Ката­ло­ге хранения»
      • Адми­ни­стра­тор дол­жен либо смон­ти­ро­вать под­хо­дя­щее дис­ко­вое про­стран­ство и фай­ло­вые систе­мы в ката­ло­ги по умол­ча­нию, либо изме­нить эти два пути. 
        • ката­лог мета­дан­ных по умол­ча­нию: /data/beegfs/meta
          • реко­мен­ду­е­мый тип фай­ло­вой систе­мы: ext4
        • Ката­лог хра­не­ния по умол­ча­нию: /data/beegfs/storage
          • реко­мен­ду­е­мый тип фай­ло­вой систе­мы: xfs

Для добав­ле­ния сер­ве­ров щёл­ка­ем в нуж­ном окне пра­вой кла­ви­шей мыши и выби­ра­ем add host
появит­ся сле­ду­ю­щее окно, запол­ня­ем его име­на хостов на кото­рых будут метаданные
нажи­ма­ем add
далее добав­ля­ем storage server, выпол­ня­ем те же дей­ствия, пра­вой кла­ви­шей мыши в соот­вет­ству­ю­щем поле и выби­ра­ем add host, появит­ся окно в кото­рое мы доба­вим те же 2 сер­ве­ра и нажи­ма­ем add
для окна client добав­ля­ем все 3 сер­ве­ра beegfs1 beegfs2 beegfs3.
После того как все хосты добав­ле­ны, нажи­ма­ем next

в слу­чае если воз­ник­ла сле­ду­ю­щая ошибка:
зна­чит что вы забы­ли рас­ки­дать ssh клю­чи меж­ду хоста­ми, эта­пом ранее, про­верь­те есть доступ меж­ду тачками.

Если всё кор­рект­но, то при нажа­тии на next появит­ся окно кото­рое пред­ла­га­ет сохра­нить изме­не­ния, согла­ша­ем­ся и полу­ча­ем сле­ду­ю­щее уведомление:

Теперь при­сту­пим к настройке:
При созда­нии томов мы ука­зы­ва­ли в каче­стве раз­де­ла для хра­не­ния данных:
/data/beegfs/storage
[root@beegfs1 ~]# df -h | grep beegfs
/dev/mapper/beegfs-beegfs 2.0G 6.0M 1.8G 1% /data/beegfs/storage

дирек­то­рию для мета­дан­ных мож­но оста­вить неиз­мен­ной, А вот точ­ку мон­ти­ро­ва­ния для кли­ен­тов попра­вим с
/mnt/beegfs
на
/beegfs-client
созда­ём дан­ную дирек­то­рию на всех хостах:
[root@beegfs1 ~]# mkdir /beegfs-client
[root@beegfs2 ~]# mkdir /beegfs-client
[root@beegfs3 ~]# mkdir /beegfs-client
после чего нажи­ма­ем NEXT и попа­да­ем на сле­ду­ю­щее окно:

здесь мож­но ука­зать какую кон­фи­гу­ра­цию исполь­зо­вать для всех нод.
я здесь ниче­го не меняю, нажи­маю NEXT согла­ша­юсь с сохра­не­ни­ем кон­фи­гу­ра­ции после чего откры­ва­ет­ся послед­нее инфор­ма­ци­он­ное окно в кото­ром мы можем убе­дить­ся, что куда будет установлено:

если всё ок и мы нигде не ошиб­лись, нажи­ма­ем install, согла­ша­ем­ся с лицен­зи­ей и нажи­ма­ем ОК.

всё, понес­лась установка:

у меня уста­нов­ка завер­ши­лась с ошибкой:
в логе видим следующее:

Makefile:121: *** Linux kernel build directory not found. Please check if the kernel module development packages are installed for the current kernel version. (RHEL: kernel-devel; SLES: linux-kernel-headers, kernel-source; Debian: linux-headers). Stop.
make: *** [auto_rebuild] Error 2

Failed to compile client module on host beegfs3

доуста­но­вим пакет:
yum install kernel-devel

после нажи­ма­ем abort - close
и опять пыта­ем­ся заин­ста­лить­ся, нажав next
Как видим всё ок прошло:

после чего на сер­ве­рах надо запу­стить демо­нов в сле­ду­ю­щем порядке:
[root@beegfs1 ~]# systemctl start beegfs-meta
[root@beegfs1 ~]# systemctl start beegfs-mgmtd
[root@beegfs1 ~]# systemctl start beegfs-storage
[root@beegfs1 ~]# systemctl start beegfs-helperd
[root@beegfs1 ~]# systemctl start beegfs-client

так же это мож­но сде­лать из интер­фей­са, прой­дя в :
"Management" -> "Start/Stop Services" и запу­стив сер­ви­сы в сле­ду­ю­щем порядке:

  1. management service
  2. metadata services
  3. storage services
  4. client services

дан­ная часть пане­ли рабо­та­ет с /etc/init.d кото­рая на centos7 не рабо­та­ет, поэто­му кор­рект­но ста­тус не отображается.

 

 

если пона­до­бит­ся, то мож­но уста­но­вить мене­джер на вто­рой сер­вер сле­ду­ю­щим образом:

[root@beegfs2 mgmtd]# /opt/beegfs/sbin/beegfs-setup-mgmtd -p /data/beegfs/mgmtd/ -f
Preparing storage directory: /data/beegfs/mgmtd/
* Creating format.conf file…
Updating config file: /etc/beegfs/beegfs-mgmtd.conf
* Setting storage directory in config file…
* Disabling usage of uninitialized storage directory in config file…
All done.

основ­ная уста­нов­ка закон­че­на, как видим ниху­я­шень­ки сложного.

==================================================

Настроим зеркалирование

По умол­ча­нию зер­ка­ли­ро­ва­ние отклю­че­но для ново­го экзем­пля­ра фай­ло­вой систе­мы. Оба типа зер­ка­ли­ро­ва­ния могут быть вклю­че­ны с помо­щью инстру­мен­та команд­ной стро­ки beegfs-ctl. (Инстру­мент beegfs-ctl содер­жит­ся в паке­те beegfs-utils и обыч­но запус­ка­ет­ся с кли­ент­ско­го узла.)
Зер­каль­ное отоб­ра­же­ние хра­ни­ли­ща может быть вклю­че­но для каж­до­го ката­ло­га, так что неко­то­рые дан­ные в фай­ло­вой систе­ме могут быть зер­каль­но отра­же­ны, в то вре­мя как дру­гие дан­ные могут не зер­каль­но отоб­ра­жать­ся. Со сто­ро­ны medatada так­же воз­мож­но акти­ви­ро­вать или деак­ти­ви­ро­вать зер­ка­ли­ро­ва­ние для каж­до­го ката­ло­га, но при­ме­ня­ют­ся опре­де­лен­ные логи­че­ские огра­ни­че­ния. Напри­мер, для эффек­тив­но­го зер­каль­но­го отоб­ра­же­ния ката­ло­га так­же дол­жен быть отра­жен весь путь к нему.

Настрой­ки зер­каль­но­го отоб­ра­же­ния ката­ло­га будут при­ме­не­ны к новым запи­сям фай­лов и будут полу­че­ны из новых под­ка­та­ло­гов. Напри­мер, если зер­ка­ли­ро­ва­ние мета­дан­ных вклю­че­но для ката­ло­га /mnt/beegfs/mydir1, то в новом под­ка­та­ло­ге /mnt/beegfs/mydir1/mydir2 так­же авто­ма­ти­че­ски будет вклю­че­но зер­ка­ли­ро­ва­ние метаданных.

После вклю­че­ния зер­каль­но­го отоб­ра­же­ния мета­дан­ных для фай­ло­вой систе­мы с помо­щью команды
beegfs-ctl –mirrormd
мета­дан­ные кор­не­во­го ката­ло­га будут зер­каль­но отоб­ра­же­ны по умол­ча­нию. Поэто­му для вновь создан­ных ката­ло­гов в кор­не­вом ката­ло­ге так­же будет вклю­че­но зер­ка­ли­ро­ва­ние мета­дан­ных. Мож­но исклю­чить новые пап­ки из зер­каль­но­го отоб­ра­же­ния мета­дан­ных, создав их с помощью
beegfs-ctl –createdir –nomirror.

Что­бы вклю­чить зер­ка­ли­ро­ва­ние содер­жи­мо­го фай­ла для опре­де­лен­но­го ката­ло­га, см. Встро­ен­ную справ­ку инстру­мен­та beegfs-ctl.

Зер­каль­ное отоб­ра­же­ние содер­жи­мо­го фай­ла впо­след­ствии может быть отклю­че­но с помо­щью режима
beegfs-ctl –setpattern без пара­мет­ра –buddymirror. Одна­ко фай­лы, кото­рые уже были созда­ны при вклю­чен­ном зер­ка­ли­ро­ва­нии, оста­нут­ся зеркальными.

авто­ма­ти­че­ская установка:
beegfs-ctl --addmirrorgroup --automatic --nodetype=meta
beegfs-ctl --addmirrorgroup --automatic --nodetype=storage
[codesyntax lang="php" blockstate="collapsed"]

[/codesyntax]

руч­ная установка
[codesyntax lang="php" blockstate="collapsed"]

[/codesyntax]

Что­бы акти­ви­ро­вать зер­ка­ли­ро­ва­ние мета­дан­ных, исполь­зуй­те инстру­мент beegfs-ctl.

Для пра­виль­ной син­хро­ни­за­ции всей инфор­ма­ции меж­ду раз­лич­ны­ми ком­по­нен­та­ми BeeGFS кли­ен­ты не могут быть под­клю­че­ны во вре­мя это­го про­цес­са, а сер­ве­ры мета­дан­ных долж­ны быть пере­за­пу­ще­ны после этого.

Пол­ный ряд шагов в уже рабо­та­ю­щей систе­ме: оста­но­ви­те все кли­ен­ты, выпол­ни­те beegfs-ctl --mirrormd , пере­за­пу­сти­те все сер­ве­ры мета­дан­ных, затем пере­за­пу­сти­те все клиенты.

[root@beegfs1 ~]# systemctl stop beegfs-client.service
[root@beegfs2 ~]# systemctl stop beegfs-client.service
[root@beegfs3 ~]# systemctl stop beegfs-client.service

[root@beegfs1 ~]# beegfs-ctl --mirrormd
Operation succeeded.

NOTE:
To complete activating metadata mirroring, please remount any clients and
restart all metadata servers now.

[root@beegfs1 ~]# systemctl restart beegfs-meta
[root@beegfs2 ~]# systemctl restart beegfs-meta

[root@beegfs1 ~]# systemctl restart beegfs-client.service
[root@beegfs2 ~]# systemctl restart beegfs-client.service
[root@beegfs3 ~]# systemctl restart beegfs-client.service

 

Скон­фи­гу­ри­ро­ван­ные груп­пы зер­ка­ли­ро­ва­ния могут быть пере­чис­ле­ны с помо­щью beegfs-ctl (не забудь­те ука­зать тип узла):


Так­же мож­но пере­чис­лить груп­пы зер­каль­ных дру­зей наря­ду с дру­гой целе­вой информацией:

Посмот­реть инфор­ма­цию о пара­мет­рах мож­но сле­ду­ю­щим образом:


Обра­ти­те вни­ма­ние, что нечет­ные номе­ра хра­ни­ли­ща невоз­мож­ны на сер­ве­рах мета­дан­ных, посколь­ку в BeeGFS нет целей мета­дан­ных. Необ­хо­дим чет­ный номер сер­ве­ра мета­дан­ных, что­бы каж­дый сер­вер мета­дан­ных мог при­над­ле­жать группе

Что­бы про­ве­рить настрой­ки зер­каль­но­го отоб­ра­же­ния мета­дан­ных и содер­жи­мо­го фай­ла опре­де­лен­но­го ката­ло­га или фай­ла, используйте:

Что­бы про­ве­рить целе­вые состо­я­ния хра­ни­лищ, используйте:


Сле­ду­ю­щая коман­да может быть исполь­зо­ва­на для оста­нов­ки авто­ма­ти­че­ской ресин­хро­ни­за­ции и запус­ка пол­ной ресинхронизации.

Пока­зать инфор­ма­цию о ресинхронизации:

Для акти­ва­ции кор­рект­но­го зер­ка­ли­ро­ва­ния необ­хо­ди­мо зай­ти в панель:
FS Operation -> File Browser -> "…" settings

Get -> Default of targets: 1(наша груп­па) -> Stripe pattern: BuddyMirror -> Change