NFS文件系统-挂载和优化
NFS常用挂载参数介绍
参数 | 说明 | 建议 |
---|---|---|
soft/hard | 软挂载方式挂载系统,若NFS请求超时,则客户端向调用程序返回错误;如果使用硬连接方式则客户端一直重新请求直至成功。默认为hard | 对于关键数据业务,不希望业务由于网络延迟或服务器服务重启或短暂的过载等情况而中断,建议挂载时使用hard参数;对于非关键数据业务,希望客户端程序能尽快响应,可以使用soft参数。 |
timeo/retrans | 客户端重传请求前等待时间。对于基于TCP的NFS服务,默认等待重传时间为60s。使用TCP协议时,NFS Client不执行任何超时backoff。对于UDP协议,client使用一个合适的算法,为常用的请求类型estimate合适的超时时间。但对不常用的请求类型使用timeo设置。如果timeo没有设置,不常用的请求类型1.1秒以后重试。在每次重发后,NFS Client会将timeout时间加倍,直到最大的60秒。retrans客户端返回错误前的重传次数。默认为重传3次。retrans与soft参数一起使用时才有效。 | timeo、retrans这两个参数选择主要取决于网络性能。对于网络吞吐量小,延时高,抖动高,丢包率大的情况,建议将timeo,retrans两个参数值设置大一些。对于网络吞吐量大,延时低,抖动低,丢包率小的情况,建议将timeo,retrans两个参数值设置小一些。具体设置值因网络状况而定。 |
resize | 每个READ命令字向服务器读取文件的最大字节数。实际数据小于或等于此值。resize必须是1024倍数的正整数,小于1024时自动设为4096,大于1048576时自动设为1048576。默认时,服务器和客户端进行协商后设置。 | 通常使用默认值,由客户端和服务器协商设置。对于拥塞的低速网络,可以将该值调小,向服务器发送较短的请求包来提高NFS性能。对于高速网络,可以将该值增大,减少向服务器发送的请求包,获得性能的提升。 |
wsize | 每个WRITE命令字向服务器写入文件的最大字节数。实际数据小于或等于此值。resize必须是1024倍数的正整数,小于1024时自动设为4096,大于1048576时自动设为1048576。默认时,服务器和客户端进行协商后设置。 | 通常使用默认值,由客户端和服务器协商设置。对于拥塞的低速网络,可以将该值调小,向服务器发送较小的请求包来提高NFS性能。对于高速网络,可以将该值增大,减少向服务器发送的请求包,获得性能的提升。 |
async/sync | 同步、异步挂载,客户端默认异步(async)。对于异步挂载,客户端下发的写数据会先缓存在内存中,达到一定大小或者其他条件(与客户端设置,状态有关),再一起发往服务端。而同步挂载,每次下发的写数据马上发到服务端。 | 建议用默认的异步挂载,可以提高业务性能。对于客户端应用层来说,完全感知不到数据是否发往服务端,只能感知数据已经写成功。同步挂载要求每个请求立即发到服务端,增加了请求连接、发送次数,对于小io场景性能差异很明显(io越小,差异越大,一般都能达到几倍甚至更大的差异)。对于异步挂载,可能在查看io性能显现为性能波动。在客户端写入缓存期间iops可能就低,因为数据还未发到服务端。但是性能是完全正常的,应该说比同步更好。如果是要要追求界面上的平稳,那就建议改为同步挂载。(补充:追求一次小io的数据全部刷到服务端稳定存储时间小,不仅要求客户端同步挂载,还需要服务端共享也是同步导出,否则需要加上手动commit刷盘)。 |
ac/noac | 设置是否缓存文件属性。为了提高性能,NFS客户端缓存文件属性(默认ac),然后每隔一段时间去检查文件属性后更新。在缓存有效期内,客户端不检测服务器上文件属性是否改变。默认为ac。 | 当服务器上共享文件的属性频繁地被多个客户端改变时,建议使用noac选项,或者使用ac并配合使用较小的acregmin/acregmax/acdirmin/acdirmax设置,这样就能获得较好的属性一致性。当服务器上共享文件的属性不会被频繁改变时,例如文件共享为只读,或者网络性能较好,建议使用默认的ac选项,然后根据实际的网络状况来调整acregmin/acregmax/acdirmin/acdirmax设置。 |
Actimeo | 将acregmin/acregmax/acdirmin/acdirmax四个参数设置为相同时间,单位为秒。 | |
cto/nocto | 设置是否使用“关闭打开”缓存一致的特性。通常客户端打开文件时检查是否存在以及是否有权限,当关闭文件时刷新更改。当设置为nocto时,客户端使用非标准的试探来检查服务器上文件是否改变,对于只读和文件更改较少时情形有助于提高性能。 | |
tcp/udp | proto=tcp和proto=udp选项 | 在不稳定的复杂网络推荐使用tcp,稳定的网络下可以使用udp |
rdirplus/nordirplus | 设置是否使用NFS3的READDIRPLUS请求。默认为READDIRPLUS |
1 查看挂载配置:
cat /var/lib/nfs/etab 查看NFS服务器端配置参数的细节
cat /proc/mounts 查看客户端mount的挂载参数细节
2 NFS客户端mount挂载参数说明
fg/bg 默认[fg],在客户端执行挂载时,可以选择在前台(fg)执行还是在后台(bg)执行
soft/hart 默认[hart]当网络和server出问题时,soft参数会在超时后停止挂载,hard参数会一直挂载直到成功(但可能造成客户端无响应,常配合intr参数使用)
intr 当hard挂载资源timeout后,若使用intr参数可在超时后终端挂载,防止NFS锁死
resize/wsize 读出和写入的区块大小,影响客户端与服务器段传输数据的缓冲存储量
proto=tcp 默认[tcp]传输使用的协议,跨internet建议tcp有较好的纠错能力,内网建议用udp提高性能
3 挂载模式建议:
追求极致:
mount -t nfs -o fg,hart,intr,resize=13107,wsize=131072 172.16.1.31:/date/ /mnt
简单易用:
mount -t nfs 172.16.1.31:/date/ /mnt
# 默认参数能满足大部分需求
4 mount -o可以使用的参数说明(红色默认值)
ro/rw ■以只读/读写方式挂载
dev/nodev 是否保留装置文件的特殊功能,如分区和光驱的区别,建议一般nodev
sync/async ●直接同步写入磁盘,还是异步先写入内存再后续写入硬盘
auto/noauto 允许/不允许以–a选项进行自动挂载
exec/noexec ●是否具有执行文件的权限,如果挂载的用途是数据存储,建议noexec
suid/nosuid ●挂载的文件系统,是否取消suid这个权限
user/nouser 是否允许一般用户的挂载与卸载功能
dirsync ●目录更新时同步写入磁盘
remount 尝试重新挂载已经挂载了的文件系统
noatime ■访问文件时不更新文件inode中的时间戳,高并发环境可提高性能
nodiratime ■同上,不更新目录的访问时间戳atime
defaults 使用所有选项的默认值(auto、nouser、rw、suid)
loop 挂载“回旋设备”以及“ISO镜像文件”
●表示安全优化参数,■表示性能优化参数,安全和性能是对立的
remount参数很重要,在文件系统变为只读后,进入单用户模式修复时,要使用mount -o remount,rw /**
来重新挂载目录
以上参数有部分只在fatab中有效,sync至在ext234\fat\vfat\ufat中有效
5 企业生产环境下NFS优化挂载3种常见用法
1)默认挂载
mount -t nfs IP:目录 /挂载点
# 其实centos的默认挂载性能已经非常不错了
2)性能优化
# 减少更新访问时间戳产生的磁盘I/O
mount -t nfs -o noatime,nodiratime IP:目录 /挂载点
3)安全优化
# 进行执行和提权执行,防挂马
mount -t nfs -o nosuid,noexec,nodev IP:目录 /挂载点
4)安全和性能都优化
mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=131072,wsize=131072 IP:目录 /挂载点
注意:本地文件系统挂载时不能加odiratime选项,会报错
6 NFS内核优化说明和建议
proc/sys/net/core/rmem_default 指定接收套接字的缓冲区默认大小(默:124928)
proc/sys/net/core/rmem_max 指定接收套接字的缓冲区的最大值(默:124928)
proc/sys/net/core/wmem_default 指定发送套接字的缓冲区默认大小(默:124928)
proc/sys/net/core/wmem_max 指定发送套接字的缓冲区的最大值(默:124928)
优化命令如下:
cat >>/etc/sysctl.conf<<EOF
net.core.wmem_dafault = 8388608
net.core.rmem_dafault = 8388608
net.core.wmem_max = 16777216
net.core.rmem_max = 16777216
EOF
sysctl -p
7 企业场景NFS共享存储优化小结
-
硬件:SAS/SSD硬盘,组RAID10,网卡千兆,多块网卡做bond
-
NFS服务端配置优化:
/目录 ip网段(rw,sync,all_squash,anonuid=65535,anongid=65534)
-
NFS挂载客户端优化:
-o nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=131072,wsize=131072
-
NFS服务器内核优化:命令见上面,要执行sysctl -p使配置生效
-
大型网站可用分布式文件系统替换NFS,Moosefs(mfs)和FastDFS适合小文件系统,GlusterFS适合大文件系统
如果卸载的时候提示
umount: /mnt: device is busy
,需要退出挂载目录再进行挂载,如果是NFS server宕机了,则需要强制卸载,执行命令umount -lf /mnt
8 NFS系统的优缺点总结
优点:
1)简单,容易上手,容易掌握
2)数据直接可见,不想分布式文件系统数据不能直接看见
3)部署快速,维护简单方便且可控(满足要求的就是最好的)
4)可靠,数据可靠性高,经久耐用
5)服务非常稳定
缺点:
1)存在单点故障,可通过高负载和高可用方案弥补
2)大数据高并发下NFS效率和性能有限(但2千万/日PV以下都行,满足不了2千万那是架构太差)
3)FS数据是明文的,NFS本身不对数据完整性进行验证
4)多台客户机挂载一个NFS服务器时,连接管理维护麻烦,NFS服务器端出问题后,所有客户端都处于挂掉状态
5)耦合度高,一直存在连接,涉及同步(实时等待)和异步(解耦)概念,网站要尽量降低耦合度
建议:
对大中型网站(2000万/日PV以下)都有用武之地,在生产场景中,应该尽量多将数据访问往前退,将静态存储里面的资源通过CDN或缓存服务器提供服务,如果没有缓存服务或架构不好,存储服务器再多也扛不住,用户体验会很差,即使使用分布式文件系统也一样(CDN可以提供90-95%的数据访问服务,内存服务器3%,剩余的才是文件服务器提供的)
常用参数
①suid | nosuid: 当挂载的分区上面有任何SUID的二进制程序时,只要使用nosuid就可以取消SUID的功能
② rw | ro:可以指定文件系统是只读还是可读写。服务器可以提供读写,客户端可以仅允许只读。
③ dev | nodev: 一般只有/dev这个目录才会有特殊的设备,一般选择nodev
④ exec | noexec: 如果想要挂载是可执行的二进制文件,则选择exec,如果是类似与/home的数据分区,可以选择noexec即可
⑤user | nouser: 最好不允许用户进行挂载和卸载,不用修改,默认一般是nouser
⑥ fg | bg:若设置挂载的行为在前台执行可选择fg,此时mount会持续尝试挂载,直到成功或者
time out为止。
若设置挂载的行为在后台执行可选择bg,此时mount在后台持续进行挂载,而不会影响前
台的运行,建议用bg。
⑦ soft | hard:如果是hard的方式,则当两者之间有一方脱机,则rpc会持续呼叫,直到对方恢复连接为
止。
如果是soft的方式,那rpc会在一方脱机后重复呼叫而非持续呼叫,建议用soft。
⑧ intr : 当使用上面的hard方式挂载时,若加上intr这个参数,则当rpc持续呼叫时,该次的呼叫是可以被中断的。
⑨ rsize | wsize: 读写的区块大写(这说的真扯淡,根本听不懂。),简单解释说就是这个值影响到了NFS文件系统的传输能力,值越大,则传输能力越强。注意,这个值不能设置的太大,达到网络传输的最大值为限。
特别强调:如果NFS服务器是在高速运行的环境中的话,客户端挂载的时候最好加上上面这些参数。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。