参照先https://www.beegfs.io/wiki/MultiMode
BeeGFSには複数のインスタンスが用意できる。
このインスタンスとは、Storage Serverの個々のストレージの意味ではなく、これらストレージが集合した
clientに対して提供されるストレージ領域のことを言います。

イメージ的にはこんな感じ
2019y02m10d_021901262.png

ただ、、残念なことに単一インスタンスから複数インスタンス設置方法が記載されていない。。
初めから複数インスタンスを作るならこの方法っていうドキュメントが冒頭の参照先である。
https://www.beegfs.io/wiki/MultiMode のサンプルはmgmtdが1つで??. ここではmgmtdも複数にします

ポート番号とかに気をつければ、単一インスタンスから複数インスタンスへそのまま移行できそうな気がするが、
ここでは始めから複数インスタンス版を作ることにした。

要は「管理サーバmgmtd」「medatadaサーバ」「ストレージサーバ」が一組として1つのインスタンスを動かすように調整すること。
そしてそれが複数動くようにsystemdのテンプレートを使うことかと

BeeGFS/MultiMode/ansibile

設計

マシン名ms.sybyl.localss1.sybyl.localss2.sybyl.localss3.sybyl.local
項目mgmtd.1mgmtd.2meta.1meta.2ss1.1ss1.2ss2.1ss2.2ss3.1ss2.2
sysMgmtdHostmsmsmsmsmsmsmsmsms
storeMgmtdDirectory/beegfs/
mgmtd1
/beegfs/
mgmtd2
storeMetaDirectory/beegfs/
meta1
/beegfs/
meta2
storeStorageDirectory/storage1/storage2/storage1/storage2/storage1/storage2
connMgmtdPort*18008280081800828008180082800818008280081800828008
connMetaPort*1800528005
connStoragePort*180032800318003280031800328003
logStdFile/var/log/gfs-mgmtd1.log/var/log/gfs-mgmtd2.log/var/log/gfs-meta1.log/var/log/gfs-meta2.log/var/log/gfs-storage1.log/var/log/gfs-storage2.log/var/log/gfs-storage1.log/var/log/gfs-storage2.log/var/log/gfs-storage1.log/var/log/gfs-storage2.log

識別番号

ノードインスタンス識別番号ストレージIDデバイスID備考
mdsinst191
inst292
ss1inst111111/dev/sdb1(/storage1)2台目のストレージは 112、次は113
inst212121/dev/sdc1(/storage2)
ss2inst121211/dev/sdb1(/storage1)
inst222221/dev/sdc1(/storage2)
ss3inst131311/dev/sdb1(/storage1)
inst232321/dev/sdc1(/storage2)

既存のインスタンスを起動しないようにする(オプション)

既に設定済みの単一インスタンスを起動しないようにします。

[root@ms ~]# ssh client systemctl stop beegfs-client beegfs-helperd
[root@ms ~]# for i in ss1 ss2 ss3; do ssh $i systemctl stop beegfs-storage; done
[root@ms ~]# ssh mds systemctl stop beegfs-meta
[root@ms ~]# systemctl stop beegfs-mgmtd beegfs-admon
 
[root@ms ~]# ssh client systemctl disable beegfs-client beegfs-helperd
[root@ms ~]# for i in ss1 ss2 ss3; do ssh $i systemctl disable beegfs-storage; done
[root@ms ~]# ssh mds systemctl disable beegfs-meta
[root@ms ~]# systemctl disable beegfs-mgmtd

管理ノード

各インスタンスごとに設定ファイルを用意します

[root@ms ~]# mv /beegfs/beegfs_mgmtd /beegfs/beegfs_mgmtd.old
 
[root@ms ~]# mkdir -p /etc/beegfs/inst1.d
[root@ms ~]# mkdir -p /etc/beegfs/inst2.d
 
[root@ms ~]# cp /etc/beegfs/beegfs-mgmtd.conf /etc/beegfs/inst1.d/
[root@ms ~]# cp /etc/beegfs/beegfs-mgmtd.conf /etc/beegfs/inst2.d/

各インスタンスの設定ファイルbeegfs-mgmtd.confを修正します

(/etc/beegfs/inst1.d/beegfs-mgmtd.conf)
storeMgmtdDirectory      = /beegfs/mgmtd1
connMgmtdPortTCP                       = 18008
connMgmtdPortUDP                       = 18008
logStdFile                             = /var/log/beegfs-mgmtd1.log
 
(/etc/beegfs/inst2.d/beegfs-mgmtd.conf)
storeMgmtdDirectory      = /beegfs/mgmtd2
connMgmtdPortTCP                       = 28008
connMgmtdPortUDP                       = 28008
logStdFile                             = /var/log/beegfs-mgmtd2.log

管理ディレクトリをそれぞれに作ります

[root@ms ~]# /opt/beegfs/sbin/beegfs-setup-mgmtd -c /etc/beegfs/inst1.d/beegfs-mgmtd.conf -p /beegfs/mgmtd1 -S mgmt-inst1
Preparing storage directory: /beegfs/mgmtd1
 * Creating format.conf file...
 * Creating server string ID file: /beegfs/mgmtd1/nodeID
Updating config file: /etc/beegfs/inst1.d/beegfs-mgmtd.conf
 * Setting storage directory in config file...
 * Disabling usage of uninitialized storage directory in config file...
All done.
[root@ms ~]#
[root@ms ~]# /opt/beegfs/sbin/beegfs-setup-mgmtd -c /etc/beegfs/inst2.d/beegfs-mgmtd.conf -p /beegfs/mgmtd2 -S mgmt-inst2
[root@ms ~]#

systemdで起動できるように調整します

[root@ms ~]# systemctl enable beegfs-mgmtd@inst1
[root@ms ~]# systemctl enable beegfs-mgmtd@inst2

留意
beegfs-mgmtdの中身は「"/usr/lib/systemd/system/beegfs-mgmtd@.service"」で
Serviceにはテンプレートを使っている

 :
[Service]
ExecStart=/opt/beegfs/sbin/beegfs-mgmtd cfgFile=/etc/beegfs/%I.d/beegfs-mgmtd.conf runDaemonized=false
 :

cfgFileの「/etc/beegfs/%I.d/beegfs-mgmtd.conf」で「%I」に「inst1」と「inst2」があてられる。

Metadata Servers

こちらもインスタンスごと(inst1とinst2)に用意します

[root@mds ~]# mkdir /etc/beegfs/inst1.d
[root@mds ~]# mkdir /etc/beegfs/inst2.d
[root@mds ~]# cp /etc/beegfs/beegfs-meta.conf /etc/beegfs/inst1.d/
[root@mds ~]# cp /etc/beegfs/beegfs-meta.conf /etc/beegfs/inst2.d/

metadataの設定を行います

(/etc/beegfs/inst1.d/beegfs-meta.conf)
storeMetaDirectory           = /beegfs/meta1
connMetaPortTCP              = 18005
connMetaPortUDP              = 18005
connMgmtdPortTCP             = 18008
connMgmtdPortUDP             = 18008
logStdFile                   = /var/log/beegfs-meta1.log
 
(/etc/beegfs/inst2.d/beegfs-meta.conf)
storeMetaDirectory           = /beegfs/meta2
connMetaPortTCP              = 28005
connMetaPortUDP              = 28005
connMgmtdPortTCP             = 28008
connMgmtdPortUDP             = 28008
logStdFile                   = /var/log/beegfs-meta2.log

metadataディレクトリを設置します

[root@mds ~]# /opt/beegfs/sbin/beegfs-setup-meta -c /etc/beegfs/inst1.d/beegfs-meta.conf -p /beegfs/meta1 -s 91 -S meta-inst1 -m ms
Preparing storage directory: /beegfs/meta1
 * Creating format.conf file...
 * Creating server numeric ID file: /beegfs/meta1/nodeNumID
 * Creating server string ID file: /beegfs/meta1/nodeID
Updating config file: /etc/beegfs/inst1.d/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 ~]# /opt/beegfs/sbin/beegfs-setup-meta -c /etc/beegfs/inst2.d/beegfs-meta.conf -p /beegfs/meta2 -s 92 -S meta-inst2 -m ms

systemdの調整

[root@mds ~]# systemctl list-unit-files | grep beegfs
beegfs-meta.service                           disabled
beegfs-meta@.service                          disabled
 
[root@mds ~]# systemctl enable beegfs-meta@inst1
[root@mds ~]# systemctl enable beegfs-meta@inst2

Storage Server

3台(ss1,ss2,ss3)に2つのインスタンスを載せるので、合計6つ調整します。

  • ss1
    [root@ss1 ~]# mkdir /etc/beegfs/inst{1..2}.d
    [root@ss1 ~]# find /etc/beegfs -name "inst*" -type d -exec cp /etc/beegfs/beegfs-storage.conf {} \;
     
    (/etc/beegfs/inst1.d/beegfs-storage.conf)
    storeStorageDirectory        =
    connMgmtdPortTCP             = 18008
    connMgmtdPortUDP             = 18008
    connStoragePortTCP           = 18003
    connStoragePortUDP           = 18003
    logStdFile                   = /var/log/beegfs-storage1.log
     
    (/etc/beegfs/inst2.d/beegfs-storage.conf)
    storeStorageDirectory        =
    connMgmtdPortTCP             = 28008
    connMgmtdPortUDP             = 28008
    connStoragePortTCP           = 28003
    connStoragePortUDP           = 28003
    logStdFile                   = /var/log/beegfs-storage2.log
    ストレージの設定
    [root@ss1 ~]# /opt/beegfs/sbin/beegfs-setup-storage -c /etc/beegfs/inst1.d/beegfs-storage.conf \
     -p /storage1 -s 11 -S ss1-inst1 -i 111 -m ms
     
    [root@ss1 ~]# /opt/beegfs/sbin/beegfs-setup-storage -c /etc/beegfs/inst2.d/beegfs-storage.conf \
     -p /storage2 -s 12 -S ss1-inst2 -i 121 -m ms
    systemdの調整
    [root@ss1 ~]# systemctl list-unit-files | grep beegfs
    beegfs-storage.service                        disabled
    beegfs-storage@.service                       disabled
     
    [root@ss1 ~]#
    [root@ss1 ~]# systemctl enable beegfs-storage@inst1
    [root@ss1 ~]# systemctl enable beegfs-storage@inst2
  • ss2
    [root@ss2 ~]# mkdir /etc/beegfs/inst{1..2}.d
    [root@ss2 ~]# find /etc/beegfs -name "inst*" -type d -exec cp /etc/beegfs/beegfs-storage.conf {} \;
     
    (/etc/beegfs/inst1.d/beegfs-storage.conf)
    storeStorageDirectory        =
    connMgmtdPortTCP             = 18008
    connMgmtdPortUDP             = 18008
    connStoragePortTCP           = 18003
    connStoragePortUDP           = 18003
    logStdFile                   = /var/log/beegfs-storage1.log
     
    (/etc/beegfs/inst2.d/beegfs-storage.conf)
    storeStorageDirectory        =
    connMgmtdPortTCP             = 28008
    connMgmtdPortUDP             = 28008
    connStoragePortTCP           = 28003
    connStoragePortUDP           = 28003
    logStdFile                   = /var/log/beegfs-storage2.log
    [root@ss2 ~]# /opt/beegfs/sbin/beegfs-setup-storage -c /etc/beegfs/inst1.d/beegfs-storage.conf \
     -p /storage1 -s 21 -S ss2-inst1 -i 211 -m ms
     
    [root@ss2 ~]# /opt/beegfs/sbin/beegfs-setup-storage -c /etc/beegfs/inst2.d/beegfs-storage.conf \
     -p /storage2 -s 22 -S ss2-inst2 -i 221 -m ms
    [root@ss2 ~]# systemctl enable beegfs-storage@inst1
    [root@ss2 ~]# systemctl enable beegfs-storage@inst2
  • ss3
    [root@ss3 ~]# mkdir /etc/beegfs/inst{1..2}.d
    [root@ss3 ~]# find /etc/beegfs -name "inst*" -type d -exec cp /etc/beegfs/beegfs-storage.conf {} \;
     
    (/etc/beegfs/inst1.d/beegfs-storage.conf)
    storeStorageDirectory        =
    connMgmtdPortTCP             = 18008
    connMgmtdPortUDP             = 18008
    connStoragePortTCP           = 18003
    connStoragePortUDP           = 18003
    logStdFile                   = /var/log/beegfs-storage1.log
     
    (/etc/beegfs/inst2.d/beegfs-storage.conf)
    storeStorageDirectory        =
    connMgmtdPortTCP             = 28008
    connMgmtdPortUDP             = 28008
    connStoragePortTCP           = 28003
    connStoragePortUDP           = 28003
    logStdFile                   = /var/log/beegfs-storage2.log
    [root@ss3 ~]# /opt/beegfs/sbin/beegfs-setup-storage -c /etc/beegfs/inst1.d/beegfs-storage.conf \
     -p /storage1 -s 31 -S ss3-inst1 -i 311 -m ms
     
    [root@ss3 ~]# /opt/beegfs/sbin/beegfs-setup-storage -c /etc/beegfs/inst2.d/beegfs-storage.conf \
     -p /storage2 -s 32 -S ss3-inst2 -i 321 -m ms
    [root@ss3 ~]# systemctl enable beegfs-storage@inst1
    [root@ss3 ~]# systemctl enable beegfs-storage@inst2

client

クライアントでは下記のように「beegfs-client」の他に「beegfs-helperd」の起動が求められます。

[root@client ~]# systemctl list-unit-files | grep beegfs
beegfs-client.service                         disabled
beegfs-helperd.service                        disabled
beegfs-helperd@.service                       disabled
[root@client ~]#

まずは beegfs-helperd から

[root@client ~]# mkdir /etc/beegfs/inst{1..2}.d
[root@client ~]# find /etc/beegfs -name "inst*" -type d -exec cp /etc/beegfs/beegfs-helperd.conf {} \;
 
(/etc/beegfs/inst1.d/beegfs-helperd.conf)
connHelperdPortTCP = 18006
logStdFile         = /var/log/beegfs-client1.log
 
(/etc/beegfs/inst2.d/beegfs-helperd.conf)
connHelperdPortTCP = 28006
logStdFile         = /var/log/beegfs-client2.log
[root@client ~]# systemctl enable beegfs-helperd@inst1
[root@client ~]# systemctl enable beegfs-helperd@inst2

次に、beegfs-clientだが、こちらは複数インスタンス向けに用意されていない。
https://groups.google.com/forum/#!topic/fhgfs-user/MIZ7qAc2TP8を参考に修正

[root@client ~]# cp /usr/lib/systemd/system/beegfs-client.service /usr/lib/systemd/system/beegfs-client@.service
 
(/usr/lib/systemd/system/beegfs-client@.serviceを修正)
ExecStart=/etc/init.d/beegfs-client start %I
ExecStop=/etc/init.d/beegfs-client stop %I
 
[root@client ~]# systemctl daemon-reload

そして、「/etc/default/beegfs-helperd」と「/etc/default/beegfs-client」に「MULTI_MODE="YES"」と定義します。

[root@client ~]# diff -u /etc/default/beegfs-helperd.orig /etc/default/beegfs-helperd
--- /etc/default/beegfs-helperd.orig    2018-12-06 20:43:54.000000000 +0900
+++ /etc/default/beegfs-helperd 2019-05-02 23:19:38.454035271 +0900
@@ -25,4 +25,4 @@
 #
 # Example: /etc/beegfs/scratch.d/beegfs-helperd.conf
 # $ /etc/init.d/beegfs-helperd start scratch
-MULTI_MODE="NO"
+MULTI_MODE="YES"
[root@client~]#
 
[root@client~]# diff -u /etc/default/beegfs-client.orig /etc/default/beegfs-client
--- /etc/default/beegfs-client.orig     2018-12-06 20:43:56.000000000 +0900
+++ /etc/default/beegfs-client  2019-05-02 23:21:25.600245775 +0900
@@ -15,7 +15,7 @@
 #
 # Example: /etc/beegfs/scratch.d/beegfs-client.conf
 # $ /etc/init.d/beegfs-client start scratch
-MULTI_MODE="NO"
+MULTI_MODE="YES"
 
 # Mount hook will be executed before any mount or unmount operation,
 # and additionally after the operation succeeded.
[root@client~]#

その後、

[root@client ~]# find /etc/beegfs -name "inst*" -type d -exec cp /etc/beegfs/beegfs-client.conf {} \;
[root@client ~]# find /etc/beegfs -name "inst*" -type d -exec cp /etc/beegfs/beegfs-mounts.conf {} \;
 
(/etc/beegfs/inst1.d/beegfs-client.conf)
connClientPortUDP             = 18004
connHelperdPortTCP            = 18006
connMgmtdPortTCP              = 18008
connMgmtdPortUDP              = 18008
(/etc/beegfs/inst1.d/beegfs-mounts.conf)
/home /etc/beegfs/inst1.d/beegfs-client.conf
 
(/etc/beegfs/inst2.d/beegfs-client.conf)
connClientPortUDP             = 28004
connHelperdPortTCP            = 28006
connMgmtdPortTCP              = 28008
connMgmtdPortUDP              = 28008
(/etc/beegfs/inst2.d/beegfs-mounts.conf)
/data /etc/beegfs/inst2.d/beegfs-client.conf
[root@client ~]# /opt/beegfs/sbin/beegfs-setup-client -c /etc/beegfs/inst1.d/beegfs-client.conf -m ms
[root@client ~]# /opt/beegfs/sbin/beegfs-setup-client -c /etc/beegfs/inst2.d/beegfs-client.conf -m ms
[root@client ~]# systemctl enable beegfs-client@inst1
[root@client ~]# systemctl enable beegfs-client@inst2

確認

各マシンのデーモンを再起動させて、clientから確認してみる。/homeにデータを流し込んでみた
単純にdfコマンドで見ると

[root@client ~]# df -Th -t beegfs
ファイルシス   タイプ サイズ  使用  残り 使用% マウント位置
beegfs_inst1   beegfs    96G   11G   86G   11% /home
beegfs_inst2   beegfs   192G   97M  192G    1% /data
[root@client ~]#

となる。
追加でclientに「beegfs-utils」パッケージをインストールする。
/homeを構成するストレージノードの使用率を確認すると

[root@client ~]# beegfs-df -p /home
METADATA SERVERS:
TargetID   Cap. Pool        Total         Free    %      ITotal       IFree    %
========   =========        =====         ====    =      ======       =====    =
      91         low      31.4GiB      30.8GiB  98%        2.0M        1.9M  93%
 
STORAGE TARGETS:
TargetID   Cap. Pool        Total         Free    %      ITotal       IFree    %
========   =========        =====         ====    =      ======       =====    =
     111         low      32.0GiB      28.6GiB  89%       16.0M       16.0M 100%
     211         low      32.0GiB      28.6GiB  89%       16.0M       16.0M 100%
     311         low      32.0GiB      28.6GiB  89%       16.0M       16.0M 100%
[root@client ~]#

となる。「Cap. Pool」で「low」とされてるが、これは管理ノードの設定ファイル「/etc/beegfs/inst1.d/beegfs-mgmtd.conf」の
tuneStorageSpaceLowLimitが既定で「1T」となっているので、それより低いから「low」と表示される。
そのほかにも「tuneStorageSpaceEmergencyLimit」(既定:20G)があって、それよりも低いと「emergency」と表示される。
「ITotal」「IFree」はi-nodeを意味します

構成メンバーを確認します。

[root@client ~]# beegfs-check-servers -p /home
Management
==========
mgmt-inst1 [ID: 1]: reachable at 192.168.0.47:18008 (protocol: TCP)
 
Metadata
==========
meta-inst1 [ID: 91]: reachable at 192.168.0.48:18005 (protocol: TCP)
 
Storage
==========
ss1-inst1 [ID: 11]: reachable at 192.168.0.49:18003 (protocol: TCP)
ss2-inst1 [ID: 21]: reachable at 192.168.0.50:18003 (protocol: TCP)
ss3-inst1 [ID: 31]: reachable at 192.168.0.51:18003 (protocol: TCP)
[root@client ~]#

次に、/dataについては

[root@client ~]# beegfs-check-servers -p /data
Management
==========
ms.sybyl.local [ID: 1]: reachable at 192.168.0.47:28008 (protocol: TCP)
 
Metadata
==========
meta-inst2 [ID: 92]: reachable at 192.168.0.48:28005 (protocol: TCP)
 
Storage
==========
ss1-inst2 [ID: 12]: reachable at 192.168.0.49:28003 (protocol: TCP)
ss2-inst2 [ID: 22]: reachable at 192.168.0.50:28003 (protocol: TCP)
ss3-inst2 [ID: 32]: reachable at 192.168.0.51:28003 (protocol: TCP)
 
[root@client ~]#

と識別癌号とport番号で正しく分かれるようになっている。

他にも現行のストライプサイズを確認できる。

[root@client ~]# beegfs-ctl --getentryinfo /home --cfgFile=/etc/beegfs/inst1.d/beegfs-client.conf
EntryID: root
Metadata node: meta-inst1 [ID: 91]
Stripe pattern details:
+ Type: RAID0
+ Chunksize: 512K
+ Number of storage targets: desired: 4
+ Storage Pool: 1 (Default)
 
[root@client ~]# beegfs-ctl --getentryinfo /data --cfgFile=/etc/beegfs/inst2.d/beegfs-client.conf
EntryID: root
Metadata node: meta-inst1 [ID: 92]
Stripe pattern details:
+ Type: RAID0
+ Chunksize: 512K
+ Number of storage targets: desired: 4
+ Storage Pool: 1 (Default)
[root@client ~]#

ここで/data/movie_frames は ストレージは 3台で 4mのChunksizeにするなら

[root@client ~]# beegfs-ctl --setpattern --numtargets=3 --chunksize=4m /data/movie_frames --cfgFile=/etc/beegfs/inst2.d/beegfs-client.conf
New chunksize: 4194304
New number of storage targets: 3
 
[root@client ~]#

とします。確認は下記で行います。パスの指定が異なります。

[root@client ~]# beegfs-ctl --getentryinfo /data/movie_frames --cfgFile=/etc/beegfs/inst2.d/beegfs-client.conf
EntryID: 0-5C6113E3-5C
Metadata node: meta-inst2 [ID: 92]
Stripe pattern details:
+ Type: RAID0
+ Chunksize: 4M
+ Number of storage targets: desired: 3
+ Storage Pool: 1 (Default)
[root@client ~]#

fsckも用意されていて

[root@client ~]# beegfs-fsck --checkfs --cfgFile=/etc/beegfs/inst1.d/beegfs-client.conf

として使えるような

感想としては、非常に注意が必要な製作となる。
また既設単一インスタンスからそのまま複数インスタンスにするには無理ではなさそうだが、極めてハードルが高そうである。。

aclを有効にするには

既定では無理みたい metadataサーバにて

[root@mds ~]# vi /etc/beegfs/inst1.d/beegfs-meta.conf
 :
storeClientXAttrs            = true
storeClientACLs              = true
storeUseExtendedAttribs      = true
 :

としてmetadataのサービスを再起動します(systemctl restart beegfs-meta@inst1)
次に使用するクライアント側で

[root@client ~]# vi /etc/beegfs/inst1.d/beegfs-client.conf
 :
sysXAttrsEnabled              = true
sysACLsEnabled                = true
 :

その後にclientのサービスを再起動させます(systemctl restart beegfs-client@inst1)
これで inst1.d の範囲とした /home 以下は ACLが有効になる。


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2019-04-29 (月) 05:09:09 (49d)