*beegfs7向けに修正しました
本家様 http://www.beegfs.com/content/
複数ノードによる分散ファイルシステム
BeeGFS6からBeeGFS7へのアップグレード BeeGFS/upgrade
ストレージノードを追加BeeGFS/StorageNode
メターデータの移動BeeGFS/moveMetadata
admonBeeGFS/admon
BeeGFS/MultiMode
BeeGFS/NFS
仮想マシンで作業確認のために作ってみた。OSはCentOS 7です。
参照先:http://www.beegfs.com/wiki/ManualInstallWalkThrough
No | 役割 | host | HW構成(仮想マシン) | 備考* |
1 | 管理ノード Management Server | ms.sybyl.local | 「Admon Server」と同居 | |
2 | Metadata Servers | mds.sybyl.local | sda:16GB(system) sdb:4GB(metadata,/beegfs) | ext4が推奨,4/8core,ssd有効 RAIDなら1or10有効 総ストレージの0.5%** |
3 | Storage Server | ss1.sybyl.local | sda:16GB(system) sdb:32GB(storage,/beegfs) | ext4,xfs,zfsが推奨 RAIDなら6-12本/1chのRAID6 複数ボリューム可 |
ss2.sybyl.local | ||||
ss3.sybyl.local | ||||
4 | Admon Server | ms.sybyl.local | 「管理ノード」と同居 | |
5 | クライアント | client.sybyl.local |
機能ごとに5つの役割が存在しますが、同一マシン内でその役割を共存することも可能です。
例えば上記では「管理ノード」と「Admon Server」をホスト「ms.sybyl.local」で共存しています。
他にも「Metadata Servers」と「Storage Server」を同じにすることも可能です。丸々1台のマシンで全ての機能を持たすことも可能です。
https://www.beegfs.io/content/documentation/#eula
この中でhttps://www.beegfs.io/docs/BeeGFS_EULA.txtを読むと
enterprise featuresとして存在する
を使うならエンタープライズサポートが必要っぽい.
Mirroringは具体的にはこれかなhttps://www.beegfs.io/wiki/AboutMirroring
必須と言うわけではない。単に構築を楽に行うための手段です。操作の中心とする管理ノード「ms.sybyl.local」にてパスフレーズがない公開鍵・秘密鍵ペアを作成して各ノードに配布します。
[root@ms ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): <---- そのままリターン
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): <---- そのままリターン
Enter same passphrase again: <---- そのままリターン
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
:
[root@ms ~]#
下記はMetadata Servers「mds.sybyl.local」へ配布しています。
[root@ms ~]# ssh root@mds 'mkdir .ssh && chmod 700 .ssh && touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys'
[root@ms ~]# ssh root@mds 'cat >> .ssh/authorized_keys' < .ssh/id_rsa.pub
これを他のノードにも行います クライアント「client.sybyl.local」も含む
各ノードへBeeGFSのリポジトリを登録します。これでyumコマンドでBeeGFSのインストールが可能になります。
リポジトリの場所は https://www.beegfs.io/wiki/DownloadInstallationPackages
管理ノード「ms.sybyl.local」にて
[root@ms ~]# curl -o /etc/yum.repos.d/beegfs-rhel7.repo https://www.beegfs.io/release/beegfs_7_1/dists/beegfs-rhel7.repo
とbeegfs-rhel7.repoを取得して、これを各ノードへ配布します
[root@ms ~]# for i in mds ss1 ss2 ss3 client;do scp /etc/yum.repos.d/beegfs-rhel7.repo root@$i:/etc/yum.repos.d; done
リポジトリで提供されているBeeGFSのパッケージは以下になる
[root@ms ~]# yum list |grep beegfs
beegfs-admon.x86_64 20:7.1.2-el7 beegfs
beegfs-client.noarch 20:7.1.2-el7 beegfs
beegfs-client-compat.noarch 20:7.1.2-el7 beegfs
beegfs-client-devel.noarch 20:7.1.2-el7 beegfs
beegfs-common.noarch 20:7.1.2-el7 beegfs
beegfs-debuginfo.x86_64 20:7.1.2-el7 beegfs
beegfs-helperd.x86_64 20:7.1.2-el7 beegfs
beegfs-meta.x86_64 20:7.1.2-el7 beegfs
beegfs-mgmtd.x86_64 20:7.1.2-el7 beegfs
beegfs-mon.x86_64 20:7.1.2-el7 beegfs
beegfs-storage.x86_64 20:7.1.2-el7 beegfs
beegfs-utils.x86_64 20:7.1.2-el7 beegfs
beegfs-utils-devel.noarch 20:7.1.2-el7 beegfs
beeond.x86_64 20:7.1.2-el7 beegfs
beeond-thirdparty-gpl.x86_64 20:7.1.2-el7 beegfs
libbeegfs-ib.x86_64 20:7.1.2-el7 beegfs
[root@ms ~]#
管理ノード「ms.sybyl.local」には「beegfs-mgmtd」と「beegfs-admon」をインストールします
[root@ms ~]# yum install beegfs-mgmtd beegfs-admon
次にMetadata Servers「mds.sybyl.local」には「beegfs-meta」を折角なのでリモート操作でインストールします。
[root@ms ~]# ssh root@mds yum -y install beegfs-meta
次にStorage Serversな「ss1、ss2、ss3」らには「beegfs-storage」
[root@ms ~]# for i in ss1 ss2 ss3;do ssh root@$i yum -y install beegfs-storage;done
最後にClientは、モジュールの作成があるので開発環境とkernel-develを加えてから「beegfs-client」「beegfs-helperd」をインストールします。
[root@ms ~]# ssh root@client yum -y groupinstall "Development Tools"
[root@ms ~]# ssh root@client yum -y install kernel-devel
[root@ms ~]# ssh root@client yum -y install beegfs-client beegfs-helperd
クライアントは関係しないが、「管理ノードManagement Server」と「Metadata Servers」、「Storage Server」には識別番号で区別する必要がある。
識別番号の「1」は既定で「管理ノードManagement Server」が担っている。
ここでは下記のように識別番号を定義した。
ノード | 識別番号 | ストレージID | 備考 |
ms | 1 | - | 既定で管理ノードは「1」 |
bee1 | 10 | 101 | 2つストレージを持たせるなら下記のようにする 101 102 |
bee2 | 20 | 201 | |
bee3 | 30 | 301 | |
mds | 9 | - |
*機能ごとで異なっていればいいのか不明。なので全体で被らないように定義しました。
IDの取れる範囲は、1-65535
[root@ms ~]# mkdir -p /beegfs/beegfs_mgmtd
[root@ms ~]# /opt/beegfs/sbin/beegfs-setup-mgmtd -p /beegfs/beegfs_mgmtd
Preparing storage directory: /beegfs/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.
[root@ms ~]#
[root@ms ~]# ssh mds
[root@mds ~]# cat /proc/partitions |grep sdb
8 16 4194304 sdb
8 17 4193263 sdb1
[root@mds ~]# mkfs.ext4 -m 0 /dev/sdb1
[root@mds ~]# e2label /dev/sdb1 metadata
[root@mds ~]# echo "LABEL=metadata /beegfs ext4 defaults 0 0" >> /etc/fstab && mkdir /beegfs && mount -a
[root@mds ~]# mkdir /beegfs/beegfs_meta
[root@mds ~]# /opt/beegfs/sbin/beegfs-setup-meta -p /beegfs/beegfs_meta -s 9 -m ms
Preparing storage directory: /beegfs/beegfs_meta
* Creating format.conf file...
* Creating server numeric ID file: /beegfs/beegfs_meta/nodeNumID
Updating config file: /etc/beegfs/beegfs-meta.conf
* Setting management host: ms
* Setting storage directory in config file...
* Disabling usage of uninitialized storage directory in config file...
* Setting usage of extended attributes to: true
All done.
[root@mds ~]#
[root@ms ~]# ssh ss1
[root@ss1 ~]# parted /dev/sdb
[root@ss1 ~]# mkfs.xfs /dev/sdb1
[root@ss1 ~]# xfs_admin -L ss1-ost1 /dev/sdb1
[root@ss1 ~]# echo "LABEL=ss1-ost1 /beegfs xfs defaults 0 0" >> /etc/fstab && mkdir /beegfs && mount -a
[root@ss1 ~]# /opt/beegfs/sbin/beegfs-setup-storage -p /beegfs/storage -s 10 -i 101 -m ms
Preparing storage target directory: /beegfs/storage
* Creating format.conf file...
* Creating chunks directory...
* Creating buddymir directory...
* Creating target numeric ID file: /beegfs/storage/targetNumID
* Creating server numeric ID file: /beegfs/storage/nodeNumID
Updating config file: /etc/beegfs/beegfs-storage.conf
* Setting management host: ms
* Appending to target directory list in config file...
* Disabling usage of uninitialized storage targets in config file...
All done.
[root@ss2 ~]# /opt/beegfs/sbin/beegfs-setup-storage -p /beegfs/storage -s 20 -i 201 -m ms
[root@ss3 ~]# /opt/beegfs/sbin/beegfs-setup-storage -p /beegfs/storage -s 30 -i 301 -m ms
[root@ms ~]# ssh client
[root@client ~]# /opt/beegfs/sbin/beegfs-setup-client -m ms
単純に各マシンを再起動します。
その後、clientにて下記のように確認ができればOK
[root@client ~]# df -Th -t beegfs
ファイルシス タイプ サイズ 使用 残り 使用% マウント位置
beegfs_nodev beegfs 96G 97M 96G 1% /mnt/beegfs
[root@client ~]#
既定は/mnt/beegfsだが、/homeにmountすることも可能
「/etc/beegfs/beegfs-mounts.conf」を下記のように修正してbeegfs-helperd.serviceとbeegfs-client.serviceを再起動する。
- /mnt/beegfs /etc/beegfs/beegfs-client.conf
+ /home /etc/beegfs/beegfs-client.conf
[root@client ~]# df -Th -t beegfs
ファイルシス タイプ サイズ 使用 残り 使用% マウント位置
beegfs_nodev beegfs 96G 97M 96G 1% /home
[root@client ~]#
設定後に詳細を確認してみます。クライアントなノードでないと使えないのが??なのですが、
「beegfs-utils」を入れたノードで、「beegfs-check-servers」で現状の構成要素が見えます。
[root@client ~]# beegfs-check-servers
Management
==========
ms.sybyl.local [ID: 1]: reachable at 192.168.0.47:8008 (protocol: TCP)
Metadata
==========
mds.sybyl.local [ID: 9]: reachable at 192.168.0.48:8005 (protocol: TCP)
Storage
==========
ss1.sybyl.local [ID: 10]: reachable at 192.168.0.49:8003 (protocol: TCP)
ss2.sybyl.local [ID: 20]: reachable at 192.168.0.50:8003 (protocol: TCP)
ss3.sybyl.local [ID: 30]: reachable at 192.168.0.51:8003 (protocol: TCP)
[root@client ~]#
beegfsにデータを多少流し込んで、現在の使用率とか、各ノードの状態らも確認する
[root@client ~]# beegfs-ctl --listtargets --longnodes --state --spaceinfo
TargetID Reachability Consistency Total Free % ITotal IFree % NodeID
======== ============ =========== ===== ==== = ====== ===== = ======
101 Online Good 32.0GiB 28.4GiB 89% 16.0M 16.0M 100% beegfs-storage ss1.sybyl.local [ID: 10]
201 Online Good 32.0GiB 28.4GiB 89% 16.0M 16.0M 100% beegfs-storage ss2.sybyl.local [ID: 20]
301 Online Good 32.0GiB 28.4GiB 89% 16.0M 16.0M 100% beegfs-storage ss3.sybyl.local [ID: 30]
[root@client ~]#
ストレージの状況は「beegfs-ctl --getentryinfo /mnt/beegfs」でみれます
[root@client ~]# beegfs-ctl --getentryinfo /mnt/beegfs
EntryID: root
Metadata node: mds.sybyl.local [ID: 9]
Stripe pattern details:
+ Type: RAID0
+ Chunksize: 512K
+ Number of storage targets: desired: 4
+ Storage Pool: 1 (Default)
[root@client ~]#
1つファイルを/mnt/beegfsに配置して、その分散具合は下記コマンドで見れます。
[root@client ~]# beegfs-ctl --getentryinfo /mnt/beegfs/IMG_20180220_0006.pdf
EntryID: 141-5C5DB94B-9
Metadata node: mds.sybyl.local [ID: 9]
Stripe pattern details:
+ Type: RAID0
+ Chunksize: 512K
+ Number of storage targets: desired: 4; actual: 3
+ Storage targets:
+ 301 @ ss3.sybyl.local [ID: 30]
+ 101 @ ss1.sybyl.local [ID: 10]
+ 201 @ ss2.sybyl.local [ID: 20]
[root@client ~]#
ここでは/mnt/beegfs/IMG_20180220_0006.pdf(865KB)のデータが3つに分かれています。
システム側は「desired: 4」と4つに分散して欲しいようです
もしchunksizeを大きくすれば、パフォーマンスは上がります。
Storageが3台(ss1,ss2,ss3)で、データを16MBつづで分配するのなら下記の様にします
[root@client ~]# beegfs-ctl --setpattern --numtargets=3 --chunksize=16m /mnt/beegfs
公式でパフォーマンスの調整方法が各タイプごとに掲載されている
http://www.beegfs.com/wiki/TuningAdvancedConfiguration
clientマシンからファイルを /mnt/beegfs に書き込むと Storage Server の/beegfs/storageはこんな感じになります
[root@ss1 ~]# ls -l /beegfs/storage/
合計 20
drwxrwxrwx 2 root root 6 2月 9 01:20 buddymir/
drwxrwxrwx 3 root root 16 2月 9 02:02 chunks/
-rw-r--r-- 1 root root 60 2月 9 01:20 format.conf
-rw-r--r-- 1 root root 0 2月 9 01:50 lock.pid
-rw-r--r-- 1 root root 3 2月 9 01:20 nodeNumID
-rw------- 1 root root 210 2月 9 01:50 originalNodeID
-rw------- 1 root root 13 2月 9 01:51 targetID
-rw-r--r-- 1 root root 4 2月 9 01:20 targetNumID
[root@ss1 ~]#
[root@ss1 ~]# du -hs /beegfs/storage/chunks/u0/5C5D/B/
3.4G /beegfs/storage/chunks/u0/5C5D/B/
[root@ss1 ~]# ls /beegfs/storage/chunks/u0/5C5D/B/
0-5C5DB63A-9/ 148-5C5DB894-9/ 1E-5C5DB894-9/ 43-5C5DB766-9/ 72-5C5DB81B-9/ A9-5C5DB7DF-9/
0-5C5DB766-9/ 14C-5C5DB894-9/ 1E-5C5DB90E-9/ 43-5C5DB7A2-9/ 72-5C5DB94B-9/ A9-5C5DB81B-9/
0-5C5DB8D0-9/ 14D-5C5DB81B-9/ 1F-5C5DB98A-9/ 45-5C5DB6EE-9/ 73-5C5DB894-9/ A9-5C5DB8D0-9/
0-5C5DB90E-9/ 15-5C5DB81B-9/ 1F4-5C5DB81B-9/ 45-5C5DB7A2-9/ 74-5C5DB81B-9/ AB-5C5DB7A2-9/
1-5C5DB6B2-9/ 150-5C5DB894-9/ 1FA-5C5DB81B-9/ 46-5C5DB766-9/ 74-5C5DB90E-9/ AC-5C5DB7DF-9/
1-5C5DB7A2-9/ 150-5C5DB90E-9/ 1FD-5C5DB81B-9/ 46-5C5DB81B-9/ 74-5C5DB98A-9/ AD-5C5DB7A2-9/
:
:
[root@ss1 ~]#
一方Metadataサーバは、
[root@mds ~]# ls -lF /beegfs/beegfs_meta/
合計 24
drwxr-xr-x 4 root root 4096 2月 9 01:52 buddymir/
drwxr-xr-x 130 root root 4096 2月 9 01:52 dentries/
-rw-r--r-- 1 root root 71 2月 9 01:18 format.conf
drwxr-xr-x 130 root root 4096 2月 9 01:52 inodes/
-rw-r--r-- 1 root root 0 2月 9 01:52 lock.pid
-rw-r--r-- 1 root root 2 2月 9 01:18 nodeNumID
-rw------- 1 root root 210 2月 9 01:52 originalNodeID
[root@mds ~]# du -hs /beegfs/beegfs_meta/*
130M /beegfs/beegfs_meta/buddymir
83M /beegfs/beegfs_meta/dentries
4.0K /beegfs/beegfs_meta/format.conf
67M /beegfs/beegfs_meta/inodes
0 /beegfs/beegfs_meta/lock.pid
4.0K /beegfs/beegfs_meta/nodeNumID
4.0K /beegfs/beegfs_meta/originalNodeID
[root@mds ~]#
な感じとなる。