UnixPower on Networking
  http://www.unix-power.net/

 
 Top - Linux - CentOS NFS



■NFSサーバ側

普段からNFSサーバを必要とする場面というのはあまり思いつかないのですが、それなりに便利な技術ですしESXiのデータストアマウントの選択肢でもあるのでメモ書きを残します。昔ながらのNFSと言えばUDP/2049ですが、CentOS6に搭載されているNFSはVer4でデフォルトでTCPを使用します。


まず必要なツールをインストールします。


# yum install rpcbind nfs-utils

# rpm -qa | grep nfs
nfs-utils-1.2.3-36.el6.i686
nfs-utils-lib-1.1.5-6.el6.i686
nfs4-acl-tools-0.3.3-6.el6.i686

# rpm -qa | grep rpcbind
rpcbind-0.2.0-11.el6.i686


NFS共有用のディレクトリは/nfs1にあるとします。設定ファイルは/etc/exportsになります。
左からマウントするディレクトリ、NFSクライアントのIPアドレス、オプションという記述になります。


# chown root.root /new
# chmod 755 /new
# vi /etc/exports
/new 192.168.12.0/24(rw,no_root_squash)


()の中はオプションになります。NFSサーバのオプションとして以下のものがります。


オプション
概要
ro 読み込み専用でマウント
rw 読み書きモードでマウント
async 非同期モードで書き込み(デフォルト)
sync 同期モードで書き込み
wdelay 複数の処理を一括して行う。NFSサーバ側で一括して更新を行う。
no_wdelay wdelayの反対。syncオプションと併用する。
root_squash rootをnfsbodyに変換する。
no_root_squash rootアカウントをroot(サーバ側)にマッピング。


TCP_Wrapperを設定している場合には以下の追加許可記述も必要です。


# vi /etc/hosts.allow
rpcbind : 192.168.0.0/255.255.0.0
mountd : 192.168.0.0/255.255.0.0


上記は192.168.0.0/16からアクセスを許可しています。さらに以下のコマンドで設定を反映させます。


# exportfs -ra
# exportfs -v
/new           192.168.0.0/16(rw,wdelay,no_root_squash,no_subtree_check)


後は以下のコマンドでNFSサーバを起動します。


# /etc/rc.d/init.d/rpcbind start
# /etc/rc.d/init.d/nfslock start
# /etc/rc.d/init.d/nfs start
# rpcinfo -p
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  40778  status
    100024    1   tcp  45861  status
    100011    1   udp    875  rquotad
    100011    2   udp    875  rquotad
    100011    1   tcp    875  rquotad
    100011    2   tcp    875  rquotad
    100005    1   udp  46708  mountd
    100005    1   tcp  33423  mountd
    100005    2   udp  50542  mountd
    100005    2   tcp  47365  mountd
    100005    3   udp  51053  mountd
    100005    3   tcp  37928  mountd
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    2   tcp   2049  nfs_acl
    100227    3   tcp   2049  nfs_acl
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    2   udp   2049  nfs_acl
    100227    3   udp   2049  nfs_acl
    100021    1   udp  58459  nlockmgr
    100021    3   udp  58459  nlockmgr
    100021    4   udp  58459  nlockmgr
    100021    1   tcp  58897  nlockmgr
    100021    3   tcp  58897  nlockmgr
    100021    4   tcp  58897  nlockmgr


■NFSクライアント側


LinuxをクライアントとするNFSクライアントでは特に必要なデーモン等はありません。以下のmountコマンドでマウントします。

# mkdir /mnt/export
# mount -t nfs 192.168.12.20:/new /mnt/export

# mount
/dev/sda2 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
/dev/sda5 on /var type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
192.168.12.20:/new on /mnt/export type nfs \ 
(rw,vers=4,addr=192.168.12.20,clientaddr=192.168.12.21)


上記では特にオプションは明示していませんのでmountコマンドで表示されているrwとvers=4はデフォルトのものということになります。他に指定できる主なオプションは以下のようになります。


オプション 説明 
nosuid  SUIDやSGIDを無視する 
noauto  mount -aコマンドによる一斉マウントにnfsディレクトリを含めない 
rsize nfsサーバから読み取るブロックサイズの最大値でデフォルトは32768。1024の倍数で指定することができます。 
wsize  nfsサーバへ書き込むブロックサイズの最大値でデフォルトは32768。1024の倍数で指定することができます。 
hard nfsサーバ上のファイルにアクセスしている最中にnfsサーバがダウンした際にタイムアウトをしない。 
soft nfsサーバ上のファイルにアクセスしている最中にnfsサーバがダウンした際にタイムアウトをする。 
intr 一般的にhardと併用し、nfsサーバダウン時に該当プロセスをkillできるようにする。 


起動時に自動的にマウントするよう/etc/fstabを以下のように編集します。

# vi /etc/fstab

192.168.12.20:/new      /mnt/export         nfs     rsize=8192,wsize=8192,nosuid,hard,intr 0 0


再起動後、無事マウントできていればOKです。



■NFSキャッシュの設定


NFSクライアントにキャッシュ機構を提供するcachefilesdというパッケージが提供されていますので、ディスクに余裕がある場合は使わない手はないと思います。まずyumからインストールを行います。

# yum install cachefilesd


設定ファイルは/etc/cachefilesd.confとなります。デフォルトで次のように設定されています。

# more /etc/cachefilesd.conf
###############################################################################
#
# Copyright (C) 2006,2010 Red Hat, Inc. All Rights Reserved.
# Written by David Howells (dhowells@redhat.com)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version
# 2 of the License, or (at your option) any later version.
#
###############################################################################

dir /var/cache/fscache
tag mycache
brun 10%
bcull 7%
bstop 3%
frun 10%
fcull 7%
fstop 3%

# Assuming you're using SELinux with the default security policy included in
# this package
secctx system_u:system_r:cachefiles_kernel_t:s0


暗号のようなbrunやfrunの意味は次のようになり、bはファイルの容量、fはファイル数をそれぞれ管理することになります。

brun N%

空き領域がディスクの合計容量の N% を上回ると cachefilesd は間引きを無効にします。

bcull N% 

空き領域がディスクの合計容量の N% を下回ると cachefilesd は間引きを開始します。

bstop N% 

空き領域が N% を下回ると cachefilesd は間引き動作によって空き領域が N% を越えるまでディスク領域の割り当てを行わなくなります。

frun N%

ファイルシステムがさらに格納できるファイル数が制限最大数の N% を上回ると cachefilesd は間引きを無効にします。

fcull N%

ファイルシステムがさらに格納できるファイル数が最大ファイル数の N% を下回ると cachefilesd は間引きを開始します。

fstop N%

ファイルシステムがさらに格納できるファイル数が最大ファイル数の N% を下回ると cachefilesd は、 間引きによって最大数の N% を越えるようになるまでディスク領域の割り当てを行わなくなります。


とりあえずデフォルトの数値のままで良いのではとおもいます。これはデーモン形式で起動し、NFSをマウントする際に-o fscを指定することで有効にすることができますので/etc/fstabにそれを追記しておきます。


# /etc/rc.d/init.d/cachefilesd start
# vi /etc/fstab
192.168.12.20:/new      /mnt/export     nfs   rsize=8192,wsize=8192,nosuid,hard,intr,fsc 0 0


■ジャンボフレームの対応

iSCSIやNFSなどのネットワークを利用する際にはジャンボフレームを有効として一回に扱える最大パケット容量を増やすことによりパフォーマンスの向上が期待できます。これはiSCSIイニシエータおよびターゲットはもちろんなのですが、この両者の間に入るスイッチもジャンボフレームに対応している必要があります。ソフトウェアの設定というよりもLinux ( OS ) の設定となります。ジャンボフレームに対応するためにNICの設定でMTUの値を9000に設定します。

デフォルトは1500となっているのをまず確認しておきます。

# ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:0A:E4:89:F4:52
          inet addr:192.168.12.20  Bcast:192.168.12.255  Mask:255.255.255.0
          inet6 addr: fe80::20a:e4ff:fe89:f452/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1713 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1101 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1623192 (1.5 MiB)  TX bytes:106464 (103.9 KiB)


以下のファイルを編集して1500から9000に変更します。MTU=9000を所定のファイルに追記してネットワークを再起動します。

# vi /etc/sysconfig/network-scripts/ifcfg-eth0

※下記を追記
MTU=9000

# /etc/rc.d/init.d/network restart 


設定が反映されたか再度確認しておきます。

# ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:0A:E4:89:F4:52
          inet addr:192.168.12.20  Bcast:192.168.12.255  Mask:255.255.255.0
          inet6 addr: fe80::20a:e4ff:fe89:f452/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:9000  Metric:1
          RX packets:134 errors:0 dropped:0 overruns:0 frame:0
          TX packets:121 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:12472 (12.1 KiB)  TX bytes:15774 (15.4 KiB)




 関連記事
 データストア( NFS )を追加する
 Copyright(C) 2003-2015 UnixPower on Networking All rights reserved.