Gfarm FAQ - Gfarm に関するよくある質問

Copyright (c) 2003-2008 National Institute of Advanced Industrial
Science and Technology (AIST).  All Rights Reserved.

Copyright (c) 2006-2017 Osamu Tatebe.  All Rights Reserved.

目次:
*****
1. 一般
  1.1 Gfarm とは何ですか？
  1.2 Gfarm はどこからダウンロードできますか？
  1.3 gfmd は，どの程度のメモリを消費しますか？
  1.4 gfmd を実行するマシンは，どの程度のディスク消費しますか？
  1.5 gfmd が利用するディスクリプタ数はどの程度を想定すべきですか？

2. トラブル・シューティング
  2.1 ファイルシステムノード，メタサーバに接続できません．
  2.2 ファイルアクセス時，ファイル複製作成時などに認証エラーが
     起きてしまいます．あるいは，no filesystem node というエラーが発生
     してしまいます．
  2.3 ファイルシステムノードのディスクがクラッシュしてしまいました．ど
     うすればいいでしょうか？
  2.4 無通信状態で止まっている gfarm クライアントや gfsd が残ることが
     あるのですが？
  2.5 ファイルの更新時刻がおかしいようです．
  2.6 gfmd や gfsd が異常終了した際，どうすればコアファイルを回収
      できますか？
  2.7 InfiniBand があるのにRDMAができません．

3. セキュリティ
  3.1 Gfarm は firewall に守られていない環境で安全に運用できますか？
  3.2 sharedsecret 認証，gsi_auth 手法，gsi 認証の違いは？

4. 制限事項
  4.1 以下の機能はまだ部分的にしかサポートされていません．
  4.2 Gfarm-1.xでサポートされていた以下の機能はまだサポートされていま
     せん．
  4.3 Gfarm-1.xでサポートされていた以下の機能はサポートされる予定はあ
    りません．


1. 一般
**********
  1.1 Gfarm とは何ですか？

	下記の URL をご覧ください．

		http://oss-tsukuba.org/software/gfarm

  1.2 Gfarm はどこからダウンロードできますか？

	下記の URL から配布されています．

		https://github.com/oss-tsukuba/gfarm/releases/

	なお，最新のソースコードは以下のコマンドで入手できます．
	Gfarm 2.7系
		$ git clone -b 2.7 https://github.com/oss-tsukuba/gfarm.git
	開発版
		$ git clone https://github.com/oss-tsukuba/gfarm.git
	Gfarm2fs
		$ git clone https://github.com/oss-tsukuba/gfarm2fs.git

  1.3 gfmd は，どの程度のメモリを消費しますか？

	64bit Linux マシン上で Gfarm-2.5.1 を利用する場合，おおよその
	見積りは以下の通りとなります．ただし，
		OH (オーバーヘッド) = 8 バイト
		align() = 16の倍数に切り上げ．結果が32未満なら32に切り上げ．
	とします．

	(a) 拡張属性 (xattr) 1つあたりに必要なバイト数:
		  align(64 + OH) ＋ align(拡張属性の名称の長さ + 1 + OH)
		= 80 + align(拡張属性の名称の長さ + 1 + OH)

	(i) i-node 1つあたりに必要なバイト数:
		  align(168 + OH)
		= 176

	(e) ディレクトリ・エントリ1つあたりに必要なバイト数:
		  align(56 + OH) + align(strlen(basename(パス名)) + OH)
		= 64 + align(strlen(basename(パス名)) + OH)

	(r) ファイル複製 1つあたりに必要なバイト数:
		  align(24 + OH)
		= 32

	拡張属性の数が十分少ない場合，ファイル・ディレクトリ・シンボリック
	リンクそれぞれに必要なバイト数は，以下の通りとなります．

	(d) ディレクトリ 1つあたりに必要なバイト数:
		  (i) + (e) 
		  + align(56 + OH) + align(strlen(".") + OH)
		  + align(56 + OH) + align(strlen("..") + OH)
		= 176 + 64 + align(strlen(basename(パス名)) + OH)
		  + 64 + 32 + 64 + 32
		= 432 + align(strlen(basename(パス名)) + OH)

	(s) シンボリックリンク 1つあたりに必要なバイト数:
		  (i) + (e) + align(strlen(シンボリックリンクの指す先)+1 + OH)
		= 176 + 64 + align(strlen(basename(パス名)) + OH)
		  + align(strlen(シンボリックリンクの指す先)+1 + OH)
		= 240 + align(strlen(basename(パス名)) + OH)
		  + align(strlen(シンボリックリンクの指す先)+1 + OH)

	(f) ファイル 1つあたりのバイト数に必要なバイト数:
		(i) + (e) + (r) × 複製数
		= 176 + 64 + align(strlen(basename(パス名)) + OH)
		  + 32 × 複製数
		= 240 + align(strlen(basename(パス名)) + OH) + 32 × 複製数

	さらに，仮に，パス名の最後のコンポーネント部の長さが 14文字程度，
	ファイルの複製数が3，シンボリックリンクの指す先が55文字と仮定して，
	上記を計算すると，以下のようになります．

	(d) ディレクトリ1つあたり: 432バイト
	(s) シンボリック・リンク1つあたり: 336バイト
	(f) ファイル1つあたり: 368バイト

  1.4 gfmd を実行するマシンは，どの程度のディスク消費しますか？

	gfmd の必要メモリ量の数倍程度です．

  1.5 gfmd が利用するディスクリプタ数はどの程度を想定すべきですか？

	この値は，gfmd.conf の metadb_server_max_descriptors で指定します．

	設定する値の計算方法は以下の通りです．
	    Nm: メタデータサーバ数の想定最大値
	    Nf: ファイルシステムノード数の想定最大値
	    Nc: 同時利用クライアント・プロセス数の想定最大値
	とすると，下記の値以上に設定しておく必要があります．
	    (Nm - 1) * 2 + Nf * (Nf + 1) + Nc * (Nf + 1) + 若干数

	gfmd 起動時に，システムのログ (/var/log/messages など) に
	以下のように表示されますので，確認してみてください．
	    gfmd[〜]: 〜 max descriptors = 131072
	ここで表示された値が metadb_server_max_descriptors で指定した値
	よりも小さい場合は，OS の hard limit 設定により制限を受けています．
	hard limit 設定を増やすには，以下のようにします．
	Linux の場合:
	    Linux の場合は，hard limit 設定による制限ではなく，Gfarm が
	    sysctl fs.file-max 設定の 75% 未満となるよう制限しています．
	    このため gfmd.conf の「metadb_server_max_descriptors 131072」
	    という設定を実際に有効にするには，ファイル /etc/sysctl.conf に
	    「fs.file-max=180224」といった設定入れた後，リブートするか，
	    あるいはコマンド「/sbin/sysctl -p」を実行します．
	NetBSD の場合:
	    ファイル /etc/sysctl.conf に「kern.maxfiles=180224」といった
	    設定を行ない，リブートするか，あるいはコマンド
	    「/sbin/sysctl -f /etc/sysctl.conf」を実行します．
	FreeBSD の場合:
	    ファイル /etc/sysctl.conf に以下のような設定を行ない，
		kern.maxfiles=180224
		kern.maxfilesperproc=131072
	    リブートするか，あるいはコマンド
	    「/sbin/sysctl -f /etc/sysctl.conf」を実行します．
	Solaris の場合:
	    ファイル /etc/system に「set rlim_fd_max = 131072」といった
	    設定を行ない，リブートします．
	
	なお，Linux 上では，パラメータ net.netfilter.nf_conntrack_max の
	設定状況にも注意してください．
	このパラメータは通常は存在しませんが，iptables 等の機能を利用して
	いる場合は，起動時に /var/log/messages 等に以下のようなメッセージが
	記録され，パラメータが動的に追加されます．
		kernel: nf_conntrack version 0.5.0 (16384 buckets, 65536 max)
	また，この設定にネットワーク通信が制限されている状況では，以下の
	ようなメッセージが記録されます．
		kernel: nf_conntrack: table full, dropping packet.
	このような状況下では，/etc/sysctl.conf に例えば以下のような設定を
	追加するなどして，制限を緩和する必要があります．
		net.netfilter.nf_conntrack_max=131072
	なお，このように負荷のかかる状況で，メタデータサーバ自身で
	iptables を動かすことは推奨できません．別途ファイアウォールを
	用意することをお勧めします．
	
	参考:

	計算式の各項の意味は，以下の通りです．

	    (Nm - 1) * 2 =
		gfmd 間接続の数:(Nm - 1) *
		(ネットワーク接続用ディスクリプタ:1 +
		 ジャーナルファイルをアクセスするためのディスクリプタ:1)

	    Nf * (Nf + 1) =
		Nf * ( 各 gfsd のルートプロセス:1 +
		       バックチャネル処理プロセス:1 +
		       自動複製処理用gfsdプロセス数:(Nf - 1) )

	    Nc * (Nf + 1) =
		Nc * (クライアントとgfmdの間のソケット用:1 +
		      クライアント対応用gfsdとgfmdの間の接続:Nf )

	   若干 = backend データベース接続や，
		ジャーナルファイルアクセス用のファイルディスクリプタ 

	このうち，「クライアント対応用gfsdとgfmdの間の接続」の分は，
	実際にはもっと小さくなる可能性もあります．しかし同時に多数の
	Gfarmファイルをオープンしている場合は，最大で Nf まで達する可能性も
	あります．あるいは，もし同時オープン数が Nf より少ない場合でも
	gfsd_connection_cache パラメータを設定している場合は，
	min(Nf, gfsd_connection_cache) まで達します．

	gfmd は，descriptor 1つあたり，約320バイトのメモリを消費します．


2. トラブル・シューティング
*******************
  2.1 ファイルシステムノード，メタサーバに接続できません．

	デフォルトの設定では，ファイルシステムノードは 600/tcp と
	600/udp を利用し，メタサーバノードは 601/tcp を利用します．

	特に 'gfhost -lv' で，'x.xx/x.xx/x.xx' と表示されるファイルシス
	テムノードは，600/udp での接続に失敗しています．

	デフォルトのポート番号は，config-gfarm，config-gfsd のオプ
	ションで変更することができます．詳細はインストールガイドを参照
	してください．

  2.2 ファイルアクセス時，ファイル複製作成時などに認証エラーが
     起きてしまいます．あるいは，no filesystem node というエラーが発生
     してしまいます．

	ファイルシステムノードに対する共有鍵あるいは GSI の設定が正し
	くなされていない可能性があります．

	gfsd のコマンドラインオプションに -dv を追加して起動すると，
	gfsd がフォアグラウンドで起動し，詳細なメッセージを出力します．
	メッセージに従いエラーの原因を解決してください．

	共有鍵認証の場合は，各ファイルシステムノードのホームディレクト
	リに同一の共有鍵ファイル(~/.gfarm_shared_key) が置かれているか
	確認してください．

	GSI認証の場合は，表示される認証エラーメッセージに従い対応して
	ください．エラーの詳細は gfmd.conf および gfarm2.conf に，設定
	「log_auth_verbose enable」を書き加えることにより
	/var/log/messages (ないし/var/adm/messages) に記録させることが
	できます．
	認証エラーに関する詳細な情報は http://www.globus.org より得ら
	れます．
	現在のところ，メタデータ冗長構成のためのgfmd間接続においては，
	GSI認証はサポートされていない点にもご注意ください．

	それでも認証エラーが生じる場合は，Gfarm ファイルシステムの管理
	者に連絡してください．この場合，_gfarmfs ユーザの共有鍵，GSIの
	設定が正しくなされていない可能性があります．

	なお，GSI認証においては以下のような点に注意する必要があります．

	(1) 利用するファイルシステムノードおよび，メタデータサーバのグ
	リッドマップファイル(/etc/grid-security/grid-mapfile)
	に正しいエントリが登録されていますか？

	特に，Globus Toolkit version 2 (GT2) と version 3 (GT3) 以降では，
	サブジェクト名に違いがあるので必要です．GT2 の Email フィールド
	は，GT3 以降では emailAddress となります．また GT2 の USERID
	フィールドは GT3 以降では UID となります．両方のライブラリを利用
	する場合は，互換性のために，両方のエントリを grid-mapfile に登録
	する必要があります．

	gfmd−gfsd間の通信にGSI認証を使う場合，第2欄を「@host@」とした
	gfsdの証明書もgrid-mapfileに登録されていますか？

	(2) ユーザ証明書(~/.globus/usercert.pem)，ホスト証明書
	(/etc/grid-security/hostcert.pem)のパーミッションが 0644 になって
	いますか？ またgfsdのサービス証明書を利用している場合，証明書
	および秘密鍵のオーナーは「_gfarmfs」とする必要があります．

	(3) ユーザ証明書，ホスト証明書，サービス証明書の有効期限は
	切れていませんか？

	(4) ユーザ証明書，ホスト証明書，サービス証明書に署名している
	CA の証明書は有効なものが正しく /etc/grid-security/certificates
	に登録されていますか？ 有効期限が切れていませんか？

	signing_policy ファイルにおける CA のサブジェクト名も (1) と同
	様に変化するので注意が必要です．

	(5) /etc/grid-security/certificates に登録されている CRL の
	有効期限が切れていませんか？

	(6) gfarm.conf の metadb_serverhost の項で指定しているメタデータ
	サーバのホスト名は，ホスト証明書に書かれているホスト名と一致して
	いますか？

	(7) gfhost コマンドで登録するホストの固有識別子は，ホスト証明書
	ないしサービス証明書に書かれているホスト名と一致していますか？ 

	(8) 全てのホストで時刻が正しく設定されていますか？ Globus の 
	GSI ライブラリの場合，ホスト間で 5分以上時刻が狂っていると認証
	に失敗してしまいます．

  2.3 ファイルシステムノードのディスクがクラッシュしてしまいました．ど
     うすればいいでしょうか？

	gfncopy コマンドでファイル複製数を2以上に設定している場合は，
	他のファイルシステムノードに複製が存在するので問題はありません．

	たまたまクラッシュしたノードのファイルを読み込みアクセスしてい
	た場合は，自動的に network_receive_timeout 秒後に他のファイル
	システムノードの複製の読み込みに切り替わり，アプリケーションに
	もエラーは通知されません．network_receive_timeout はデフォルト
	では60秒です．

	ただし，クラッシュしたノードのファイルを書き込みアクセスしてい
	た場合は，そのアプリケーションに対し，書き込みエラーが返り，更
	新は失われます．

	クラッシュすると replica_check_host_down_thresh 秒後に，自動的
	に指定した複製数の複製が作成されます．デフォルトでは3時間です．

	ファイル複製数を2以上に設定していない場合は，クラッシュしたファ
	イルシステムノードにしかない複製はアクセスできなくなります．た
	だし，truncate は可能です．

	ファイルシステムノードを復旧すると，起動時にメタデータとスプー
	ルディレクトリの一貫性チェックが行われ，一貫していない場合は，
	/lost+found ディレクトリに移動されます．

  2.4 無通信状態で止まっている gfarm クライアントや gfsd が残ることが
     あるのですが？

	ネットワークインターフェースカードの問題や，ネットワーク自体の
	トラブルで，数分間によって通信が途絶した場合，このようなことが
	起きる可能性があります．特に広域ネットワークを通して通信して
	いる場合はこのような可能性が増えます．そのような場合，
	gfarm.conf に「sockopt keepalive」という設定を加えることで，
	停止したプログラムを自動的にエラーで終了させることができるよう
	になります．Gfarm 1.3.1 以降の config-gfarm で生成した
	gfarm.conf は，デフォルトでこの設定を含んでいます．

	あるいは，もし /etc/nsswitch.conf で「ldap」を指定している場合，
	いくつかの Linux ディストリビューションで，このような問題が
	生じています．具体的には Fedora Core 3，Fedora Core 5，CentOS 4.4
	などです．Red Hat 8 では，この問題は生じていません．
	これはシステム附属のライブラリのバグが原因で生じる問題であり，
	その具体的な条件は，ファイル KNOWN_PROBLEMS.ja に記載してあります．
	この問題の場合，「ldap」の指定を取り除くことの他には，現在の
	ところ回避策が知られていません．
	
  2.5 ファイルの更新時刻がおかしいようです．

	ファイルの更新時刻は実際のファイルを作成したファイルシステムノー
	ドの更新時刻となります．ファイルシステムノードの時刻が正しく設
	定されていない場合，そのファイルシステムノードに書き込まれたファ
	イルの更新時刻などがおかしくなってしまいます．NTPなどを利用し
	てファイルシステムノードの時刻を正しく設定してください．

  2.6 gfmd や gfsd が異常終了した際，どうすればコアファイルを回収できますか？

	gfmd や gfsd を Linux 上で動かしている場合，異常終了してもコア
	ファイルはデフォルトでは作成されません．コアファイルを回収する
	には，root 権限で以下の作業を行ってください．

	(1) カーネルのパラメタを変更します．以下の行を sysctl の設定
	ファイル (/etc/sysctl.conf) の末尾に加えます．

		fs.suid_dumpable = 1
		kernel.core_pattern = /var/tmp/core.%e.%p

	"kernel.core_pattern" 行では，コアファイルのパスを指定します．
	"%e", "%p" はそれぞれ，プログラム名およびプロセス ID に展開
	されます．加えたら，設定を読み込み直します．

		/sbin/sysctl -p

	(2) コアファイルの最大サイズを設定します．
	"/etc/security/limits.conf" ファイルに，以下の行を追加します．

		*	soft	core	unlimited

	この設定は，OS 再起動後に有効になります．

	現在も gfmd や gfsd が動作中で，直ちに設定を適用したい場合は，
	以下のように ulimit コマンド実行後，gfmd または gfsd を再起動
	してください．

		ulimit -c unlimited
		/etc/init.d/gfmd restart
		/etc/init.d/gfsd restart

	(3) gfmd や gfsd を Red Hat もしくはそれから派生した OS で動作
	させ，RPM パッケージで導入，あるいは prefix を /usr として導入
	している場合は "prelink" という日時ジョブに関する設定を行う必要
	があります．"/etc/prelink.conf.d/gfarm.conf" というファイルを
	作成し，以下のような行を足して，prelink の対象外とします．

		-b /usr/sbin/gfmd
		-b /usr/sbin/gfsd
		-b /usr/lib/libgfarm.*

	/usr/local などに導入している場合はこの設定は必要ありませ
	ん．prelink の対象となるディレクトリについては
	/etc/prelink.conf を参照してください．また prelink については
	man ページを参照してください．

	(4) abrt が導入されている場合はコアファイルの出力に失敗するこ
	とがあります．abrt の設定を適切に行うか，abrt の起動を停止して
	ください．

  2.7 InfiniBand があるのにRDMAができません．

	・ configure 時にクライアント，gfsd ともに --with-infiniband を
	指定してありますか．
	例えば，以下のコマンドでライブラリが表示されますか．
		% ldd /usr/local/lib/libgfarm.so |grep libibverbs.so

	・"insufficient memlock size(...), please expand memlock size" の
	エラーメッセージは出ていませんか．
	出ていれば資源制限を拡張してください．
	/etc/security/limits.conf を編集して '* hard memlock unlimited' を
	指定してみてください．

	・"ibv_.... failed, no memory" のエラーメッセージは出ていませんか．
	出ていれば資源制限がかかっているか，実際にメモリーロックサイズが
	大きすぎるためで，有効なRDMA利用はできません．
	当該プロセスのメモリロックサイズを確認してみてください。
		% grep VmLck /proc/<pid>/status

3. セキュリティ
***************
  3.1 Gfarm は firewall に守られていない環境で安全に運用できますか？

	Gfarm は，sharedsecret 認証，gsi_auth 手法，gsi 認証の
	3 種類の認証方法をサポートしていますが，
	Internet 環境では，sharedsecret 認証や gsi_auth 手法では
	安全とは言えません．gsi 認証の利用を推奨します．
	これについては，次の項目を参照してください．

  3.2 sharedsecret 認証，gsi_auth 手法，gsi 認証の違いは？

	「sharedsecret」認証は，共有鍵を用いた認証です．
	Gfarm の sharedsecret 認証の場合，提供しているサービスが認証だ
	けであり，データに対する署名や暗号化を提供しているわけではあり
	ませんから，パケット盗聴や，TCP セッションの乗っ取りなどの危険
	が残ります．
	従って，firewall で守られている環境内のみでの利用をお勧めしま
	す．sharedsecret 認証を提供している理由は，高速なことと，公開
	鍵の取得の手間を省けることです．

	「gsi」(Grid Security Infrastructure) 認証は，公開鍵に基づいた認
	証方法です．Gfarm は Globus の提供する GSI ライブラリを用いて
	います．Globus がデータの暗号化をサポートしているため，
	sharedsecret 認証よりも安全であると考えられます．ただし，輸出
	版の Globus の場合，バージョンによっては暗号化をサポートしてい
	ないことがあります．お使いの Globus が，暗号化をサポートしてい
	るバージョンであるか確認しておくことをお勧めします．

	「gsi_auth」手法の場合，認証処理のみに GSI ライブラリを用い，
	その後の通信にはデータに対する署名や暗号化処理による保護のない，
	生のデータ転送を用います．このため sharedsecret 認証と同様，
	パケット盗聴や，TCP セッションの乗っ取りなどの危険が残ります．
	従って，firewall で守られている環境内のみでの利用をお勧めしま
	す．gsi_auth 手法を提供している理由は，データ転送が高速なこと
	です．

	gsi 認証や gsi_auth 手法は，ソースコードの configure 時に
	--with-globus オプションを指定しないと，有効になりません．
	GSI に関する詳しい情報は，http://www.globus.org/ を参照し
	てください．


4. 制限事項
***********
  4.1 Gfarm-1.xでサポートされていた以下の機能はサポートされていません．

	ファイルビュー，ファイルの分割格納

  4.2 Gfarm-1.xでサポートされていた以下の機能はサポートされる予定はあ
    りません．

	リモートプログラムの起動
