NFS(ネットワークファイルシステム)の導入と構築

ネットワークファイルシステム


英語のネットワークファイルシステム(NFS)は、SUNによって開発されたUNIXプレゼンテーション層プロトコルであり、ユーザーが自分のコンピューターを使用しているかのように、ネットワーク上の他の場所のファイルにアクセスできるようにします。

定義

NFSは、UDP / IPプロトコルに基づくアプリケーションであり、その実装は主にリモートプロシージャコールRPCメカニズムを使用します。RPCは、マシン、オペレーティングシステム、および低レベル転送プロトコルに依存しないリモートファイルにアクセスするための一連の操作を提供します。RPCはXDRサポートを使用します。XDRは、マシンに依存しないデータ記述エンコーディングプロトコルであり、インターネット上で送信されるデータをマシンアーキテクチャに依存しない形式でエンコードおよびデコードし、異種システム間のデータ送信をサポートします。

進化

ネットワークファイルシステム(NFS)は、ファイルシステム上にあるネットワークの抽象化であり、リモートクライアントがローカルファイルシステムと同様の方法でネットワーク経由でアクセスできるようにします。NFSはそのような最初のシステムではありませんが、UNIXシステムで最も強力で広く使用されているネットワークファイルシステムに進化し、進化してきました。NFSを使用すると、複数のユーザー間で共通のファイルシステムを共有でき、データが集中するという利点があり、必要なストレージスペースを最小限に抑えることができます。
ネットワークファイルシステム(NFS)は、1984年の開始以来進化を続けており、分散ファイルシステムの基盤となっています。現在、NFS(pNFSによって拡張)は、ネットワークを介した分散ファイルへのスケーラブルなアクセスを提供します。
最初のネットワークファイルシステムはファイルアクセスリスナーと呼ばれ、1976年にDigital Equipment Corporation(DEC)によって開発されました。DECnetプロトコルセットの一部であるデータアクセスプロトコル(DAP)の実装。たとえば、TCP / IP、DECは、DAPを含むネットワークプロトコルのプロトコル仕様をリリースしました。
NFSは、最初の最新のネットワークファイルシステムです(IPプロトコルの上に構築されています)。1980年代に、最初に実験的なファイルシステムとして使用され、SunMicrosystemsによって社内で開発されました。NFSプロトコルは、Request for Comments(RFC)標準としてアーカイブされ、よく知られているNFSv2に進化しました。標準として、他のクライアントやサーバーとのNFSの相互運用性により、急速に発展しました。
この標準は、RFC1813で定義されているNFSv3に進化し続けています。この新しいプロトコルは、以前のバージョンよりもスケーラビリティが高く、大きなファイル(2GB以上)、非同期書き込み、およびトランスポートプロトコルとしてのTCPをサポートし、ファイルシステムをより広いネットワークで使用するための道を開きます。2000年に、RFC 3010(RFC 3530によって改訂された)はNFSをエンタープライズ設定に持ち込みました。Sunは、高いセキュリティとステートフルプロトコルを備えたNFSv4を導入しました(NFS以前のバージョンはステートレスです)。現在、NFSはバージョン4.1(RFC 5661で定義)であり、分散サーバー間での並列アクセス(pNFS拡張機能と呼ばれる)のサポートが追加されています。
驚いたことに、NFSはほぼ30年間開発されてきました。これは、スケーラブルで高性能、エンタープライズレベルの品質を備えた非常に安定した(そしてポータブルな)ネットワークファイルシステムを表しています。ネットワーク速度の向上と遅延の減少により、NFSは常にネットワークを介してファイルシステムサービスを提供するための魅力的なオプションでした。ローカルネットワーク設定でも、仮想化によってストレージがネットワークに組み込まれ、より多くのモバイル仮想マシンがサポートされます。NFSは、仮想インフラストラクチャを最適化するための最新のコンピューティングモデルもサポートしています。

特徴

  1. 透過的なファイルアクセスとファイル転送を提供します。
  2. 既存の作業環境を変更せずに、新しいリソースやソフトウェアを簡単に拡張できます。
  3. 高性能で柔軟な構成。

動作原理

NFS(Network File System)は、異種プラットフォーム上の現在の主流の共有ファイルシステムの1つです。主にUNIX環境で使用されます。もともとはSunMicrosystemsによって開発されましたが、現在はネットワークを介したさまざまなタイプのシステム間のファイル共有をサポートできます。FreeBSD、SCO、Solarisなどの異種オペレーティングシステムプラットフォームで広く使用されており、システムが他のシステムとディレクトリやファイルを共有できるようにします。ネットワーク。。NFSを使用することにより、ユーザーとプログラムはローカルファイルなどのリモートシステム上のファイルにアクセスできるため、各コンピューターノードはローカルリソースと同じくらい簡単にオンラインリソースを使用できます。つまり、NFSは、さまざまな種類のコンピューター、オペレーティングシステム、ネットワークアーキテクチャ、および伝送プロトコルのオペレーティング環境でネットワークファイルのリモートアクセスと共有に使用できます。
NFSの動作原理は、クライアントプログラムとサーバープログラムで構成されるクライアント/サーバーアーキテクチャを使用することです。サーバープログラムは、ファイルシステムへのアクセスを他のコンピューターに提供し、そのプロセスは出力と呼ばれます。NFSクライアントプログラムが共有ファイルシステムにアクセスすると、NFSサーバーからそれらを「転送」します。ファイルは通常、ブロックで転送されます。そのサイズは8KBです(ただし、操作をより小さなシャードに分割する場合があります)。NFS転送プロトコルは、サーバーとクライアント間のファイルアクセスと通信の共有に使用されるため、クライアントはストレージデバイスに保存されているデータにリモートでアクセスできます。

ネットワークファイルシステムアーキテクチャ

NFSは、コンピューティングのクライアントサーバーモデルを可能にします。サーバーは、共有ファイルシステムとクライアントに接続されたストレージを実装します。クライアントは、ファイルシステムを共有し、それをローカルファイルスペースにロードするためのユーザーインターフェイスを実装します。
Linuxでは、仮想ファイルシステム交換(VFS)は、ホスト上の複数の同時ファイルシステムをサポートする方法を提供します(CD-ROMの国際標準化機構[ISO] 9660、ローカルハードディスクのext3fsなど)。VFSは、需要が優先するストレージを決定し、次に、需要を満たすために使用されるファイルシステムを決定します。このため、NFSは他のファイルシステムと同様にプラグ可能なファイルシステムです。NFSの場合、唯一の違いは、入出力(I / O)要件をローカルで満たすことができないが、ネットワーク全体で完了する必要があることです。
NFSに指定された要件が見つかると、VFSはそれをカーネルのNFSインスタンスに渡します。NFSは、I / O要求を解釈し、それらをNFSプログラム(OPEN、ACCESS、CREATE、READ、CLOSE、REMOVEなど)に変換します。これらのプログラムは、特定のNFS RFCに文書化されており、NFSプロトコルでの動作を指定します。I / O要求からプログラムが選択されると、そのプログラムはリモートプロシージャコール(RPC)層で実行されます。その名前が示すように、RPCはシステム間でプログラム呼び出しを実行する方法を提供します。パラメータを伴うNFS要求をマーシャリングし、それらを適切なリモートペアレベルに送信し、応答を管理および追跡して、適切なリクエスターに提供します。
さらに、RPCには、External Data Representation(XDR)と呼ばれる重要な相互運用性レイヤーが含まれています。これにより、データ型に関しては、すべてのNFS参加者が同じ言語を使用できるようになります。特定のアーキテクチャが要求を実行する場合、データ型の表現は、要求を満たすターゲットホスト上のデータ型とは異なる場合があります。XDRは、すべてのアーキテクチャが共有ファイルシステムと相互運用できるように、型をパブリック表現(XDR)に変換する役割を果たします。XDRは、タイプのバイト形式(floatなど)とタイプのバイト順序(可変長配列の修復など)を指定します。XDRはNFSでの使用で知られていますが、共通のアプリケーション設定で複数のアーキテクチャを扱う場合に役立つ仕様です。
XDRがデータをパブリック表現に変換すると、要求はネットワークを介して送信され、トランスポート層プロトコルを提供します。当初、NFSはUniversal Datagram Protocol(UDP)を採用していましたが、現在、TCPはその優れた信頼性により、より用途が広くなっています。
サーバー側では、NFSは同様のスタイルで実行されます。需要はネットワークプロトコルスタックに到達し、RPC / XDRを通過して(データ型をサーバーアーキテクチャに変換)、NFSサーバーに到達します。NFSサーバーは、需要を満たす責任があります。要件はNFSデーモンに送信されます。NFSデーモンは、要件のターゲットファイルシステムツリーをマークし、VFSを再度使用してローカルストレージ内のファイルシステムを取得します。プロセス全体を図3に示します。サーバーのローカルファイルシステムは、一般的なLinuxファイルシステム(ext4fsなど)であることに注意してください。したがって、NFSは従来の意味でのファイルシステムではなく、リモートファイルシステムにアクセスするためのプロトコルです。
高遅延ネットワークの場合、NFSv4は複合プロシージャと呼ばれるプロシージャを実装します。この手順では、基本的に、複数のRPC呼び出しを単一の要求に組み込んで、ネットワーク要求の転送税を最小限に抑えることができます。また、応答のコールバックモードも実装しています。

ネットワークファイルシステムプロトコル

クライアントの観点からは、NFSの最初の操作はマウントと呼ばれます。Mountは、リモートファイルシステムをローカルファイルシステムスペースにロードすることを意味します。このプロセスは、マウントの呼び出し(Linuxシステムコール)から始まり、VFSを介してNFSコンポーネントにルーティングされます。(リモートサーバーRPC呼び出しへのget_port要求を介して)ロードポート番号を確認した後、クライアントはRPCマウント要求を実行します。この要求は、クライアントとマウントプロトコル(rpc.mountd)を担当する特定のデーモンの間で発生します。このデーモンは、サーバーによって現在エクスポートされているファイルシステムに基づいてクライアント要求をチェックします。要求されたファイルシステムが存在し、クライアントがそれにアクセスしている場合、RPCマウント応答はファイルシステムのファイルハンドルを作成します。クライアント側は、リモートロード情報をローカルロードポイントとともに保存し、I / O要求を実行する機能を確立します。このプロトコルは潜在的なセキュリティ問題を表します。したがって、NFSv4は、この補助マウントプロトコルを内部RPC呼び出しに置き換えて、マウントポイントを管理します。
ファイルを読み取るには、最初にファイルを開く必要があります。RPCにはOPENプログラムはありません。逆に、クライアントは、ロードされたファイルシステムにディレクトリとファイルが存在するかどうかを確認するだけです。クライアントは、ディレクトリに対するGETATTR RPC要求で開始し、その結果、ディレクトリ属性を含む応答、またはディレクトリが存在しないことを示します。次に、クライアントはLOOKUP RPC要求を送信して、要求されたファイルが存在するかどうかを確認します。そうである場合は、要求されたファイルに対してGETATTR RPC要求を発行し、ファイルの属性を返します。上記の成功したGETATTRとLOOKUPに基づいて、クライアントはファイルハンドルを作成します。これは、ユーザーの将来のニーズに備えて提供されます。
リモートファイルシステムで指定されたファイルを使用して、クライアントはREADRPC要求をトリガーできます。READには、ファイルハンドル、ステータス、オフセット、および読み取りカウントが含まれます。クライアントはステータスを使用して、操作が実行可能かどうか(つまり、ファイルがロックされているかどうか)を判断します。オフセットは読み取りを開始するかどうかを示し、カウントは読み取られたバイト数を示します。サーバーは、要求されたバイト数を返す場合と返さない場合がありますが、READ RPC応答で(データとともに)返されたバイト数を示します。

ネットワークファイルシステムの革新

NFSの2つの最新バージョン(4と4.1)は、NFSにとって最も興味深く重要です。NFSイノベーションの最も重要な側面のいくつかを見てみましょう。
NFSv4より前は、ファイル管理のロード、ロック、およびその他の要素のための補助プロトコルがいくつかありました。NFSv4は、このプロセスをプロトコルに単純化し、トランスポートプロトコルとしてのUDPプロトコルのサポートを削除します。NFSv4は、UNⅨおよびWindows®ベースのファイルアクセスセマンティクスのサポートも統合し、ローカルに統合されたNFSを他のオペレーティングシステムに拡張します。
NFSv4.1では、スケーラビリティとパフォーマンスを向上させるために、並列NFS(pNFS)の概念が導入されています。より高いスケーラビリティをサポートするために、NFSv4.1には、クラスタ化されたファイルシステムのスタイルに似た分割データ/メタデータアーキテクチャであるスクリプトがあります。pNFSは、エコシステムをクライアント、サーバー、ストレージの3つの部分に分割します。データ用と制御用の2つのパスがあることがわかります。pNFSは、データレイアウトをデータ自体から分割し、デュアルパスアーキテクチャを可能にします。クライアントがファイルにアクセスしたい場合、サーバーはレイアウトで応答します。レイアウトは、ファイルのストレージデバイスへのマッピングを記述します。クライアントにレイアウトがある場合、サーバーを経由せずにストレージに直接アクセスできます(これにより、柔軟性とパフォーマンスが向上します)。クライアントがファイル操作を完了すると、データ(変更)とレイアウトを送信します。必要に応じて、サーバーはクライアントから返されるレイアウトを要求できます。
pNFSは、この動作をサポートするためにいくつかの新しいプロトコル操作を実装します。LayoutGetとLayoutReturnはそれぞれサーバーからリリースとレイアウトを取得し、LayoutCommitは他のユーザーが使用できるようにクライアントからリポジトリにデータを送信します。サーバーはLayoutRecallを使用して、クライアントからレイアウトをコールバックします。レイアウトは複数のストレージデバイスに分散され、並列アクセスとより高いパフォーマンスをサポートします。
データとメタデータの両方がストレージ領域に保存されます。NFSv4.1サーバーがメタデータの管理とストレージを処理している間、クライアントは直接I / Oを実行し、レイアウトの受信を行うことができます。この動作は必ずしも新しいものではありませんが、pNFSはストレージへの複数のアクセス方法をサポートする機能を追加します。現在、pNFSは、ブロックベースのプロトコル(ファイバーチャネル)、オブジェクトベースのプロトコル、およびNFS自体(非pNFS形式でも)の使用をサポートしています。
2010年9月に発行されたNFSv2リクエストを通じて、引き続きNFS作業を実行します。その中で、仮想環境でのストレージの変更は、新しい改善で位置付けられています。たとえば、データレプリケーションは、仮想マシン環境のレプリケーションと非常によく似ています(多くのオペレーティングシステムは、同じデータの読み取り/書き込みとキャッシュを行います)。このため、ストレージシステムは、レプリケーションが全体としてどこで行われているのかを理解することが望ましいです。これにより、クライアント側でキャッシュスペースが予約され、ストレージ側で容量が節約されます。NFSv4.2では、この問題に対処するために共有ブロックを使用することをお勧めします。ストレージシステムがバックエンドで処理機能を統合し始めたため、サーバー側レプリケーションが導入されました。サーバーがストレージバックエンドでのデータレプリケーションを効率的に解決できる場合、内部ストレージネットワークの負荷を軽減できます。フラッシュストレージのサブファイルキャッシングやI / Oのクライアントプロンプト(パスとしてmapadviseを使用する可能性がある)など、その他の革新が生まれました。

ネットワークファイルシステムの代替

NFSはUNIXおよびLinuxシステムで最も人気のあるネットワークファイルシステムですが、それが唯一の選択肢ではないことは確かです。Windowsシステムでは、サーバーメッセージブロック[SMB](CIFSとも呼ばれます)が最も広く使用されているオプションです(LinuxがSMBをサポートしているように、WindowsもNFSをサポートしています)。
Linuxでもサポートされている最新の分散ファイルシステムの1つは、Cephです。Cephは、フォールトトレラントな分散ファイルシステムとして設計されており、UNⅨ互換のポータブルオペレーティングシステムインターフェイス(POSⅨ)を備えています。Cephの詳細については、リソースをご覧ください。
その他の例としては、Andrewの分散ファイルシステムのオープンソースバージョンであるOpenAFS(Carnegie MellonおよびIBM製)、スケーラブルストレージに焦点を当てた一般的な分散ファイルシステムであるGlusterFS、クラスターコンピューティングシステム用の超並列分散ファイルに焦点を当てたLustreなどがあります。これらはすべて、分散ストレージ向けのオープンソースソフトウェアソリューションです。

NFSを展開する

ラボ環境

IP サービス
192.168.1.10 nfs、rpcbind
192.168.1.20 nfs、rpcbind

nfs、rpcbindサービスをインストールします

192.168.1.10がメインサーバーとしてインストールされます

yum -y install nfs-utils rpcbind

お互いにpingできることを確認してください

[root@node1 ~]# ping 192.168.1.20
PING 192.168.1.20 (192.168.1.20) 56(84) bytes of data.
64 bytes from 192.168.1.20: icmp_seq=1 ttl=64 time=0.531 ms
64 bytes from 192.168.1.20: icmp_seq=2 ttl=64 time=0.560 ms
------------------------------------------------------------
[root@node2 ~]# ping 192.168.1.10
PING 192.168.1.10 (192.168.1.10) 56(84) bytes of data.
64 bytes from 192.168.1.10: icmp_seq=1 ttl=64 time=0.435 ms
64 bytes from 192.168.1.10: icmp_seq=2 ttl=64 time=0.521 ms
64 bytes from 192.168.1.10: icmp_seq=3 ttl=64 time=0.315 ms

node1ホストにテストディレクトリを作成し、権限を付与します777

[root@node1 ~]# mkdir /test
[root@node1 ~]# chmod 777 /test

ファイル/ etc / exportsを書き込みます

[root@node1 ~]# vi /etc/exports
/test 192.168.1.20(rw,sync,no_root_squash)

#还可以设置其他权限ro权限为只读,rw为可读可写

nfsを有効にし、nfsおよびrpcbindサービスを有効にします

[root@node1 ~]# exportfs -rv
exporting 192.168.1.20:/test
exporting 192.168.1.20:/test to kernel
exportfs: 192.168.1.20:/test: Function not implemented
[root@node1 ~]# systemctl start nfs
[root@node1 ~]# systemctl start rpcbind

ファイアウォールをオンにします

[root@node1 ~]# firewall-cmd --add-service=nfs --permanent
success
[root@node1 ~]# firewall-cmd --add-service=mountd --permanent
success
[root@node1 ~]# firewall-cmd --add-service=rpc-bind --permanent
success
[root@node1 ~]# firewall-cmd --reload
success

node2ホストに切り替えて、マウントポイントディレクトリを作成し、マウントします

[root@node2 ~]# mkdir /hello
[root@node2 ~]# mount -t nfs 192.168.1.10:/test /hello

Node1ホストでファイルを作成し、同期されているかどうかをテストします

[root@node1 ~]# cd /test
[root@node1 test]# echo 123 > test.log
[root@node1 test]# ls
test.log
----------------------------------------------
[root@node2 ~]# cd /hello
[root@node2 hello]# ls
test.log
[root@node2 hello]# cat test.log 
123

おすすめ

転載: blog.csdn.net/weixin_46152207/article/details/113238693