分散ファイルシステムGfarmのインストールメモ
前提
- Ubuntu 18.04
- server1とserver2は同じネットワーク上にあるとする
- server1でメタデータサーバ、ファイルシステムノード、クライアントノードを動作
- server2でファイルシステムノード、クライアントノードを動作
インストール
基本的なモジュールは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/
にあるので、-P
でPostgreSQLの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