■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) |