I/O エラーと NFS ロックの再利用の失敗のトラブルシューティング - FSx for ONTAP

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

I/O エラーと NFS ロックの再利用の失敗のトラブルシューティング

このセクションでは、FSx for ONTAP ファイルシステムのフェイルオーバーイベント中の I/O エラーと NFS ロックの再利用の失敗に関連する問題と、それぞれの解決策について説明します。

フェイルオーバーイベント中に I/O エラーが発生している

FSx for ONTAP シングル AZ ファイルシステムのフェイルオーバー中に、NFS クライアントで一時的な I/O エラーや長時間の一時停止が発生する可能性があります。NFSv4+ クライアントの場合、次のようなカーネルログメッセージが表示されることがあります。

NFS: __nfs4_reclaim_open_state: Lock reclaim failed!

これらのメッセージは、フェイルオーバーウィンドウ中にクライアントが NFS ロックを正常に再利用できなかったことを示します。

フェイルオーバーイベント中の I/O エラーを減らすには

Linux では、クライアントでネットワーク設定を設定して、フェイルオーバー検出時間を 55~60 秒から 15~20 秒に短縮できます。

重要

これらの設定は、必ず本番環境以外で最初にテストしてください。これらの設定により、IP アドレスをローカルネットワーク上の物理 (MAC) アドレスにマッピングするために使用されるアドレス解決プロトコル (ARP) トラフィックが増加し、ネットワークに制約のある環境には適さない場合があります。

NFS クライアント用に最適化されたネットワーク設定を構成するには
  1. 各 NFS クライアントに sysctl 設定ファイルを作成します。次の例ではdefault、 を使用してすべてのネットワークインターフェイスに設定を適用します。インスタンスに複数のネットワークインターフェイスがある場合は、 を FSx for ONTAP シングル AZ ファイルシステムへの接続に使用される特定のインターフェイス名 ( eth0や などens5) defaultに置き換えることができます。

    $ sudo tee /etc/sysctl.d/99-fsx-failover.conf > /dev/null << 'EOF' # NFS client optimizations for faster failover detection # Replace 'default' with your interface name (e.g., eth0, ens5) to target a specific interface net.ipv4.neigh.default.base_reachable_time_ms=5000 net.ipv4.neigh.default.delay_first_probe_time=1 net.ipv4.neigh.default.ucast_solicit=0 net.ipv4.tcp_syn_retries=3 EOF
  2. 設定をすぐに適用します。

    $ sudo sysctl -p /etc/sysctl.d/99-fsx-failover.conf
  3. 設定がアクティブであることを確認します。を使用した場合はdefault、次のコマンドを使用して を確認できます。特定のインターフェイスを指定した場合は、 をインターフェイス名 (例: eth0または ens5) defaultに置き換えます。

    $ sysctl net.ipv4.neigh.default.base_reachable_time_ms $ sysctl net.ipv4.neigh.default.delay_first_probe_time $ sysctl net.ipv4.neigh.default.ucast_solicit $ sysctl net.ipv4.tcp_syn_retries

これらの設定が、同じアベイラビリティーゾーン内の FSx for ONTAP ファイルシステムに接続するすべての NFS クライアントに一貫して適用されることを確認します。これらのネットワーク最適化を使用する場合は、次の点に注意してください。

  • base_reachable_time_ms=5000 – ARP キャッシュエントリの有効性を 30 秒から 5 秒に減らし、フェイルオーバーイベント中にクライアントが IP 所有権の変更をより迅速に検出できるようにします。

  • delay_first_probe_time=1 – 古いネットワークエントリを調べるまでの遅延を 5 秒から 1 秒に短縮します。

  • ucast_solicit=0 – ユニキャストネイバープローブをスキップし、ブロードキャスト ARP リクエストをすぐに発行して、アクティブなファイルサーバーの再検出を高速化します。

  • tcp_syn_retries=3 – TCP 接続の再試行時間を 127 秒から 15 秒に短縮します。

ネットワーク設定が完了したら、環境をモニタリングして変更を検証する必要があります。ファイルシステムのスループットキャパシティを変更することで、フェイルオーバーイベントをテストできます。詳細については、「ファイルシステムでフェイルオーバーをテストする」を参照してください。

変更を適用した後の環境のモニタリング

  • NFS エラーのシステムログをモニタリングして、NFS 関連のカーネルログメッセージを表示します。

    $ sudo journalctl -f | grep -i nfs

    などのメッセージの出現が少ないことを確認しますLock reclaim failed

  • アプリケーションログをモニタリングして、フェイルオーバーイベント中の I/O タイムアウト、接続エラー、再試行関連の障害が少ないことを確認します。

  • ネットワークへの影響を検証して、ARP トラフィックの増加が環境のネットワークパフォーマンスに悪影響を及ぼさないことを確認します。

NFSv4 環境の代替アプローチ

クライアント側の設定を変更できない NFSv4 環境では、次の代替方法を検討してください。

  • NFSv4 リースタイムアウトを延長します。ストレージ管理者と協力して、NFSv4 リースタイムアウトを増やします。これらのタイムアウトを延長すると、クライアントはフェイルオーバーイベント中にロックを再利用するための追加の時間を確保できます。詳細については、 NetApp ONTAPドキュメントのNFSv4 ロック猶予期間を指定する」を参照してください。