NFS サーバ/クライアント設定メモ(CentOS7.1.1503)

NFS サーバ/クライアント設定メモ(CentOS7.1.1503)
あぱーブログ
2015年5月28日  カテゴリー:Linux  タグ: ,
Pocket
LINEで送る

NFS(Network File System)は、複数のホストから、同じファイルを共有することができる、分散ファイルシステムです。NFS の歴史は古く、30年近く使われているそうです。ファイル共有のプロトコルは、FTP や SMB をよく耳にしますが、NFS は、その仕組みのシンプルさから、ロードバランサー配下のWEBサーバなどでよく使われています。

サーバ構成

以下のサーバ構成で NFSサーバを設定し、NFSクライアントでOS起動時に NFSを自動マウントするように設定しました。
NFSサーバとクライアントの構成

NFSサーバ、NFSクライアント共に、サーバOSは CentOS 7.1 (1503) です。CentOS6系と、少し NFS の設定方法が変わっています。

NFS サーバの設定

・NFS のパッケージをインストール
yum -y install nfs-utils

・NFS で共有するディレクトリを作成
mkdir -p /exports/data

・共有ディレクトリのオーナーを「nfsnobody」に変更
chown nfsnobody:nfsnobody /exports/data

・共有ディレクトリの設定
vim /etc/exports

書式は「<共有ディレクトリのパス> <接続を許可するIPアドレス>(<オプション>)」です。

<接続を許可するIPアドレス>は「172.16.1.0/24」など、ネットワークアドレスでも設定可能です。

<オプション>は「rw」で読み書きを許可「all_squash」ですべてのアクセスを nfsnobodyユーザ として処理するように設定しています。

「all_squash」を設定することで、NFSサーバのマウント先では、全てのユーザが共有ディレクトリに、読み書き可能になります。この設定により、例えばですが webmaster ユーザが作成したディレクトリに、httpdプロセスオーナーの apacheユーザが書き込めないといったことを防ぎます。

・IPv6を無効にしている場合は、以下も変更しておきます。
vim /etc/netconfig

・起動
systemctl start nfs-server

・自動起動設定
systemctl enable nfs-server

CentOS 7.1 で変わったこと

CentOS6系では「rpcbind」や「nfs-lock」などを、合わせて起動する必要がありましたが、CentOS7.1 では、これらが static サービスになったため、起動や自動起動を、設定する必要が無くなったようです。
systemctl list-unit-files | grep -e rpcbind -e nfs-lock -e nfs-idmapd

起動確認

rpcinfo -p (以下のような表示であればOK)

・共有ディレクトリ設定の確認
exportfs -v

(参考資料)8.7. NFS サーバーの設定 | Red Hat Enterprise Linux 7

firewalld の設定

・ポート 111 と ポート 2049 の TCP/UDP を許可します
firewall-cmd --add-port=2049/tcp --permanent
firewall-cmd --add-port=2049/udp --permanent
firewall-cmd --add-port=111/tcp --permanent
firewall-cmd --add-port=111/udp --permanent

・設定を読込みます
firewall-cmd --reload

・設定を確認します(以下の表示があればOKです)
firewall-cmd --list-all

※NFS クライアントが、NFSv4.1 以前の場合は、別途設定の必要があるようです。
8.7.3. ファイアウォール背後での NFS の実行 | Red Hat Enterprise Linux 7

NFS クライアントの設定

・NFS のパッケージをインストール
yum -y install nfs-utils

・マウントポイントの作成
mkdir /mnt/data

・マウント設定
vim /etc/fstab

OS起動時に、上記の設定で自動マウントされます。

・マウント
mount /mnt/data

・マウント確認(以下のような表示があればOKです)
nfsstat -m

(参考資料) 8.3. NFS クライアントの設定 | Red Hat Enterprise Linux 7

NFS マウントのタイムアウト値

NFSサーバがダウンしている場合、NFSクライアントサーバのOS起動に時間がかかります。これは、NFS自動マウント(/etc/fstab)の設定をしているため、NFS マウントのタイムアウトを待ってから、OSが起動するためです。

タイムアウト値の設定は、マウントオプション「timeo」と「retrans」の組み合わせで指定します。デフォルトの設定でのタイムアウト値は、およそ180秒になっています。

・タイムアウト値の確認

※NFS(5) の man ページより引用

timeo=n The time in deciseconds (tenths of a second) the NFS client waits for a response before it retries
an NFS request.

For NFS over TCP the default timeo value is 600 (60 seconds). The NFS client performs linear back‐
off: After each retransmission the timeout is increased by timeo up to the maximum of 600 seconds.

However, for NFS over UDP, the client uses an adaptive algorithm to estimate an appropriate timeout
value for frequently used request types (such as READ and WRITE requests), but uses the timeo set‐
ting for infrequently used request types (such as FSINFO requests). If the timeo option is not
specified, infrequently used request types are retried after 1.1 seconds. After each retransmis‐
sion, the NFS client doubles the timeout for that request, up to a maximum timeout length of 60
seconds.

retrans=n The number of times the NFS client retries a request before it attempts further recovery action. If
the retrans option is not specified, the NFS client tries each request three times.

The NFS client generates a "server not responding" message after retrans retries, then attempts
further recovery (depending on whether the hard mount option is in effect).

少しややこしいですが、timeo は 600 × 0.1 = 60秒になります。retrans(リトライ回数)は、2回なので、、、

マウント実行
 ↓(60秒)
リトライ1回目
 ↓(60秒)
リトライ2回目
 ↓(60秒)
NFSマウント失敗

合計 180秒 となる計算です。※英語力が乏しいので(^^;) もし解釈が間違っていたら教えてください。

終わりに

今さらではありますが、NFS は簡単に設定ができて、普通のストレージと同じように使えるのが、とても便利ですね。

スポンサーリンク
Pocket
LINEで送る

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です