分散ファイルシステムGfarmのインストールメモ

前提

インストール

基本的なモジュールはaptで入れることが可能である。

今回はバックエンドにPostgreSQLを使用する。

sudo apt-get install gfmd gfsd gfarm-client gfarm-doc gfarm2fs
sudo apt-get install postgresql python-psycopg2 libpq-dev

構築

メタデータサーバの構築

まずはメタデータサーバをインストールするserver1に、管理者として使いたいユーザでログインする。 ここでは、このユーザ名をmyuserとする。 また、認証方式としては共有鍵認証を使用する。

まずは -t オプションをつけてconfig-gfarmを実行し、設定内容を確認。

myuser@server1 $ sudo config-gfarm -A myuser -t
Error: No default cluster found
prefix                 [--prefix]:
metadata backend             [-b]: postgresql
(available backend: postgresql ldap)
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]:
postgresql XML supported     [-X]: no
postgresql data checksum support
                             [-E]: yes
metadata replication         [-r]: no
digest                       [-d]:
metaserver hostname          [-h]: server1
matadata admin user          [-A]: myuser
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
rc script for backend            : /etc/systemd/system/gfarm-pgsql.service
gfmd conf file                   : /etc/gfmd.conf
gfarm client conf file           : /etc/gfarm2.conf
gfmd pid file                    : /var/run/gfmd.pid
backend pid file                 : /var/run/postmaster.pid
WARNING: command not found: pg_ctl
WARNING: command not found: psql

pg_ctlとpsqlがないと怒られる。 二つのコマンドは /usr/lib/postgresql/10/bin/ にあるので、-PPostgreSQLのprefixとして指定してみる。

myuser@server1 $ sudo config-gfarm -A myuser -t -P /usr/lib/postgresql/10/bin/pg_ctl
prefix                 [--prefix]:
metadata backend             [-b]: postgresql
(available backend: postgresql ldap)
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/lib/postgresql/10/bin/pg_ctl
postgresql version           [-V]: unknown
postgresql XML supported     [-X]: no
postgresql data checksum support
                             [-E]: yes
metadata replication         [-r]: no
digest                       [-d]:
metaserver hostname          [-h]: server1
matadata admin user          [-A]: myuser
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
rc script for backend            : /etc/systemd/system/gfarm-pgsql.service
gfmd conf file                   : /etc/gfmd.conf
gfarm client conf file           : /etc/gfarm2.conf
gfmd pid file                    : /var/run/gfmd.pid
backend pid file                 : /var/run/postmaster.pid
WARNING: PostgreSQL version 7.4 or later required: unknown
WARNING: command not found: pg_config
WARNING: command not found: pg_ctl
WARNING: command not found: psql

今度は、pg_config, pg_ctl, psqlがないと怒られてしまう。

これらの実行コマンドは、/usr/bin/ に存在するものの、 /usr/lib/postgresql/10/bin/ には存在しない。

これの解決には悩まされたのだが、-V 10 としてPostgreSQLのバージョンを指定してやると、両方のパスを探索してくれるようだ。 実際に実行するコマンドは -t を取って以下のようになる。

myuser@server1 $ sudo config-gfarm -A myuser -V 10

これでメタデータサーバがserver1で起動する。確認は以下のコマンドで行える。

myuser@server1 $ sudo systemctl status gfmd.service

_gfarmfsユーザが存在することを確認した後、共通鍵を生成する。 gfkeyの -p オプションで共通鍵の期限を設定できるが、ここではその期限を1年間とする。

myuser@server1 $ cat /etc/passwd | grep _gfarmfs
_gfarmfs:x:129:134::/var/lib/gfarmfs:/usr/sbin/nologin
myuser@server1 $ vim /etc/passwd

<< _gfarmfs:x:129:134::/var/lib/gfarmfs:/usr/sbin/nologin
>> _gfarmfs:x:129:134::/var/lib/gfarmfs:/bin/bash

myuser@server1 $ sudo su _gfarmfs
_gfarmfs@server1 $ cd /var/lib/gfarmfs
_gfarmfs@server1 $ gfkey -f -p 31536000

.gfarm_shared_keyが新しくできていることを確認する。

_gfarmfs@server1 $ ls -la | grep .gfarm_shared_key
-rw-------  1 _gfarmfs _gfarmfs   74 Aug 24 22:30 .gfarm_shared_key

ファイルシステムノードの構築

まずは、共通鍵をserver1, server2のmyuserのホームにコピーする。

myuser@server1 $ sudo cp /var/lib/gfarmfs/.gfarm_shared_key /home/myuser/
myuser@server1 $ scp /var/lib/gfarmfs/.gfarm_shared_key server2:/home/myuser/

ファイルシステムノードの設定と開始は次のようにしてできる。

myuser@server1 $ sudo config-gfsd -h server1 /var/gfarm
created /var/gfarm
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-ubuntu18.04-linux -p 600 -n 272 server1

After that, start gfsd by the following command as a root:

systemctl start gfsd.service
myuser@server2 $ sudo config-gfsd -h server2 /var/gfarm
created /var/gfarm
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-ubuntu18.04-linux -p 600 -n 272 server1

After that, start gfsd by the following command as a root:

systemctl start gfsd.service

次は言われた通りに、メタデータサーバのserver1で次のコマンドを実行して、メタデータサーバにファイルシステムノードを登録。

myuser@server1 $ /usr/bin/gfhost -c -a x86_64-ubuntu18.04-linux -p 600 -n 272 server1
myuser@server1 $ /usr/bin/gfhost -c -a x86_64-ubuntu18.04-linux -p 600 -n 272 server2

それぞれのサーバで、ファイルシステムノードを開始。

myuser@server1 $ sudo systemctl start gfsd.service
myuser@server2 $ sudo systemctl start gfsd.service

実際にファイルシステムノードが動いているかどうかはgfhostで確認できる。

myuser@server1 $ gfhost -lv
0.00/0.01/0.00 s x86_64-ubuntu18.04-linux 272 server1 600 0(SERVER1_IP_ADDR)
0.00/0.01/0.00 s x86_64-ubuntu18.04-linux 272 server2 600 0(SERVER2_IP_ADDR)

クライアントノードの構築

メタノードサーバで生成された /etc/gfarm2.conf ファイルを /etc にコピーするだけで終わり。 (scpでやると権限で引っかかりやや面倒なので、直接コピペするのが楽かもしれない。NFSを使っても良い。)

動作確認

server1, server2で、gfarm2fsでGfarmファイルシステムをマウントすることで、通常のローカルのファイルと同じように操作できる。

myuser@server1 $ mkdir gfarm-mnt
myuser@server1 $ gfarm2fs gfarm-mnt

myuser@server2 $ mkdir gfarm-mnt
myuser@server2 $ gfarm2fs gfarm-mnt

myuser@server1 $ echo "Hello" > gfarm-mnt/hello
myuser@server2 $ cat gfarm-mnt/hello
Hello

# アンマウント
myuser@server1 $ fusermount -u gfarm-mnt
myuser@server1 $ fusermount -u gfarm-mnt

参考資料