6.3.2.3. Gluster NFS のトラブルシューティング (非推奨)

問:
NFS クライアントの mount コマンドが RPC エラー: Program not registered で失敗します。このエラーは、以下のいずれかの理由で発生しています。
  • NFS サーバーが実行していない。以下のコマンドを使用してステータスを確認できます。
    # gluster volume status
  • ボリュームが起動していません。以下のコマンドを使用してステータスを確認できます。
    # gluster volume info
  • rpcbind が再起動します。rpcbind が実行されていることを確認するには、以下のコマンドを実行します。
    # ps ax| grep rpcbind
答:
  • NFS サーバーが実行していない場合は、以下のコマンドを使用して NFS サーバーを再起動します。
    # gluster volume start VOLNAME
  • ボリュームが起動していない場合は、以下のコマンドを使用してボリュームを起動します。
    # gluster volume start VOLNAME
  • rpcbind サーバーと NFS サーバーの両方が稼働している場合は、以下のコマンドを使用して NFS サーバーを再起動します。
    # Gluster volume stop VOLNAME
    # Gluster ボリューム起動 VOLNAME
問:
rpcbind サービスが NFS クライアントで実行されていない。原因としては、以下の理由があります。
  • portmap が実行していません。
  • カーネルの NFS サーバーまたは glusterNFS サーバーの別のインスタンスが実行されています。
答:
以下のコマンドを実行して rpcbind サービスを起動します。
# service rpcbind start
問:
NFS サーバーの glusterfsd は起動していますが、ログの nfsrpc- service: portmap registration of program failed エラーメッセージで初期化に失敗します。
答:
NFS の起動は成功しますが、NFS サービスの初期化により、クライアントがマウントポイントにアクセスできない可能性があります。このような状況は、ログファイルの以下のエラーメッセージから確認することができます。
[2010-05-26 23:33:47] E [rpcsvc.c:2598:rpcsvc_program_register_portmap] rpc-service: Could notregister with portmap
[2010-05-26 23:33:47] E [rpcsvc.c:2682:rpcsvc_program_register] rpc-service: portmap registration of program failed
[2010-05-26 23:33:47] E [rpcsvc.c:2695:rpcsvc_program_register] rpc-service: Program registration failed: MOUNT3, Num: 100005, Ver: 3, Port: 38465
[2010-05-26 23:33:47] E [nfs.c:125:nfs_init_versions] nfs: Program init failed
[2010-05-26 23:33:47] C [nfs.c:531:notify] nfs: Failed to initialize protocols
[2010-05-26 23:33:49] E [rpcsvc.c:2614:rpcsvc_program_unregister_portmap] rpc-service: Could not unregister with portmap
[2010-05-26 23:33:49] E [rpcsvc.c:2731:rpcsvc_program_unregister] rpc-service: portmap unregistration of program failed
[2010-05-26 23:33:49] E [rpcsvc.c:2744:rpcsvc_program_unregister] rpc-service: Program unregistration failed: MOUNT3, Num: 100005, Ver: 3, Port: 38465
  1. 以下のコマンドを実行して、NFS サーバーで rpcbind サービスを起動します。
    # service rpcbind start
    rpcbind サービスを起動したら、glusterFS NFS サーバーを再起動する必要があります。
  2. 同じマシンで実行している別の NFS サーバーを停止します。
    このようなエラーも、同じマシン上で別の NFS サーバーが実行されている場合にも見られますが、glusterFS NFS サーバーではありません。Linux システムでは、これはカーネルの NFS サーバーである可能性があります。解決するには、他の NFS サーバーを停止するか、マシン上で glusterFS NFS サーバーを実行しないようにします。カーネルの NFS サーバーを停止する前に、重要なサービスが、その NFS サーバーのエクスポートへのアクセスに依存しないようにしてください。
    Linux では、使用中のディストリビューションに応じて以下のコマンドのいずれかを使用して、カーネルの NFS サーバーを停止できます。
    # service nfs-kernel-server stop
    # service nfs stop
  3. glusterFS NFS サーバーを再起動します。
問:
ログファイルの Port is already in use メッセージで、NFS サーバーの起動に失敗します。
答:
このエラーは、同じマシン上ですでに glusterFS NFS サーバーが実行されている場合に発生する可能性があります。以下のエラー行が存在する場合、この状況はログファイルから確認することができます。
[2010-05-26 23:40:49] E [rpc-socket.c:126:rpcsvc_socket_listen] rpc-socket: binding socket failed:Address already in use
[2010-05-26 23:40:49] E [rpc-socket.c:129:rpcsvc_socket_listen] rpc-socket: Port is already in use
[2010-05-26 23:40:49] E [rpcsvc.c:2636:rpcsvc_stage_program_register] rpc-service: could not create listening connection
[2010-05-26 23:40:49] E [rpcsvc.c:2675:rpcsvc_program_register] rpc-service: stage registration of program failed
[2010-05-26 23:40:49] E [rpcsvc.c:2695:rpcsvc_program_register] rpc-service: Program registration failed: MOUNT3, Num: 100005, Ver: 3, Port: 38465
[2010-05-26 23:40:49] E [nfs.c:125:nfs_init_versions] nfs: Program init failed
[2010-05-26 23:40:49] C [nfs.c:531:notify] nfs: Failed to initialize protocols
本リリースでは、glusterFS NFS サーバーが同じマシン上で複数の NFS サーバーを実行することはサポートしていません。この問題を解決するには、glusterFS NFS サーバーのいずれかをシャットダウンする必要があります。
問:
NFS サーバーの失敗により、mount コマンドは失敗します。
答:
mount: mount to NFS server '10.1.10.11' failed: timed out (retrying).
提案されたソリューションを確認し、適用して問題を修正します。
  • NFS サーバーから DNS サーバーへの名前検索要求を無効にします。
    NFS サーバーは、逆引き DNS ルックアップを実行して、ボリュームファイルのホスト名とクライアント IP アドレスを照合して、NFS クライアントの認証を試行します。NFS サーバーが DNS サーバーに接続できない場合や、DNS サーバーが DNS 要求に応答するのに時間がかかりすぎる状況があります。この遅延により、NFS サーバーから NFS クライアントへの遅延が遅れてタイムアウトエラーが発生する可能性があります。
    NFS サーバーは、代わりに、認証用のクライアント IP アドレスのみに依存する DNS 要求を無効にする回避策を提供します。このような状況でマウントを成功させるには、以下のオプションを追加できます。
    option nfs.addr.namelookup off
    注記
    NFS サーバーを無効にすると、クライアントの認証が IP アドレスのみを使用するように強制されることに注意してください。ボリュームファイルの認証ルールがホスト名を使用する場合、これらの認証ルールが失敗し、クライアントのマウントに失敗します。
  • NFS クライアントが使用する NFS バージョンは、デフォルトではバージョン 3 とは異なります。
    GlusterFS NFS サーバーは、デフォルトで NFS プロトコルのバージョン 3 に対応します。最新の Linux カーネルでは、デフォルトの NFS バージョンが 3 から 4 に変更になりました。glusterFS NFS サーバーによって認識されないバージョン 4 のメッセージを使用しているため、クライアントマシンは glusterFS NFS サーバーに接続できない可能性があります。タイムアウトは、NFS クライアントがバージョン 3 を使用するように強制することで解決できます。この目的のために、vers オプションが使用されます。
    # mount nfsserver:export -o vers=3 /MOUNTPOINT
問:
showmount コマンドが clnt_create: RPC: Unable to receive エラーで失敗します。このエラーは、以下の理由で発生しています。
  • ファイアウォールがポートをブロックしている可能性があります。
  • rpcbind が実行されていない可能性があります。
答:
ファイアウォール設定を確認し、ポートマップ要求/応答および glusterFS NFS サーバーの要求/応答のポート 111 を開放します。glusterFS NFS サーバーは、38465、38466、および 38467 のポート番号で動作します。
問:
アプリケーションが Invalid argument または Value too large to define data type で失敗します
答:
通常、これら 2 つのエラーは、32 ビットの NFS クライアント、または 64 ビットの inode 番号または大きな多数のファイルに対応していないアプリケーションに対して発生します。
コマンドラインインターフェースで以下のオプションを使用して、代わりに glusterFS NFS が 32 ビットの inode 番号を返すようにします。
NFS.enable-ino32 <on | off>
このオプションはデフォルトでは off になっており、NFS はデフォルトでは 64 ビットの inode 番号を返すことができます。
このオプションでメリットとなるアプリケーションには、以下が含まれます。
  • デフォルトでは大きなファイルに対応していない 32 ビットマシン上で構築され、実行している。
  • 64 ビットシステムで 32 ビット標準に構築されている。
gcc で以下のフラグを使用して、ソースから再構築できるアプリケーションを再構築することが推奨されます。
-D_FILE_OFFSET_BITS=64
問:
NFS サーバーを実行しているマシンを再起動すると、クライアントは、先に保持したロックの回収に失敗します。
答:
NSM (Network Status Monitor) サービスデーモン (rpc.statd) は、gluster NFS サーバーの前に起動します。したがって、NSM はクライアントに通知を送信して、ロックを回収します。クライアントが回収要求を送信すると、NFS サーバーは開始していないため応答しません。したがって、クライアント要求は失敗します。
解決策: サーバーの起動時に NSM デーモンが起動しないようにします。
chkconfig --list nfslock を実行して、OS の起動時に NSM が設定されているかどうかを確認します。
エントリーのいずれかがオンの場合は 、chkconfig nfslock off を実行して、起動時に NSM クライアントを無効にします。これにより、問題は解決されます。
問:
ボリュームが正常にマウントされても、nfs.log に rpc actor failed to complete successfully エラーが表示されます。
答:
gluster NFS は NFS バージョン 3 のみをサポートします。バージョンが指定されていない場合に、nfs-utils がクライアントをマウントすると、バージョン 3 にフォールバックする前にバージョン 4 を使用してネゴシエートしようとします。サーバーログと nfs.log ファイルの両方におけるメッセージの原因です。
[2013-06-25 00:03:38.160547] W [rpcsvc.c:180:rpcsvc_program_actor] 0-rpc-service: RPC program version not available (req 100003 4)
[2013-06-25 00:03:38.160669] E [rpcsvc.c:448:rpcsvc_check_and_reply_error] 0-rpcsvc: rpc actor failed to complete successfully
この問題を解決するには、以下のように mount コマンドで NFS バージョン 3 および noacl オプションを宣言します。
# mount -t nfs -o vers=3,noacl server1:/test-volume /mnt/glusterfs
問:
mount コマンドは、No such file or directory で失敗します。
答:
ボリュームが存在しないため、この問題が発生します。