NFS
NFS服务
1. 简介
NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源。让不同的机器、不同的操作系统可以共享彼此的文件。
2. 工作原理
1)首先服务器端启动RPC服务,并开启111端口
2)服务器端启动NFS服务,并向RPC注册端口信息
3)客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口
4)服务端的RPC(portmap)服务反馈NFS端口信息给客户端。
5)客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。
NFS相关进程说明:
nfsd(rpc.nfsd):rpc.nfsd的主要功能是管理NFS客户端是否能够登录NFS服务端主机,其中还包含登入者的ID判别等。
mountd(rpc.mountd) rpc.mountd的主要功能则是管理NFS文件系统,检查权限。
rpc.rquotad:磁盘限额相关。
rpc.lockd 可用来锁定文件,用于多客户端同时写入
rpc.statd检查文件的一致性,与rpc.lockd有关,c,d,两个服务需要客户端服务器端同时开才可以
3. 部署
安装rpcbind和nfs (yum安装nfs-utils会自动安装rpcbind)
[root@nfs01 ~]# yum install -y nfs-utils rpcbind
查看软件信息
[root@nfs01 ~]# rpm -qa nfs-utils rpcbind
rpcbind-0.2.0-16.el6.x86_64
nfs-utils-1.2.3-78.el6_10.1.x86_64
[root@nfs01 ~]# rpm -qf /sbin/mount.nfs
nfs-utils-1.2.3-78.el6_10.1.x86_64
启动服务:(先启动rpcbind,然后启动nfs)
[root@nfs01 ~]# /etc/init.d/rpcbind start
[root@nfs01 ~]# /etc/init.d/nfs start
查看rpcbind和nfs对应情况
[root@nfs01 ~]# rpcinfo -p localhost
查看进程
[root@nfs01 ~]# ps -ef | grep -E "nfs|rpcbind"
服务端配置文件:/etc/exports
[root@nfs01 ~]# man exports
[root@nfs01 ~]# cat /etc/exports
/nfs 172.16.1.0/24(rw,all_squash,sync)
授权:
[root@nfs01 ~]# chown -R nfsnobody.nfsnobody /nfs/
重启服务端:
[root@nfs01 ~]# /etc/init.d/nfs reload
[root@nfs01 ~]# exportfs -rv
验证生效:
[root@nfs01 ~]# showmount -e
Export list for nfs01:
/nfs 172.16.1.0/24
查看已经共享的目录:
[root@nfs01 ~]# exportfs -v
查看nfs服务默认配置信息
[root@nfs01 ~]# cat /var/lib/nfs/etab
本地测试挂载:
[root@nfs01 ~]# mount -t nfs 172.16.1.31:/nfs /mnt/
卸载:
[root@nfs01 ~]# umount /mnt/
强制卸载:
[root@nfs01 ~]# umount -lf /mnt
加入开机自启动
[root@nfs01 ~]# chkconfig rpcbind on
[root@nfs01 ~]# chkconfig nfs on
开机自启动检查
[root@backup ~]# chkconfig | awk '$1~/nfs$|rpcbind/'
查看客户端哪个客户端连接了:
[root@nfs01 ~]# netstat -tunp |grep 172.16.1.31:2049
客户端挂载:
[root@backup ~]# yum install nfs-utils -y (yum安装nfs-utils会自动安装rpcbind)
[root@backup ~]# mount -t nfs 172.16.1.31:/nfs /mnt (并未启动rpcbind)
[root@backup ~]# /etc/init.d/rpcbind status
rpcbind is stopped
配置文件常用写法:
|
授权说明 |
配置方法 |
说明 |
|
授权单一客户端访问NFS |
10.0.0.30 |
一般情况,生产环境中此配置不多 |
|
授权整个网段可访问NFS |
10.0.0.0/24 |
其中的24等同于 |
|
授权整个网段可访问NFS |
10.0.0.* |
指定网段的另外一种写法(不推荐使用) |
|
授权某个域名客户端访问 |
nfs.luffycity.com |
此方法生产环境不常使用 |
|
授权整个域名客户端访问 |
*.luffycity.com |
此方法生产环境不常使用 |
控制参数:
|
参数名字 |
参数作用 |
|
rw |
read-write,表示可读写权限 |
|
ro |
read-only,表示只读权限 |
|
sync |
(同步,实时)请求或写入数据时,数据同步写入到NFS server的硬盘后才返回 |
|
async |
(异步)写入时数据会先写到内存缓冲区,只到硬盘有空挡才会再写入磁盘,这样可以提升写入效率,风险为若服务器宕机或不正常关机,会损失缓冲区中未写入磁盘的数据(解决办法:服务器主板电池加UPS,AB(双路电源)不间断电源) |
|
no_root_squash |
访问NFSserver共享目录的用户如果是root的话,它对该共享目录具有root权限,这个配置原本是为无盘客户端准备的,用户应避免使用。 |
|
root_squash |
如果访问NFSserver共享目录的用户是root,则它的权限将被压缩成匿名用户,同时它的UID和GID通常会变成nfsnobody账号身份, |
|
all_squash |
不管访问NFSserver共享目录的用户身份如何,它的权限都将被压缩成匿名用户(nfsnobody),同时它的UID和GID都会便哼nfsnobody账号身份,在早期多个NFS客户端同时读写NFSserver数据时,这个参数是很有用的 |
|
anonuid |
指定的是匿名用户的UID或GID数字 |
|
anongid |
同anonuid,区别就是把UID换成GID |
配置实例:
通常情况下是将/data目录的权限设置成755,属主属组为nfsnobody用户。
①允许root用户映射nfsnobody,不允许其他用户映射
/data 172.16.1.0/24(rw,sync,no_all_squash,root_squash)
此情况下,仅root用户会映射为nfsnobody身份。其他用户依旧使用自己的身份,再根据文件系统权限判断是否可读可写。
②将所有用户映射为nfsnobody用户
/data 172.16.1.0/24(rw,sync, all_squash)
此情况下,所有用户映射为nfsnobody身份,然后根据文件系统权限判断可否读写
③指定映射成某个用户身份,不使用默认的nfsnobody用户。前提:服务端和客户端都存在uid、gid为500的用户。
/data 172.16.1.0/24(rw,sync, all_squash,anonuid 500,anongid=500)
此情况下,所有用户都映射为uid为500,gid为500的用户身份,在根据系统权限判断是否可读写。
nfs mount参数:
|
nfs mount 参数 |
参数功能 |
默认参数 |
|
fg(foreground) |
当在客户端执行挂载时,可选择是前台(fg)还是在后台(bg)执行。若在前台执行,则mount会持续尝试挂载,知道成功或挂载时间超时为止,若在后台执行,则mount会在后台持续多次进行mount,而不会影响到前台的其他程序操作。如果网络联机不稳定,或是服务器常常需要开关机,简易使用bg比较妥当 |
fg |
|
soft |
当NFS Client以soft挂载server时,若网络或server出现问题,造成client和setver无法传输资料,client就会一直尝试,知道timeout后显示错误才停止。若使用soft mount的话,可能会在timeount后显示错误才停止。 |
hard |
|
intr |
当使用hard挂载的资源timeout后,若有指定intr参数,可以在timeout后把它中断掉,这避免出问题时系统整个被NFS锁死,简易使用intr |
无 |
|
rsize |
读出(rsize)与写入(wsize)的区块大小(block size),这个设置值可以影响客户端与服务器端传输数据的缓冲存储量,一般来说,如果在局域网内(LAN),并且客户端与服务器端都御用足够的内存,这个值可以设置大一点,比如说65535(bytes),提升缓冲区块将可提升NFS文件系统的传输能力。但设置的值也不要太大,最好以网络能够传输的最大值有限。 |
C6默认值 |
|
protoudp |
使用UDP协议来传输资料,在LAN中会比较好的性能,若要跨越Internet的话,使用proto=tcp多传输的数据会有比较好的纠错能力 |
proto=tcp |
示例:mount -t nfs -o fg,hard,intr,rsize=131072,wsize=131072 172.16.1.31:/nfs/ /mnt
mount 参数:
|
参数 |
参数意义 |
系统默认值 |
|
suid |
当挂载的文件系统上有任何SUID的程序时,只要使用nosuid就能够取消设置SUID的功能 |
suid |
|
rw |
可以指定文件系统是只读(ro)或可写(rw) |
rw |
|
dev |
是否可以保留装置文件的特殊功能?一般来说只有/dev才会有特殊的装置,因此可以选择nodev |
dev |
|
exec |
是否具有执行文件的权限,如果想要挂载的仅是普通资源数据区(例如:图片,附件),那么可以选择noexec |
exec |
|
auto |
这个auto指的是“mount -a”时会不会备挂载的项目,如果不需要这个分区随时被挂载,可以设置为noauto /etc/fstab |
auto |
|
atime |
在每一次数据访问时,会同步更新访问文件的inode时间戳,时默认选项,在高并发的情况下,简易通过明确加上noatime,来取消这个默认项,以达到提升I/O性能,优化I/O的目的 |
|
|
defaults |
这是fstab里的默认值,包括rw,suid,dev,exec,auto,nouser,async,relatime。默认情况大部分都时默认值 |
|
|
noatime |
访问文件不更新文件的inode时间戳,高并发环境,锐减显示应用该选项,可以提高系统I/O性能 |
|
|
nodiratime |
不更新文件系统上的directory inode时间戳。高并发环境,锐减显示应用该选项,可以提高系统I/O性能 |
无 |
救援模式:mount -o rw,remount /
4. 优化
硬件:sas/ssd磁盘,买多块,硬件raid,制作raid5或raid10.网卡吞吐量要大,至少千兆
NFS服务器配置/data 10.0.0.0/24(rw,sync,all_squash,anonuid=65524,)
NFS客户端挂载优化配置命令:
mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,rsize=131071,wsize=131072 10.0.0.7:/data/ /mnt # 兼顾安全性能
对NFS服务的所有服务器内核进行优化时,执行如下命令:
cat >> /etc/sysctl.conf << EOF
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
EOF
[root@nfs01 data]# ll /proc/sys/net/core/?mem*
大型网站NFS网络文件系统的替代软件为分布式文件系统 Moosefs(mfs),GlusterFS(大文件),FastDFS
5. 优缺点
优点:
- 简单,容易上手,容易掌握
- NFS文件系统内数据是在文件系统之上的,即数据是能看得见的。
- 部署快速,维护简单方便,且可控,满足需求得就是最好的。
- 可靠,从软件层面上看。数据可靠性高,经久耐用。数据是文件系统之上的
- 服务非常稳定
局限:
- 存在单点故障,如果NFSserver宕机了,所有客户端都不能访问共享目录
- 在大数据高并发的场合,NFS效率,性能有限。(2千万/日以下PV(page view)的网站不是瓶颈,除非网站架构设计太差)
- 客户端认证是基于IP和主机名的,权限要根据ID识别,安全性一般(用于内网则问题不大)
- NFS数据是明文的,NFS本身不对数据完整性作验证。
- 多台客户机器挂载一个NFS服务器时,连接管理维护麻烦(耦合度高)。尤其NFS服务端出问题后,所有NFS客户端都处于挂掉状态,(测试环境可使用autofs自动挂载解决,正式环境可修复NFS服务或强制卸载)
- 涉及了同步(实时等待)和异步(解耦)的概念,NFS服务端和客户端相对来说就是耦合度有些高。网站程序也是一样,尽量不要耦合度太高,系统及程序架构师的重要职责就是为程序及架构解耦,让网站的扩展性变得更好
6. 问题记录
强制卸载:umonut -lf /mnt
7. 其他
测试磁盘的读写(性能/速度)
1.dd+for
time dd if=/dev/zero of=/nfsfolder/testfile bs=16k count=16384
time dd if=/nfsfolder/testfile of=/dev/null bs=16k
2.测试随机读写(io)fio (epel源)

浙公网安备 33010602011771号