Network File System (NFS) ファイルシステムを作成した後、Linux Elastic Compute Service (ECS) インスタンスにファイルシステムをマウントする必要があります。 これにより、複数のECSインスタンスがファイルシステムへのアクセスを共有できます。 このトピックでは、Linux ECSインスタンスにNFSファイルシステムをマウントする方法について説明します。
前提条件
Linux ECSインスタンスは、ファイルシステムが作成されているリージョンで使用できます。 ECSインスタンスにパブリックIPアドレスまたはelastic IPアドレスが設定されています。 詳細については、「作成方法」をご参照ください。
NFSファイルシステムが作成され、ファイルシステムのマウント対象が取得されます。 ファイルシステムとECSインスタンスは、同じ仮想プライベートクラウド (VPC) に存在します。 詳細については、「ファイルシステムの作成」をご参照ください。
最適なアクセスパフォーマンスを確保するために、NFSv3を使用してファイルシステムをマウントすることを推奨します。
NFSv4.0は、範囲ロックを含むファイルロックをサポートします。 複数のLinux ECSインスタンスのファイルを同時に変更する必要がある場合は、NFSv4.0を使用してファイルシステムをマウントすることを推奨します。
NASコンソールでは、数回クリックするだけでECSインスタンスにファイルシステムをマウントできます。 NASコンソールを使用してファイルシステムをマウントすることを推奨します。 詳細については、「NASコンソールでのNFSファイルシステムのマウント」をご参照ください。
ステップ1: NFSクライアントのインストール
Linux ECSインスタンスにNFSファイルシステムをマウントする前に、NFSクライアントをインストールする必要があります。 NFSクライアントをインストールした後、次にECSインスタンスにファイルシステムをマウントするときにクライアントをインストールする必要がなくなります。
ECSインスタンスに接続します。 詳細については、「接続方法」をご参照ください。
NFSクライアントをインストールします。
オペレーティングシステム
インストールコマンド
Alibaba Cloud Linux
sudo yum install nfs-utils
CentOS
レッドハット
Ubuntu
次のコマンドを順番に実行します。
sudo apt-get update
sudo apt-get install nfs-common
Debian
同時NFSリクエストの最大数を増やします。
次のコマンドを実行して、同時NFSリクエストの最大数を128に設定します。 詳細については、「NFSクライアントからの同時NFSリクエストの最大数を変更するにはどうすればよいですか?」をご参照ください。
if (lsmod | grep sunrpc); then (modinfo sunrpc | grep tcp_max_slot_table_entries) && sysctl -w sunrpc.tcp_max_slot_table_entries=128 (modinfo sunrpc | grep tcp_slot_table_entries) && sysctl -w sunrpc.tcp_slot_table_entries=128 fi (modinfo sunrpc | grep tcp_max_slot_table_entries) && echo "options sunrpc tcp_max_slot_table_entries=128" >> /etc/modprobe.d/sunrpc.conf (modinfo sunrpc | grep tcp_slot_table_entries) && echo "options sunrpc tcp_slot_table_entries=128" >> /etc/modprobe.d/sunrpc.conf
ステップ2: NFSファイルシステムをマウントする
NFSファイルシステムは、Linux ECSインスタンスに手動または自動でマウントできます。 手動取り付けは一時的な取り付けに適しています。 ECSインスタンスにNASファイルシステムを手動でマウントする場合、ECSインスタンスが起動または再起動されるたびにファイルシステムを再マウントする必要があります。 自動取り付けは永続的な取り付けに適しています。 NASファイルシステムの自動マウントを有効にした場合、ECSインスタンスが起動または再起動されるたびにファイルシステムを再マウントする必要はありません。 ECSインスタンスの再起動後にマウント情報が失われるのを防ぐため、ファイルシステムを手動でマウントした後、NASファイルシステムの自動マウントを有効にすることを推奨します。
NFSファイルシステムを手動でマウントする
NFSファイルシステムのマウントターゲットを使用して、Linux ECSインスタンスにファイルシステムをマウントできます。
NFSファイルシステムをマウントします。
汎用NASファイルシステムをマウントするには、次のいずれかのコマンドを実行します。
説明最適なアクセスパフォーマンスを確保するために、NFSv3を使用してファイルシステムをマウントすることを推奨します。
NFSv4.0は、範囲ロックを含むファイルロックをサポートします。 複数のECSインスタンスのファイルを同時に変更する必要がある場合は、NFSv4.0を使用してファイルシステムをマウントすることを推奨します。
NFSv3を使用してファイルシステムをマウントするには、次のコマンドを実行します。
sudo mount -t nfs -o vers=3,nolock,proto=tcp,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport file-system-id.region.nas.aliyuncs.com:/ /mnt
NFSv4を使用してファイルシステムをマウントするには、次のコマンドを実行します。
sudo mount -t nfs -o vers=4,minorversion=0,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport file-system-id.region.nas.aliyuncs.com:/ /mnt
Extreme NASファイルシステムをマウントするには、次のコマンドを実行します。
sudo mount -t nfs -o vers=3,nolock,noacl,proto=tcp,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport file-system-id.region.extreme.nas.aliyuncs.com:/share /mnt
次の表に、mountコマンドで設定できるパラメーターを示します。
パラメーター
説明
汎用NASファイルシステム: file-system-id.region.nas.aliyuncs.com:/ /mnt
Extreme NASファイルシステム: file-system-id.region.extreme.nas.aliyuncs.com:/share /mnt
形式は、< マウント対象のドメイン名 >:< 共有ディレクトリ名 > < マウントディレクトリのパス > です。 マウント対象のドメイン名、共有ディレクトリ名、およびマウントディレクトリのパスを実際の値に置き換えます。
マウントターゲットのドメイン名: ドメイン名を表示するには、次の手順を実行します。NASコンソールにログインします。 [ファイルシステムリスト] ページで、管理するファイルシステムを見つけ、[操作] 列の [管理] をクリックします。 [マウントターゲット] タブで、マウントターゲットのドメイン名を表示します。 詳細については、「マウントターゲットのドメイン名の表示」をご参照ください。
共有ディレクトリ名: NASファイルシステムのルートディレクトリ (/) またはサブディレクトリ (/shareなど) を指定します。 サブディレクトリを指定する場合は, サブディレクトリが存在することを確認してください。
説明Extreme NASファイルシステムの共有ディレクトリは、/shareで始まる必要があります (例: /shareや /share/subdir) 。
マウントディレクトリのパス: ECSインスタンスのルートディレクトリ (/) またはサブディレクトリ (/mntなど) を指定します。 サブディレクトリを指定する場合は, サブディレクトリが存在することを確認してください。
vers
ファイルシステムのプロトコルバージョン。
vers=3: NFSv3を使用してファイルシステムをマウントします。
vers=4: NFSv4を使用してファイルシステムをマウントします。
minorversion
は、プロトコルのマイナーバージョン番号を指定します。 NASファイルシステムはNFSv4.0をサポートします。 NFSv4を使用してNASファイルシステムをマウントする場合は、マイナーバージョン番号を0に設定する必要があります。
説明汎用NASファイルシステムは、NFSv3とNFSv4.0の両方をサポートします。
Extreme NASファイルシステムはNFSv3のみをサポートします。
マウントオプション
ファイルシステムをマウントするときは、複数のマウントオプションを指定できます。 複数のマウントオプションはコンマ (,) で区切ります。 次のマウントオプションを使用できます。
rsize: クライアントがファイルシステムから読み取るデータブロックのサイズを指定します。 推奨値: 1048576。
wsize: クライアントがファイルシステムに書き込むデータブロックのサイズを指定します。 推奨値: 1048576。
説明パフォーマンスの低下を防ぐために、rsize mountオプションとwsize mountオプションの両方の値を1048576に設定することを推奨します。
hard: ファイルシステムが使用できない場合、アプリケーションがファイルシステムへのアクセスを停止し、ファイルシステムが使用可能になるまで待機するように指定します。 このマウントオプションを指定することを推奨します。
timeo: NFSクライアントがリクエストを再試行する前に、NFSクライアントが待機する期間を10秒単位で指定します。 推奨値: 600。 この値は60秒を指定します。
説明timeoマウントオプションを変更する場合は、150またはそれ以上の値を指定することを推奨します。 timeoマウントオプションは、10秒単位で測定されます。 例えば、値150は15秒を示す。
retrans: NFSクライアントがリクエストを再試行する回数を指定します。 推奨値: 2。
noresvport: ネットワークが障害から回復したときに、新しいTCPポートを使用してファイルシステムとECSインスタンス間のネットワークの継続性を確保することを指定します。 このマウントオプションを指定することを推奨します。
重要データの不整合を防ぐため、soft mountオプションを指定しないことを推奨します。 ソフトマウントオプションを指定する場合は、潜在的なリスクを理解していることを確認してください。
デフォルトとは異なる他のマウントオプションは設定しないことを推奨します。 読み取りバッファサイズまたは書き込みバッファサイズを変更するか、属性キャッシュを無効にすると、パフォーマンスが低下する場合があります。
マウント結果を確認します。
コマンド
mount -l
サンプル出力
次の例に似たコマンド出力が表示された場合、マウントは成功です。
ファイルシステムがマウントされたら、
df -h
コマンドを実行して、ファイルシステムのストレージ容量を表示できます。
ファイルシステムのマウントに失敗した場合は、問題のトラブルシューティングを行います。 詳細については、「マウント障害のトラブルシューティングに関するFAQ」をご参照ください。
NASファイルシステムがマウントされた後、Linux ECSインスタンス上のNASファイルシステムからデータを読み書きできます。
ローカルディレクトリにアクセスするのと同じ方法で、ファイルシステムにアクセスできます。 次の図は例を示しています。
(オプション) NFSファイルシステムを自動的にマウントする
Linux ECSインスタンスの /etc/fstab
ファイルを設定して、ECSインスタンスの再起動時にNFSファイルシステムを自動的にマウントできます。
自動マウントを有効にする前に、上記の手動マウントが成功したことを確認してください。 これにより、ECSインスタンスの起動失敗が防止されます。
Extreme NASファイルシステムをマウントするには、次のコマンドを実行します。
汎用NASファイルシステムをマウントするには、この手順をスキップして手順2に進みます。
vi /etc/systemd/system/sockets.target.wants/rpcbind.socket
次の図に示すように、/etc/systemd/system/sockets.tar get.wants/rpcbind.socket設定ファイルを開き、IPv6に関連するrpcbindパラメーターをコメントアウトします。 それ以外の場合、起動時にrpcbindサービスの実行に失敗します。
CentOS 6.xの自動マウントを有効にする場合は、次の手順を実行します。
chkconfg netfs on
コマンドを実行して、起動時にnetfsサービスを有効にします。次の図に示すように、/etc/netconfig設定ファイルを開き、inet6-related情報をコメントアウトします。
/etc/fstab設定ファイルを開いてウント設定を追加します。
汎用 NAS ファイルシステム
NFSv3を使用してファイルシステムをマウントするには、次のコマンドを実行します。
file-system-id.region.nas.aliyuncs.com:/ /mnt nfs vers=3,nolock,proto=tcp,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,_netdev,noresvport 0 0
NFSv4を使用してファイルシステムをマウントするには、次のコマンドを実行します。
file-system-id.region.nas.aliyuncs.com:/ /mnt nfs vers=4,minorversion=0,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,_netdev,noresvport 0 0
Extreme NAS ファイルシステム
file-system-id.region.extreme.nas.aliyuncs.com:/share /mnt nfs vers=3,nolock,noacl,proto=tcp,noresvport,_netdev 0 0
説明CentOS 6.xの自動マウントを有効にする場合は、起動時に
chkconfg netfs on
コマンドを実行してnetfsサービスを有効にします。詳細については、「マウントパラメーター」をご参照ください。 次の表に、前の表に含まれていないパラメーターを示します。
パラメーター
説明
_netdev
ネットワーク接続前の自動マウントを防ぎます。
0 (noresvportの後の最初の値)
dumpコマンドを実行してファイルシステムをバックアップするかどうかを指定します。 ゼロ以外の値は、ファイルシステムがバックアップされていることを示します。 NASファイルシステムの場合、デフォルト値は0です。
0 (noresvportの後の2番目の値)
起動時にfsckコマンドがファイルシステムをチェックする順序。 NASファイルシステムの場合、デフォルト値は0です。これは、起動時にfsckコマンドが実行されていないことを示します。
次のコマンドを実行して、起動時に /etc/rc.localファイルを開きます。
[ ! -f /etc/rc.local ] && echo '#!/bin/bash' > /etc/rc.local; echo "for ((i=1; i<=10; i++)); do if ping -c 1 -W 3 aliyuncs.com; then break; else sleep 1; fi; done" >> /etc/rc.local; echo "sleep 3; mount -a -t nfs" >> /etc/rc.local; chmod +x /etc/rc.local
reboot
コマンドを実行してECSインスタンスを再起動します。重要ECSインスタンスを再起動すると、サービスが中断されます。 オフピーク時に操作を実行することを推奨します。
自動マウントが有効になっていることを確認します。
df -h
コマンドを実行して、ECSの再起動後1分以内にマウントされたNASファイルシステムを確認できます。
付録: NFSキャッシュの仕組みと関連する問題
従来のディスクでは、すべてのデータがページキャッシュにキャッシュされ、変更されたページはサーバーに非同期にフラッシュバックされます。 従来のディスクのレイテンシは低い。 ただし、NFSファイルシステムでは、NFSは新しく作成されたファイルや新しく書き込まれたコンテンツをページキャッシュにキャッシュせず、できるだけ早くNASサーバーにフラッシュします。 したがって、複数のECSインスタンスがNFSファイルシステムを共有する場合、すべてのNAS操作でディスク操作よりもオーバーヘッドが発生します。 このオーバーヘッドは一般に100〜1 msである。 データをできるだけ早くNASサーバーに戻すには、NASが提供する次のマルチノード整合性モデルが必要です。
タイムアウトベースの最終的な整合性モデル
NFSは、ディレクトリまたはファイルの属性 (FileAttr) をキャッシュします。 オペレーティングシステムは、FileAttrが変更されたかどうかに基づいて、他のECSインスタンスでディレクトリまたはファイルが変更されたかどうかを判断します。 さらに、FileAttrがロードされた後、オペレーティングシステムは、時間T内に有効なキャッシュ (たとえば、ファイルのコンテンツまたはディレクトリ内のファイルリスト) を考慮する。時間Tの後、オペレーティングシステムは、サーバからFileAttrを再び取得する。 FileAttrが変更されていない場合、オペレーティングシステムはファイルまたはディレクトリに関連するすべてのキャッシュが有効であると見なします。
Tは適応値である。 デフォルト値: 1s〜60s。
ファイルコンテンツキャッシュ: ファイルのコンテンツをキャッシュします。
サブディレクトリキャッシュ: ディレクトリに存在するファイルとディレクトリに存在しないファイルをキャッシュします。
ファイルコンテンツキャッシュの例:
ECS-1はファイルXの0〜4 KBを読み取ります: ECS-1はファイルの内容を初めて読み取りますが、その内容はキャッシュに存在しません。 ECS-1はサーバーからコンテンツを読み取り、ローカルにキャッシュします。
ECS-2は0〜4 KBのファイルXを更新します。ECS-2はサーバーにデータを書き込み、FileAttrのmtimeを更新します。
ECS-1は、ファイルXの0〜4 KBを再び読み取る: 第2の時間ECS-1がファイルXの0〜4 KBを読み取り、第1の時間ECS-1がファイルXの0〜4 KBを読み取る間の時間間隔が時間T未満である場合、FileAttrは満了していない。 この場合、ECS-1は、キャッシュ内のファイルXの0〜4 KBを直接読み取る。
ECS-1は3回目に0〜4 KBのファイルXを読み取ります。3回目のECS-1で0〜4 KBのファイルXを読み取り、1回目に0〜4 KBのファイルXを読み取るまでの時間間隔が時間Tより大きい場合、ECS-1はサーバーから新しいFileAttrを取得し、mtimeが変更されたことを確認します。 この場合、ECS-1はキャッシュ内のデータを破棄し、サーバーからデータを読み取ります。
サブディレクトリキャッシュの例:
ECS-1は /aを検索しようとします。ECS-1は、最初の検索でaが存在しないことを検出します。 ECS-1は、aが /ディレクトリに存在しないという情報をキャッシュします。
ECS-2サブディレクトリ /aを作成します。
ECS-1は /aを再度検索しようとします。2回目のECS-1で /aを検索してから1回目のECS-1で /aを検索するまでの時間間隔が時間T未満の場合、ECS-1はキャッシュを直接使用し、サブディレクトリが存在しないことを通知します。
ECS-1が /aを3回目に検索しようとします。3回目のECS-1で /aを検索してから1回目のECS-1で /aを検索するまでの時間間隔が時間Tより大きい場合、ECS-1は /サブディレクトリの最新のFileAttrを取得し、mtimeが変更されたことを確認します。 この場合、ECS-1はキャッシュ内のデータを破棄し、サーバー上で /aを検索します。
NFSによって提供されるタイムアウトベースの最終的な整合性モデルの詳細については、「NFS」をご参照ください。
ファイルベースのclose-to-open (CTO) 整合性モデル
タイムアウトベースの最終的な一貫性モデルは、ECS-2がECS-1によって書き込まれたデータをすぐに読み取ることを保証できません。 したがって、パフォーマンスを向上させるために、NFSはファイルベースのCTO整合性モデルを提供します。 2つ以上の計算ノードが同時に同じファイルを読み書きする場合、ECS-1によって行われた変更は、ECS-2によってすぐに読み取られない可能性があります。 ただし、ECS-1がファイルにデータを書き込み、ファイルを閉じると、任意の計算ノードでファイルを再度開くと、新しく書き込まれたデータへのアクセスが保証されます。
たとえば、プロデューサーECSインスタンスはファイルXを生成し、close操作を実行します。 次に、プロデューサーECSインスタンスはメッセージXをmessage Queueに送信し、ファイルXが作成されたことを通知します。 Message QueueにサブスクライブしたコンシューマECSインスタンスは、メッセージXを読み取ります (ファイルXが作成されました) 。 次に、コンシューマECSインスタンスはファイルに対してopen操作を実行し、open操作によって返されたfdを使用してファイルを読み取ります。 これにより、コンシューマECSインスタンスはファイルXのすべてのコンテンツを確実に読み取ることができます。コンシューマECSインスタンスがファイルXに対してopen操作を実行し、プロデューサECSインスタンスがファイルの作成を完了する前にfdを取得したとします。 この場合、コンシューマECSインスタンスは、メッセージXの受信後にfdを直接使用して最新のファイルコンテンツを読み取ることができない場合があります。
典型的な問題
ファイル作成の遅延
発行
ECS-1によってabcファイルが作成されECS-2が、abcファイルを読み取るのに時間がかかります。 レイテンシの範囲は1秒から1分です。
原因
この問題は、予想時間Tを満たすルックアップキャッシュによって発生します。たとえば、ECS-2が作成される前にabcファイルにアクセスすると、ECS-1ファイルがECS-2上に存在しないという問題が発生します。 その結果、abcファイルが存在しないことを示すレコードがキャッシュされる。 FileAttrは時間T内に期限切れではありません。したがって、ECS-2が再びファイルにアクセスするとき、ECS-2がファイルにアクセスしたときに最初にキャッシュされたabcファイルが存在しないことを示すレコードにアクセスします。
解決策
ECS-1がファイルを作成した直後にファイルを読み取ることができるようにするには、次のいずれかのソリューションを使用しECS-2。
解決策1: 存在しないファイルがキャッシュされないように、ECS-2のネガティブルックアップキャッシュを無効にします。 この解決策は、最小のオーバーヘッドをもたらす。
ファイルシステムをマウントするときに、lookupcache=positive (デフォルト値: lookupcache=all) フィールドを追加します。 次のコマンドを実行して、ファイルシステムをマウントします。
sudo mount -t nfs -o vers=3,nolock,proto=tcp,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,lookupcache=positive file-system-id.region.nas.aliyuncs.com:/ /mnt
解決策2: ECS-2上のすべてのキャッシュを無効にします。 この解決策は、不十分な性能をもたらす。 ビジネス要件に基づいて適切なソリューションを選択します。
ファイルシステムをマウントするときにactimeo=0フィールドを追加します。 次のコマンドを実行して、ファイルシステムをマウントします。
sudo mount -t nfs -o vers=3,nolock,proto=tcp,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,actimeo=0 file-system-id.region.nas.aliyuncs.com:/ /mnt
ファイルへのデータの書き込み遅延
発行
ECS-1はabcファイルを更新しました。 ただし、ECS-2がファイルをすぐに読み取る場合、ファイルの内容はまだ更新されません。
原因
次の2つの原因が関係しています。
原因1: ECS-1がabcファイルを書き込んだ後、ECS-1はすぐにコンテンツをフラッシュしません。 代わりに、コンテンツをページキャッシュにキャッシュし、アプリケーション層に依存してfsyncまたはclose操作を呼び出します。
原因2: ECS-2にファイルキャッシュが存在します。 したがって、ECS2は、サーバから最新のファイルコンテンツを直ちに取得することはできない。 たとえば、ECS-2はabcファイルを更新するときにデータをキャッシュしECS-1たとします。 その結果、キャッシュされたコンテンツは、ECS-2がファイルを読み取るときにも使用されます。
解決策
ECS-1がファイルを作成した直後にファイルを読み取ることができるようにするには、次のいずれかのソリューションを使用しECS-2。
解決策1: ファイルベースのclose-to-open (CTO) 整合性モデルを適用して、ECS-1またはECS-2の読み取りおよび書き込み操作がCTO整合性に準拠するようにします。 このようにして、ECS-2は間違いなく最新のデータを読むことができます。 具体的には、ECS-1はファイルを更新した後にcloseまたはfsync操作を実行します。 ECS-2は、ファイルを読み取る前にopen操作を実行します。
解決策2: ECS-1とECS-2のすべてのキャッシュを無効にします。 この解決策は、不十分な性能をもたらす。 ビジネス要件に基づいて適切なソリューションを選択します。
ECS-1のキャッシュを無効にします。 ファイルシステムをマウントするときに、noacフィールドを追加して、書き込まれたすべてのデータがすぐにディスクにフラッシュされるようにします。 次のコマンドを実行して、ファイルシステムをマウントします。
sudo mount -t nfs -o vers=3,nolock,proto=tcp,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,noac file-system-id.region.nas.aliyuncs.com:/ /mnt
説明ECS-1への書き込み操作が完了した後にfsync操作を呼び出す場合、またはデータを書き込むためにsync操作を呼び出す場合は、上記のコマンドの "noac" を "actimeo=0" に置き換えて、パフォーマンスをわずかに向上させます。
noacは、
actimeo=0
plus syncに相当します。 この場合、すべての書き込み操作はsyncを使用して強制的に実行されます。
ECS-2のキャッシュを無効にします。 ファイルシステムをマウントするときに、actimeo=0フィールドを追加して、すべてのキャッシュを省略します。 次のコマンドを実行して、ファイルシステムをマウントします。
sudo mount -t nfs -o vers=3,nolock,proto=tcp,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,actimeo=0 file-system-id.region.nas.aliyuncs.com:/ /mnt