😀

【Debian】BeeGFSの導入

2022/12/27に公開

前説?

今回はBeeGFSを使うにあたって、色んなサイトを見ているとDebian系のOSでBeeGFSを導入する人が少ないのか、参考にできる文献が少なかったため、自分なりに調べながらトライ&エラーでやってみたところとりあえず動くところまできたので、まとめてみました。

BeeGFSについて

BeeGFSの公式サイトには次のように書かれています。

The leading parallel file system

つまり、代表的な並列ファイルシステムらしいです。また詳しく読むと、次のようなことも書かれていました。

BeeGFS is designed for all performance-oriented environments including HPC, AI and Deep Learning, Media & Entertainment, Life Sciences, and Oil & Gas (to name a few)

訳すと、BeeGFSは、HPC、AIとディープラーニング、メディア&エンターテイメント、ライフサイエンス、オイル&ガス(一部を除く)など、あらゆるパフォーマンス志向の環境向けに設計されています。らしいです。

使用機器と構成図

今回はRaspberry Pi 4 ModelB/8GBを4台用いて行いました。BeeGFSでは、ManagementServerMetadataServerStorageServerClientAdmonServerという5つのサーバが必要になります。ただし、今回はラズパイが4台しかないため以下のような構成で作成していくことにしました。

名前 hostname IPv4 アドレス 備考
ManagementServer & AdmonServer node1.local 192.168.50.110/24 ManageServerとAdmonServerの同居
Metadata Server node2.local 192.168.50.111/24 ext4でフォーマットするのが推奨
Client node3.local 192.168.50.112/24
Storage Server node4.local 192.168.50.120/24 ext4,xfsなどでフォーマットするのが推奨

ラズパイのセットアップ

ここからはラズパイの設定を行っていくため、「ラズパイを使わない人、設定済みの人、こんなの見ないでも設定できるわ!」という人は飛ばしていただいて構いません。ただし、途中の赤い注意事項だけは読むようにお願いします。

Raspberry Pi Imagerのインストール

OSをインストールするためにOSのImageをダウンロードして、そのまま焼き付けまでやってくれるアプリケーションをラズパイの公式サイトからダウンロードして行いました。

使い方は、OperationgSystemで使いたいOSを選択し、Storageで最終的にOSを使うことになるSDカードを選択し、Writeを押すだけでラズパイにOSの書き込みができるという簡単な仕様になっています。また、OSは自分がダウンロードしたISOファイルも使えるみたいです(※検証はしていない)。

OSのインストール

OSは先ほどの画像にもある通りUbuntu Server22.04.1 LTS(64bit)を使うことにします。

ネットワークの設定

次に、ラズパイにSSHで接続して設定を行って行きため、DHCPでIPアドレスを振るのではなく、IPアドレスを固定にしたいと思います。

  1. まず、OSをダウンロードしたSDカードをPCで開きます。(Windowsだとエクスプローラー、MacだとFinder等)
  2. network-configと書かれたファイルがあるので、それをメモ帳などのテキストエディタで開きます。
  3. ファイルを開いたら設定するノードごとに以下のような感じで変更します。ただし、イーサネット名であるeth0addressesgateway4nameserversの設定は、お使いの環境に合わせて変更してください。(今回は最初に示した構成図のところの表通りに設定しました。)
network-config
network:
    ethernets:
        eth0:
            dhcp4: false
            addresses:
            - 192.168.50.110/24
            routes:
	    - to: default
	      via: 192.168.165.254
            nameservers:
                addresses:
                - 1.1.1.1
    version: 2
  1. 上記の内容で保存したのちに、ラズパイにSDカード(OSを書き込んだストレージ)を差して、電源をつけて起動します。

各種BeeGFSパッケージのインストール

準備

BeeGFSのパッケージをダウンロードするには、aptには標準で存在しないため自分でPGPキーとリポジトリの場所を指定してからダウンロードする必要があります。以下のコマンドをすべてのサーバで実行してください。

  1. 保存場所の作成
bash
sudo mkdir -p /etc/apt/keyrings
  1. PGPキーのダウンロード
bash
curl -fsSL https://www.beegfs.io/release/beegfs_7.3.2/gpg/GPG-KEY-beegfs | sudo gpg --dearmor -o /etc/apt/keyrings/beegfs.gpg
  1. リポジトリの登録
bash
cat <<EOF | sudo tee /etc/apt/sources.list.d/beegfs.list
  deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/beegfs.gpg] https://www.beegfs.io/release/beegfs_7.3.2 $(lsb_release -cs) non-free
EOF
  1. 2・3番で登録したのを更新することでダウンロードを可能にする。
bash
sudo apt update

インストール

上記の準備を行うと、パッケージがダウンロードできるようになるので、それぞれのノードごとに対応するパッケージをダウンロードします。

  • node1(ManagementServer & AdmonServer)
management@node1
sudo apt install -y beegfs-mgmtd beegfs-mon
  • node2(MetadataServer)
meta@node2
sudo apt install -y beegfs-meta
  • node3(Client)
storage@node3
sudo apt install -y beegfs-client beegfs-helperd beegfs-utils
  • node4(StorageServer)
client@node4
sudo apt install -y beegfs-storage

各ノードごとの設定について

ノードごとのIDについて

設定をする際に、各ノードのIDを指定する必要があります。そのIDはあらかじめ時決まっているものではなく、自分で決めるものであるため以下に例を示します。

ノード名 ID(識別番号) ストレージID 備考
node1.local 1 規定値でこれが設定されている
node2.local 5
node4.local 100 1000

設定時のオプションの説明

次に各ノードごとに設定を行っていく際に出てくるオプションについて説明します。

オプション 説明
-p 保存をする場所を指定する際に用いる
-m どのノードを指すかを指定する
-s ID(識別番号)の指定に用いる
-i ストレージのIDを指定するときに用いる

各ノードごとに設定に必要なコマンド

ManagementServer&AdmonServer(node1)

management@node1
sudo mkdir -p /beegfs/beegfs_mgmtd
sudo /opt/beegfs/sbin/beegfs-setup-mgmtd -p /beegfs/beegfs_mgmtd

次に、beegfsのサービスをスタートさせるためには、beegfsの構成ファイルを共有鍵をそれぞれのサービスで同じ共有鍵を参照するようにする必要があります。そのため、以下のコマンドで鍵を作成します。

management@node1
sudo dd if=/dev/random of=/etc/beegfs/connauthfile bs=128 count=1

次に、作成したファイルをルートユーザのみが読み取れるようにします。

management@node1
sudo chown root:root /etc/beegfs/connauthfile
sudo chmod 400 /etc/beegfs/connauthfile

次に、作成した共有鍵を参照できるように、/etc/beegfs/beegfs-mgmtd.confをvimやnanoコマンドで変更します。変更点は、

の画像のような箇所があるのでconnAuthFile =と書かれた行の右辺に/etc/beegfs/connauthfileと書くことで共有できるようにします。
また、監視用のAdmonサーバは、/etc/beegfs/beegfs-mon.confという構成ファイルがあるのでVimやnanoコマンドで開くと、

の画像のような箇所があるので、ManagementServerのIPアドレスを入力してください。(同様に、connAuthFileの部分も設定する必要があります)
これらを行うことでサービスを開始できるようになります。サービスは以下のコマンドを入力してスタートできます。

management@node1
sudo systemctl restart beegfs-mgmtd.service
sudo systemctl restart beegfs-mon.service
sudo systemctl status beegfs-mgmtd.service
sudo systemctl status beegfs-mon.service

おそらく、上記のコマンドを実行していただくとアクティブと出てくるはずです。


最後に、connauthfileを他のノードにも配布する必要があるので、今回はscpコマンドを用いてファイルを共有することにします。ただし、ファイルの共有はしやすい方法でやっていただいて構いません。

management@node1
sudo scp /etc/beegfs/connauthfile meta@192.168.50.111:~/
sudo scp /etc/beegfs/connauthfile client@192.168.50.112:~/
sudo scp /etc/beegfs/connauthfile storage@192.168.50.120:~/

MetadataServer(node2)

meta@node2
sudo mkdir /beegfs/beegfs_meta
sudo /opt/beegfs/sbin/beegfs-setup-meta -p /beegfs/beegfs_meta -s 5 -m 192.168.50.110

connauthfileを正しい設置場所に持ってくるために、mvコマンドを使います。

meta@node2
sudo mv connauthfile /etc/beegfs/

ダウンロードしたのちに、ダウンロードした共有鍵を参照できるように、/etc/beegfs/beegfs-meta.confファイルを変更します。変更点は同じように変更すれば大丈夫です。変更することができればサービスを開始できるようになります。

meta@node2
sudo vim /etc/beegfs/beegfs-meta.conf
sudo systemctl restart beegfs-meta.service
sudo systemctl status beegfs-meta.service

これでサービスがアクティブになり、このノードの設定は終わりになります。

Client(node3)

client@node3
sudo /opt/beegfs/sbin/beegfs-setup-client -m 192.168.50.110

connauthfileを正しい設置場所に持ってくるために、mvコマンドを使います。

client@node3
sudo mv connauthfile /etc/beegfs/

次に、共有鍵を参照できるように/etc/beegfs/beegfs-client.confファイルを今までと同じように変更します。変更することができれば、サービスを開始できるようになります。また、Client(node4)にはBeeGFSのサービスをインストールするときに、beegfs-helperdをダウンロードしているので、/etc/beegfs/beegfs-helperd.confの構成ファイルを開き、今までと同様に共有鍵を参照できるように変更します。

client@node3
sudo vim /etc/beegfs/beegfs-client.conf
sudo vim /etc/beegfs/beegfs-helperd.conf
sudo systemctl restart beegfs-client.service
sudo systemctl restart beegfs-helperd.service
sudo systemctl status beegfs-client.service
sudo systemctl status beegfs-helperd.service

これでサービスがアクティブになり、このノードの設定は終わりになります。

StorageServer(node4)

storage@node4
sudo mkdir -p /beegfs/storage
sudo /opt/beegfs/sbin/beegfs-setup-storage -p /beegfs/storage -s 100 -i 1000 -m 192.168.50.110

connauthfileを正しい設置場所に持ってくるために、mvコマンドを使います。

storage@node4
sudo mv connauthfile /etc/beegfs/

ダウンロードした共有鍵を参照できるように/etc/beegfs/beegfs-storage.confファイルを変更します。ただし変更点は今までと同じです。変更することができればサービスを開始できるようになります。

storage@node4
sudo vim /etc/beegfs/beegfs-storage.conf
sudo systemctl restart beegfs-storage.service
sudo systemctl status beegfs-storage.service

これでサービスがアクティブになり、このノードの設定は終わりになります。

確認

beegfs-check-serversの使い方

Management/Meta/Storageの3つのサーバに関する情報(NodeID,IPアドレス)を確認できる。

client@192.168.50.112
beegfs-check-servers

beegfs-ctlの使い方

BeeGFSのシステムで使われている、storageサーバに接続されているストレージの状況を確認できる。

client@192.168.50.112
beegfs-ctl --listtargets --longnodes --state --spaceinfo

参考文献

今回の記事を作成するにあたって、参考にさせていただいたサイトです。ありがとうございました。
https://doc.beegfs.io/latest/quick_start_guide/quick_start_guide.htm
https://web.chaperone.jp/w/index.php?BeeGFS
https://doc.beegfs.io/latest/advanced_topics/authentication.html
https://qiita.com/r_saiki/items/58fd3738ae6aeedfa96e
https://askubuntu.com/questions/932430/too-many-primary-partitions-ubuntu

Discussion