NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
1、 安装NFS 1.1 安装服务器软件 1
2
3
4
5
6
7
| [iyunv@fileserver ~]yum install –y nfs-utilsrpcbind
[iyunv@fileserver ~]chkconfig nfs on
[iyunv@fileserver ~]chkconfig rpcbind on
[iyunv@fileserver ~]# chkconfig --list |egrep"nfs|rpcbind"
nfs 0:off1:off2:on3:on4:on5:on6:off
nfslock 0:off1:off2:off3:on4:on5:on6:off
rpcbind 0:off1:off2:on3:on4:on5:on6:off
|
2、 服务端配置 2.1 服务端配置文件详解 服务端配置文件为/etc/exports,格式如下:
/www/appData/upload/172.16.11.0/24(rw,async,all_squash) /www/appData/upload/为本地要发布的目录,172.16.11.0/24为将此NFS目录发布给指定范围内的主机,支持单个主机、网络用户组@group,通配符*,?等、IP网络,本例中就是使用的IP网络
括号内的参数说明如下所示(可以使用manexports查看帮助) 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| ro:共享目录只读;
rw:共享目录可读可写;
all_squash:所有访问用户都映射为匿名用户或用户组;
no_all_squash(默认):访问用户先与本机用户匹配,匹配失败后再映射为匿名用户或用户组;
root_squash(默认):将来访的root用户映射为匿名用户或用户组;
no_root_squash:来访的root用户保持root帐号权限;
anonuid=<UID>:指定匿名访问用户的本地用户UID,默认为nfsnobody(65534);
anongid=<GID>:指定匿名访问用户的本地用户组GID,默认为nfsnobody(65534);
secure(默认):限制客户端只能从小于1024的tcp/ip端口连接服务器;
insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
async:将数据先保存在内存缓冲区中,必要时才写入磁盘;
wdelay(默认):检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率;
no_wdelay:若有写操作则立即执行,应与sync配合使用;
subtree_check(默认) :若输出目录是一个子目录,则nfs服务器将检查其父目录的权限;
no_subtree_check :即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;
|
2.2 创建挂载目录 1
2
| mkdir –p /www/appData/upload
chownnfsnobody:nfsnobody /www/appData/upload
|
2.3 启动nfs服务 1
2
| [iyunv@fileserver ~]#/etc/init.d/rpcbind start
[iyunv@fileserver ~]#/etc/init.d/nfs start
|
查看nfs发布情况
1
2
3
4
5
6
| [iyunv@fileserver ~]#exportfs -v
/www/appData/upload
172.16.11.0/24(rw,async,wdelay,root_squash,all_squash,no_subtree_check,sec=sys,rw,root_squash,all_squash)
[iyunv@fileserver ~]#showmount -e 172.16.11.15
Export list for172.16.11.15:
/www/appData/upload172.16.11.0/24
|
exportfs –r可以在不重启nfs服务的情况下重读配置文件
本地查看无误后可以转到客户端配置
3、 客户端配置 3.1 客户端环境配置 将nfs和rpcbind加入开机自启动
1
2
| chkconfig nfs on
chkconfig rpcbind on
|
启动rpcbind和nfs
1
2
| /etc/init.d/rpcbindstart
/etc/init.d/nfs start
|
查看fileserver端的NFS文件情况
1
2
3
| # showmount -e172.16.11.15
Export list for172.16.11.15:
/www/appData/upload172.16.11.0/24
|
挂载参数介绍(可以使用man 8 mount查看帮助)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| ro 以只读模式加载。
rw 以可读写模式加载。
sync 以同步方式执行文件系统的输入输出动作。
async 以非同步的方式执行文件系统的输入输出动作。
defaults 使用默认的选项。默认选项为rw、suid、dev、exec、anto nouser与async。
atime 每次存取都更新inode的存取时间,默认设置,取消选项为noatime。
noatime 每次存取时不更新inode的存取时间。
dev 可读文件系统上的字符或块设备,取消选项为nodev。
nodev 不读文件系统上的字符或块设备。
exec 可执行二进制文件,取消选项为noexec。
noexec 无法执行二进制文件。
auto 必须在/etc/fstab文件中指定此选项。执行-a参数时,会加载设置为auto的设备,取消选取为noauto。
noauto 无法使用-a参数来加载。
suid 启动set-user-identifier(设置用户ID)与set-group-identifer(设置组ID)设置位,取消选项为nosuid。
nosuid 关闭set-user-identifier(设置用户ID)与set-group-identifer(设置组ID)设置位。
user 普通用户可以执行加载操作。
nouser 普通用户无法执行加载操作,默认设置。
remount 重新加载设备。通常用于改变设备的设置状态。
rsize 读取数据缓冲大小,默认设置1048576(rhel6.6)。
wsize 写入数据缓冲大小,默认设置1048576(rhel6.6)。
fg 以前台形式执行挂载操作,默认设置。在挂载失败时会影响正常操作响应。
bg 以后台形式执行挂载操作。
hard 硬式挂载,默认设置。如果与服务器通讯失败,让试图访问它的操作被阻塞,直到服务器恢复为止。
soft 软式挂载。如果服务器通讯失败,让试图访问它的操作失败,返回一条出错消息。这项功能对于避免进程“挂”在无关紧要的安装操作上来说非常有用。
retrans=n 指定在以软方式安装的文件系统上,在返回一条出错消息之前重复发出请求的次数。
nointr 不允许用户中断,默认设置。
intr 允许用户中断被阻塞的操作(并且让它们返回一条出错消息)。
timeo=n 设置请求的超时时间(以十分之一秒为单位)。
|
命令提示符中挂载:
1
2
3
4
5
6
7
8
| # mount -t nfs -onoexec,nosuid,nodev,noatime 172.16.11.15:/www/appData/upload /www/appData/upload/
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 243G 4.8G 226G 3% /
tmpfs 101G 0 101G 0% /dev/shm
/dev/sda1 772M 32M 700M 5% /boot
172.16.11.15:/www/appData/upload
2.7T 5.8G 2.6T 1% /www/appData/upload
|
写入/etc/fstab使其开机自动生效
1
| 172.16.11.15:/www/appData/upload /www/appData/upload nfs noatime,nosuid,noexec,nodev 0 0
|
挂载测试
1
2
3
4
5
6
7
8
9
| # umount/www/appData/upload/
# mount -a
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 243G 4.8G 226G 3% /
tmpfs 101G 0 101G 0% /dev/shm
/dev/sda1 772M 32M 700M 5% /boot
172.16.11.15:/www/appData/upload
2.7T 5.8G 2.6T 1% /www/appData/upload
|
3.2 查看挂载状态和参数 1
2
| # cat/proc/mounts|grep upload
172.16.11.15:/www/appData/upload/www/appData/upload nfs4rw,nosuid,nodev,noexec,noatime,vers=4,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=172.16.11.10,minorversion=0,local_lock=none,addr=172.16.11.150 0
|
使用rpcinfo查看rpc信息
使用nfsstat查看nfs的状态
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| #nfsstat -l
nfs v4 client total: 110127
-------------------------- --------
nfs v4 client write: 1
nfs v4 client open: 55000
nfs v4 client open_conf: 3
nfs v4 client close: 55000
nfs v4 client setattr: 2
nfs v4 client fsinfo: 9
nfs v4 client renew: 25
nfs v4 client setclntid: 2
nfs v4 client confirm: 2
nfs v4 client access: 17
nfs v4 client getattr: 20
nfs v4 client lookup: 13
nfs v4 client lookup_root: 3
nfs v4 client remove: 1
nfs v4 client pathconf: 6
nfs v4 client statfs: 4
nfs v4 client readdir: 4
nfs v4 client server_caps: 15
|
使用-o选项查看网络状态
3.3 NFS挂载优化 1
2
3
4
| noexec:不允许执行二进制文件
nodev:不读文件系统上的字符或块设备
nosuid:关闭set-user-identifier(设置用户ID)与set-group-identifer(设置组ID)设置位
noatime:每次存取时不更新inode的存取时间
|
优化内核参数:/etc/sysctl.conf
1
2
3
4
5
6
| cat >>/etc/sysctl.conf<<EOF
net.core.rmem_default=8838608
net.core.wmem_default=262144
net.core.rmem_max=16777216
net.core.wmem_max=1048576
EOF
|
3.4 性能测试 读取文件速度测试
1
2
3
4
5
6
7
| # ll -h/www/appData/upload/services
-rw-r--r-- 1nfsnobody nfsnobody 626K 9月 6 14:53 /www/appData/upload/services
cp /etc/services/www/appData/upload
# time for((i=1;i<500;i++));do cat /www/appData/upload/services >/dev/null;done
real 0m1.562s
user 0m0.227s
sys 0m0.654s
|
写入文件测试
1
2
3
4
5
6
7
| [iyunv@wcweb01upload]# time dd if=/dev/zero of=/www/appData/upload/testbigfile bs=1Mcount=1000
记录了1000+0 的读入
记录了1000+0 的写出
1048576000字节(1.0 GB)已复制,10.1055 秒,104 MB/秒
real 0m10.109s
user 0m0.002s
sys 0m1.599s
|
|