本家様 http://oss-tsukuba.org/software/gfarm
複数のストレージノードを1つのストレージボリュームにしたてられる分散ファイルシステム
ここではメタデータ、ファイルシステム、クライアントの3つをそれぞれ別々に用意してみた
gfarm管理用アカウントの統一のためにnisを敷いてます. 参照NIS
役割 | ホスト名 | OS | ネットワーク | SELinux | disk | nis | firewall(Gfarmのみ提示) |
メタデータ | gfarm-meta | CentOS7.9 | 192.168.0.141 | 無効とします | sda(16GB) | master | 601/tcp |
ファイルシステム | gfarm1 gfarm2 | 192.168.0.139 192.168.0.140 | sda(16GB),sdb(64GB) | client | 600/tcp 600/udp | ||
クライアント | client | 192.168.0.18 | sda(16GB) | client |
nisにて管理アカウント「gfarm_admin」を作成しておきます.
[root@gfarm-meta ~]# useradd -m -d /home/gfarm_admin gfarm_admin
[root@gfarm-meta ~]# ( cd /var/yp ; make )
各ノードでコンパイルしてもいいのですが、OSが同じならrpmを作って配布した方が楽.
ここでは メタデータ ノードでrpmファイルを作ります.
[root@gfarm-meta ~]# yum -y groupinstall "Development Tools"
[root@gfarm-meta ~]# yum -y install openssl-devel openldap-devel postgresql-devel wget postgresql-server
インストール手順書に従いリリースされている sprm を取得します. 場所はここhttps://github.com/oss-tsukuba/gfarm/releases/tag/2.7.19
[root@gfarm-meta ~]# wget https://github.com/oss-tsukuba/gfarm/releases/download/2.7.19/gfarm-2.7.19-1.src.rpm
GSI認証が必要なら云々とあるが、そのそもGSI認証って何?な方なのでそのままでrpmを作ることにします 大規模広範囲なら便利な要素満載なのでしょうけど、小規模利用、お試しレベルなら不要ではと
[root@gfarm-meta ~]# rpmbuild --rebuild gfarm-2.7.19-1.src.rpm
(rebuild完了後)
[root@gfarm-meta ~]# ls -l rpmbuild/RPMS/x86_64/
total 4428
-rw-r--r-- 1 root root 315820 Jan 29 22:31 gfarm-client-2.7.19-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 2565364 Jan 29 22:31 gfarm-debuginfo-2.7.19-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 290524 Jan 29 22:31 gfarm-devel-2.7.19-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 623388 Jan 29 22:31 gfarm-doc-2.7.19-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 88180 Jan 29 22:31 gfarm-fsnode-2.7.19-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 17640 Jan 29 22:31 gfarm-ganglia-2.7.19-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 247956 Jan 29 22:31 gfarm-libs-2.7.19-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 366324 Jan 29 22:31 gfarm-server-2.7.19-1.el7.x86_64.rpm
[root@gfarm-meta ~]#
作られたrpmは、下記のように割り当てる
役割 | rpmファイル |
メタデータ | gfarm-server、gfarm-libs |
ファイルシステム | gfarm-fsnode、gfarm-libs、gfarm-client、gfarm-doc |
クライアント | gfarm-client、gfarm-libs、gfarm-doc |
まずは メタデータ ノードを構築します
っでgfarm-serverとgfarm-libsをインストールします
[root@gfarm-meta ~]# yum localinstall rpmbuild/RPMS/x86_64/gfarm-server-2.7.19-1.el7.x86_64.rpm \
rpmbuild/RPMS/x86_64/gfarm-libs-2.7.19-1.el7.x86_64.rpm rpmbuild/RPMS/x86_64/gfarm-client-2.7.19-1.el7.x86_64.rpm
*gfarm-clientは、gfkeyでカギを作るために
っで設定を行います. 冒頭でnisで作った管理アカウント gfarm_admin を指定します. まずは確認.
[root@gfarm-meta ~]# id gfarm_admin
uid=1001(gfarm_admin) gid=1001(gfarm_admin) groups=1001(gfarm_admin)
[root@gfarm-meta ~]# getenforce
Disabled
[root@gfarm-meta ~]# config-gfarm -A gfarm_admin -t
prefix [--prefix]:
confdir [--confdir]: /etc
metadata backend [-b]: postgresql
(available backend: postgresql ldap none)
metadata directory [-l]: /var/gfarm-pgsql
metadata log directory [-L]: /var/gfarm-pgsql/pg_xlog
postgresql admin user [-U]: postgres
postgresql admin password [-W]: (auto generated)
postgresql user [-u]: gfarm
postgresql password [-w]: (auto generated)
postgresql prefix [-P]: /usr
postgresql version [-V]: 9.2
postgresql XML supported [-X]: no
postgresql data checksum support
[-E]: no
metadata replication [-r]: no
digest [-d]:
metaserver hostname [-h]: gfarm-meta.sybyl.local
matadata admin user [-A]: gfarm_admin
matadata admin dn [-D]:
portmaster port [-p]: 10602
gfmd port [-m]: 601
auth type [-a]: sharedsecret
rc script for gfmd : /etc/systemd/system/gfmd.service
gfmd conf file : /etc/gfmd.conf
gfmd failover conf file : /etc/gfmd.failover.conf
gfmd failover agent conf file : /etc/gfmd.failover.agent.conf
gfarm client conf file : /etc/gfarm2.conf
gfmd pid file : /var/run/gfmd.pid
rc script for backend : /etc/systemd/system/gfarm-pgsql.service
backend pid file : /var/run/postmaster.pid
[root@gfarm-meta ~]#
特段のエラー、警告がないのでそのまま「-t」を外して実行すれば設定が行われる。
もし特定部分を修正したいのなら、まずは「-t」をつけたまま各フラグを修正する. もし「confdir」を変えたいのなら
[root@gfarm-meta ~]# config-gfarm -A gfarm_admin -t --confdir /opt
prefix [--prefix]:
confdir [--confdir]: /opt
:
と「--confdir」を付けて修正を試みる。そのうえで「--confdir」を付けたまま「-t」のみを外して実行すれば反映される。ここでは初期状態でいいので、
[root@gfarm-meta ~]# config-gfarm -A gfarm_admin
created /var/gfarm-pgsql
created /etc/gfarm2.conf
created /etc/gfmd.conf
created /etc/gfmd.failover.conf
created /etc/gfmd.failover.agent.conf
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with locale "C".
The default text search configuration will be set to "english".
fixing permissions on existing directory /var/gfarm-pgsql ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 32MB
creating configuration files ... ok
creating template1 database in /var/gfarm-pgsql/base/1 ... ok
initializing pg_authid ... ok
initializing dependencies ... ok
creating system views ... ok
loading system objects' descriptions ... ok
creating collations ... ok
creating conversions ... ok
creating dictionaries ... ok
setting privileges on built-in objects ... ok
creating information schema ... ok
loading PL/pgSQL server-side language ... ok
vacuuming database template1 ... ok
copying template1 to template0 ... ok
copying template1 to postgres ... ok
WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:
/usr/bin/postgres -D /var/gfarm-pgsql
or
/usr/bin/pg_ctl -D /var/gfarm-pgsql -l logfile start
created /etc/systemd/system/gfarm-pgsql.service
created /etc/systemd/system/gfmd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/gfarm-pgsql.service to /etc/systemd/system/gfarm-pgsql.service.
enabled gfarm-pgsql.service
Created symlink from /etc/systemd/system/multi-user.target.wants/gfmd.service to /etc/systemd/system/gfmd.service.
enabled gfmd.service
created /etc/unconfig-gfarm.sh
config-gfarm success
[root@gfarm-meta ~]#
SELinuxを無効にしないとここらでgfarm向けのpostgreSQLが動きません
ここでserviceが追加されたようで、「gfarm-pgsql.service」と「gfmd.service」の2つ
[root@gfarm-meta ~]# systemctl list-unit-files
:
gfarm-pgsql.service enabled
gfmd.service enabled
:
そしてgfarm向けのpostgreSQLも稼働. ポート番号はconfig-gfarmで提示された既定の 10602. 加えて gfmdがrootで稼働.
[root@gfarm-meta ~]# ps -ef |grep gfarm
postgres 7564 1 0 22:42 ? 00:00:00 /usr/bin/postgres -D /var/gfarm-pgsql -p 10602
postgres 7599 7564 0 22:42 ? 00:00:00 postgres: gfarm gfarm 192.168.0.141(42118) idle
[root@gfarm-meta ~]# ps -ef |grep gfmd
root 7600 1 0 22:42 ? 00:00:00 /usr/sbin/gfmd -P /var/run/gfmd.pid -f /etc/gfmd.conf
[root@gfarm-meta ~]#
別に管理アカウント「gfarm_admin」でプロセスが動いているわけではないみたい
この一連の設定操作で新しいユーザ _gfarmfs が/etc/passwdに追加される. ご丁寧に /home/_gfarmfs とホームディレクトリまで作ってくれる.
だが、このホームディレクトリは /etc/skel のコピーで用意され gfarm に関するファイルらはないみたい
*ここでは gfarm-meta がnisマスターであるので不要なのだが、もし別にnisマスターを構えているならそのnisマスター側でuid/gidを別途調整する必要があります.
大事なのはアカウント名のみ?
この追加された_gfarmfsをnisを経て伝播させます
[root@gfarm-meta ~]# grep _gfarmfs /etc/passwd
_gfarmfs:x:1002:1002:Gfarm gfsd:/home/_gfarmfs:/bin/bash
[root@gfarm-meta ~]# grep _gfarmfs /etc/group
_gfarmfs:x:1002:
[root@gfarm-meta ~]# ( cd /var/yp ; make )
次に su コマンドで _gfarmfs ユーザに成り代わり「共通鍵」を作る. 「-p」は鍵の寿命を定義するようで「31536000」は、60(秒)*60(分)*24(時)*365(日)の値
[root@gfarm-meta ~]# su - _gfarmfs
[_gfarmfs@gfarm-meta ~]$ ls -a
. .. .bash_logout .bash_profile .bashrc
[_gfarmfs@gfarm-meta ~]$ gfkey --help
gfkey: invalid option -- '-'
Usage: gfkey [-c|-f] [-p <period>] [-L <message-priority-level>]
gfkey [-l|-e] [-L <message-priority-level>]
option:
-c create a new key when there is no valid key
-f force to create a new key
-p <period> specify term of validity in second
-l display the current key
-e report the expiration time
-L <message-priority-level> message priority level
-V display version information
[_gfarmfs@gfarm-meta ~]$ gfkey -f -p 31536000
[_gfarmfs@gfarm-meta ~]$ ls -a
. .. .bash_history .bash_logout .bash_profile .bashrc .gfarm_shared_key
[_gfarmfs@gfarm-meta ~]$ cat .gfarm_shared_key
63d67bb2 293477d7e7c957f91dce1beb919a402a5fc3b631ba02d7efc8ea84c2b0c824b9
[_gfarmfs@gfarm-meta ~]$
「共通鍵」なるファイルは単なる文字列. この作った共通鍵「/home/_gfarmfs/.gfarm_shared_key」は各ファイルシステムノードに渡すことになる
っが、nis with nfsで共有されていればそのままでもいいかもね.
メタデータ ノードで作ったrpmファイルをファイルシステム ノードに配布します
[root@gfarm-meta ~]# cd rpmbuild/RPMS/x86_64/
[root@gfarm-meta x86_64]# scp gfarm-fsnode-2.7.19-1.el7.x86_64.rpm gfarm-libs-2.7.19-1.el7.x86_64.rpm \
gfarm-client-2.7.19-1.el7.x86_64.rpm gfarm-doc-2.7.19-1.el7.x86_64.rpm root@gfarm1:
[root@gfarm-meta x86_64]# scp gfarm-fsnode-2.7.19-1.el7.x86_64.rpm gfarm-libs-2.7.19-1.el7.x86_64.rpm \
gfarm-client-2.7.19-1.el7.x86_64.rpm gfarm-doc-2.7.19-1.el7.x86_64.rpm root@gfarm2:
そしてそれらをインストールします
[root@gfarm1 ~]# yum localinstall gfarm-fsnode-2.7.19-1.el7.x86_64.rpm gfarm-libs-2.7.19-1.el7.x86_64.rpm \
gfarm-client-2.7.19-1.el7.x86_64.rpm gfarm-doc-2.7.19-1.el7.x86_64.rpm
gfarm2も同様
この段階でアカウント「_gfarmfs」が作られるのですが、すでにnis共有された「_gfarmfs」があるので作られない.
&sie(10){加えてnisにより「/home/_gfarmfs/.gfarm_shared_key」を各ファイルシステムノードにコピーする必要はない};
パッケージのインストール途中で
:
Installing : gfarm-fsnode-2.7.19-1.el7.x86_64 30/31
copy /etc/gfarm2.conf from a metadata server and
run /usr/bin/config-gfsd
Installing : gfarm-doc-2.7.19-1.el7.x86_64 31/31
:
が表示される. どうやらgfarm-metaの「/etc/gfarm2.conf」がファイルシステムノードへコピーされるのが必要みたい.
中身はこんな感じ.
[root@gfarm-meta ~]# cat /etc/gfarm2.conf
metadb_server_host gfarm-meta.sybyl.local
metadb_server_port 601
auth enable sharedsecret *
sockopt keepalive
[root@gfarm-meta ~]# scp /etc/gfarm2.conf root@gfarm1:/etc/gfarm2.conf
[root@gfarm-meta ~]# scp /etc/gfarm2.conf root@gfarm2:/etc/gfarm2.conf
次にconfig-gfsdを使ってgfarmに供出する領域を定義します。ここでは新たな領域/dev/sdb1(/gfarm1-1,xfs)を丸ごと供出してみた
ブロックデバイスではなく、ファイルシステムを使うみたい. パーティションの必要性は不明
[root@gfarm1 ~]# df -lTh /gfarm1-1
Filesystem Type Size Used Avail Use% Mounted on
/dev/sdb1 xfs 64G 33M 64G 1% /gfarm1-1
[root@gfarm1 ~]# config-gfsd -t /gfarm1-1 <-- まずは「-t」で設定確認
prefix [--prefix]:
confdir [--confdir]: /etc
hostname [-h]: gfarm1.sybyl.local
listen address [-l]: (all local IP addresses)
architecture [-a]: x86_64-centos7.9.2009-linux
port [-p]: 600
ncpu [-n]: 1
spool directory : /gfarm1-1
rc script : /etc/systemd/system/gfsd.service
gfarm client conf file : /etc/gfarm2.conf
gfsd pid file : /var/run/gfsd.pid
[root@gfarm1 ~]#
っで内容に問題がないのなら「-t」を外して実行します
[root@gfarm1 ~]# config-gfsd /gfarm1-1
created /etc/systemd/system/gfsd.service
created /etc/unconfig-gfsd.sh
config-gfsd success
Please ask admin_user to register your host by the following command:
/usr/bin/gfhost -c -a x86_64-centos7.9.2009-linux -p 600 -n 1 gfarm1.sybyl.local
After that, start gfsd by the following command as a root:
systemctl start gfsd.service
[root@gfarm1 ~]#
うまくいったみたい。gfarm2でも同じように実施
そして、その文面に書かれているようにメタデータ ノードにて管理アカウント「gfarm_admin」になって「こいつがファイルサーバ ノード」って登録します
[root@gfarm-meta ~]# su - gfarm_admin
[gfarm_admin@gfarm-meta ~]$ /usr/bin/gfhost -c -a x86_64-centos7.9.2009-linux -p 600 -n 1 gfarm1.sybyl.local
[gfarm_admin@gfarm-meta ~]$ /usr/bin/gfhost -c -a x86_64-centos7.9.2009-linux -p 600 -n 1 gfarm2.sybyl.local
その後にファイルシステムノードにてデーモンを起動します
[root@gfarm1 ~]# systemctl start gfsd
[root@gfarm2 ~]# systemctl start gfsd
これで一応完成みたい.
libgfarm: <err> [1000059] cannot connect to gfmd at root gfarm-meta.sybyl.local:601, give up: authentication error
metadata server `gfarm-meta.sybyl.local', port 601: authentication error
とエラー表示されたらそれはfirewallの穴がないこと.
っで大事なのがここから. 使えなくては意味がない.
メタデータ ノードで作った「gfarm-client」は作ったGfarmファイルシステムにアクセスはできるけど、正直面倒なコマンド.
いつも使っているコマンドをそのまま使いたいので「Gfarm2fs」を用意します
既に メタデータ ノードで開発環境らを整備しているので、そこで作る
[root@gfarm-meta ~]# wget https://github.com/oss-tsukuba/gfarm2fs/releases/download/1.2.15/gfarm2fs-1.2.15-1.src.rpm
[root@gfarm-meta ~]# rpmbuild --rebuild gfarm2fs-1.2.15-1.src.rpm
[root@gfarm-meta ~]# yum install fuse-devel libacl-devel
[root@gfarm-meta ~]# yum localinstall rpmbuild/RPMS/x86_64/gfarm-devel-2.7.19-1.el7.x86_64.rpm
できたrpmをクライアントに渡す. またファイルシステム ノードと同じように /etc/gfarm2.conf も渡します
[root@gfarm-meta ~]# cd rpmbuild/RPMS/x86_64/
[root@gfarm-meta x86_64]# scp gfarm-client-2.7.19-1.el7.x86_64.rpm gfarm-libs-2.7.19-1.el7.x86_64.rpm gfarm-doc-2.7.19-1.el7.x86_64.rpm \
gfarm2fs-1.2.15-1.el7.x86_64.rpm root@client:
[root@gfarm-meta x86_64]#
受け取ったclientで、それらを適用する
[root@client ~]# yum localinstall gfarm-client-2.7.19-1.el7.x86_64.rpm gfarm-libs-2.7.19-1.el7.x86_64.rpm gfarm-doc-2.7.19-1.el7.x86_64.rpm \
gfarm2fs-1.2.15-1.el7.x86_64.rpm
レイアウトを考える.
Gfarmで用意されたストレージボリュームを /gfarm に置くとする. そして「/gfarm/people/<ユーザ>」な感じでユーザが使える場所を用意する.
このようなフォルダ操作はgfarm管理用アカウント「gfarm_admin」で行う.
[root@client ~]# su - gfarm_admin
[gfarm_admin@client ~]$
「gfls」はlsと同じ. ただその出力はGfarmで用意されたストレージボリュームを直接見ています. なので初期状態はなにもない
[gfarm_admin@client ~]$ gfls -a
. ..
[gfarm_admin@client ~]$ gfls -l
[gfarm_admin@client ~]$ gfls -rt
[gfarm_admin@client ~]$ gfls -CF
ここで「people」フォルダを作ってみる
[gfarm_admin@client ~]$ gfmkdir /people
[gfarm_admin@client ~]$ gfls -l /
drwxr-xr-x 2 gfarm_admin gfarmadm 0 Jan 30 00:03 people
[gfarm_admin@client ~]$
と新しいフォルダ /people が用意される。でもこれは異世界いやGfarmの中での話で、現実のファイルシステムには用意されない
[gfarm_admin@client ~]$ ls
[gfarm_admin@client ~]$ ls /people
ls: cannot access /people: No such file or directory
[gfarm_admin@client ~]$
次にこのGfarm内の/people配下にユーザのフォルダを用意してみる
[gfarm_admin@client ~]$ gfmkdir /people/{illya,saber}
[gfarm_admin@client ~]$ gfls -l /
drwxr-xr-x 4 gfarm_admin gfarmadm 0 Jan 30 00:08 people
[gfarm_admin@client ~]$ gfls -l /people
drwxr-xr-x 2 gfarm_admin gfarmadm 0 Jan 30 00:08 illya
drwxr-xr-x 2 gfarm_admin gfarmadm 0 Jan 30 00:08 saber
[gfarm_admin@client ~]$
作ったフォルダの所有権を与える. それには異世界の住人にさせる必要がある
[gfarm_admin@client ~]$ gfuser -c illya illya /home/illya ""
(住人のリスト)
[gfarm_admin@client ~]$ gfuser -l
gfarmadm:Gfarm administrator:/:
illya:illya:/home/illya:
gfarm_admin:Gfarm administrator:/:
(作ったフォルダに所有権を与える)
[gfarm_admin@client ~]$ gfchown illya /people/illya
gfchown: illya: operation not permitted <--- adminなのですが、だめみたい
[gfarm_admin@client ~]$
[gfarm_admin@client ~]$ gfsudo gfchown illya /people/illya
[gfarm_admin@client ~]$ gfls -ld /people/illya
drwxr-xr-x 2 illya gfarmadm 0 Jan 30 00:08 /people/illya <--所有権変更はできたけどGPOUPが、、
[gfarm_admin@client ~]$
[gfarm_admin@client ~]$ gfgroup -c fgo illya <-- Gfarm内で有効のgroup fgo を作成してillyaをメンバーに
[gfarm_admin@client ~]$ gfsudo gfchgrp fgo /people/illya
[gfarm_admin@client ~]$ gfls -ld /people/illya
drwxr-xr-x 2 illya fgo 0 Jan 30 00:08 /people/illya
[gfarm_admin@client ~]$
これで一応準備完了
次にユーザでGfarmを利用してみます. gfarm2fsを使います. 便利なので.
まずは一連のGfarmストレージボリュームをマウントする場所を用意します. 権限とか面倒なので自分のホームディレクトリーに作ります
[illya@client ~]$ mkdir gfarm
[illya@client ~]$ ls -l
total 0
drwxrwxr-x 2 illya illya 6 Jan 30 00:23 gfarm
[illya@client ~]$
っでこの「$HOME/gfarm」をGfarmに繋げます
[illya@client ~]$ gfarm2fs gfarm/
[illya@client ~]$ df -T gfarm
Filesystem Type 1K-blocks Used Available Use% Mounted on
gfarm2fs fuse.gfarm2fs 134150152 65984 134084168 1% /home/illya/gfarm
[illya@client ~]$
外すには
[illya@client ~]$ fusermount -u /home/illya/gfarm
とします.
使ってみます.
[illya@client ~]$ gfarm2fs gfarm/
[illya@client ~]$ ls -ld gfarm/people/illya/
drwxr-xr-x 2 illya 70001 0 Jan 30 00:08 gfarm/people/illya/
[illya@client ~]$ gfls -ld gfarm/people/illya/
drwxr-xr-x 2 illya fgo 0 Jan 30 00:08 gfarm://gfarm-meta.sybyl.local:601/people/illya
[illya@client ~]$
異世界では表記が違ってます.
[illya@client ~]$ cd gfarm/people/illya/
[illya@client illya]$ wget ftp://ftp.gwdg.de/pub/misc/sphire/crYOLO-GENERAL-MODELS/gmodel_phosnet_202005_N63_c17.h5
[illya@client illya]$ ls -lh
total 194M
-rw-r--r-- 1 illya 70001 194M Jan 30 00:35 gmodel_phosnet_202005_N63_c17.h5
[illya@client illya]$
[gfarm_admin@gfarm-meta ~]$ gfhost -lv
0.08/0.07/0.05 s x86_64-centos7.9.2009-linux 1 gfarm1.sybyl.local 600 0(192.168.0.139)
0.57/0.16/0.08 s x86_64-centos7.9.2009-linux 1 gfarm2.sybyl.local 600 0(192.168.0.140)
[gfarm_admin@gfarm-meta ~]$