首页 > 其他 > 详细

4)NFS深度优化与企业方案

时间:2017-02-08 19:31:35      阅读:1131      评论:0      收藏:0      [点我收藏+]

NFS客户端mount挂载深入

NFS客户端mount挂载参数说明

在NFS服务端可以通过 cat /var/lib/nfs/etab查看NFS服务端配置参数的细节。在NFS客户端可以通过cat /proc/mounts 查看mount的挂载参数的细节,也可以 df -h。

1)mount挂载及fstab文件说明。

法一:
[root@web01 ~]# mount -t nfs -o bg,hard,intr,rsize=131072,wsize=131072 172.16.1.31:/data/ /mnt

[root@web01 ~]# df -h
Filesystem          Size  Used Avail Use% Mounted on
/dev/sda3            19G  956M   17G   6% /
tmpfs               491M     0  491M   0% /dev/shm
/dev/sda1           190M   51M  129M  29% /boot
172.16.1.31:/data/   19G  958M   17G   6% /mnt

法二:

[root@web01 ~]# mount -t nfs 172.16.1.31:/data /mnt/

[root@web01 ~]# df -h
Filesystem         Size  Used Avail Use% Mounted on
/dev/sda3           19G  956M   17G   6% /
tmpfs              491M     0  491M   0% /dev/shm
/dev/sda1          190M   51M  129M  29% /boot
172.16.1.31:/data   19G  958M   17G   6% /mnt

如何强制卸载mount。

[root@web01 ~]# cd /mnt/
[root@web01 mnt]# umount /mnt/
umount.nfs: /mnt: device is busy
umount.nfs: /mnt: device is busy

法一:退出当前要卸载的目录再执行卸载命令

法二:
umount -lf /mnt/

把man mount后的-o参数中英翻译对比

下面是mount命令的-o选项后面可以接的参数,注意,有些选项只有出现在/etc/fstab里才有效,下面这些选项可以应用在绝大多数文件系统上,但是sync仅适合ext2、ext3、fat、vfat和ufs等文件系统。

·async:涉及文件系统I/O的操作都是异步处理,即不会同步写到磁盘,
此参数会提高性能,但会降低数据安全。一般情况,生产环境下不推荐使用。
除非对性能要求很高,对数据可靠性不要求的场合。

·sync:该参数与async相反。有I/O操作时,都会同步处理I/O,
即把数据同步写入硬盘。此参数会牺牲一点I/O性能,
但是,换来的是掉电后数据的安全性。※

·atime:在每一次数据访问时,会同步更新访问文件的inode时间戳,
是默认选项,在高并发的情况下,建议通过明确加上noatime,
来取消这个默认项,以到达提升I/O性能,优化I/O的目的。

·ro:以只读的方式挂载一个文件系统。

·rw:以可写的方式挂载一个文件系统。※

·auto:能够被自动挂载通过-a选项。

·noauto:不会自动挂载文件系统。

·defaults:这是fstab里的默认值,
包括rw、suid、dev、exec、auto、nouser、async,默认情况大部分都是默认值。

·exec:允许文件系统执行二进制文件,取消这个参数,可以提升系统安全性。

·noexec:在挂载的文件系统中不允许直接执行任何二进制的程序,
注意,仅对二进制程序有效,即使设置了noexec、shell,php程序还是可以执行的。*

·noatime:访问文件时不更新文件的inode时间戳,高并发环境下,
推荐显式应用该选项,可以提高系统I/O性能。※

·nodiratime:不更新文件系统上的directory inode时间戳,
高并发环境,推荐显式应用该选项,可以提高系统I/O性能。※

·nosuid:不允许set-user-identifier or set-group-identifier位生效。*

·suid:允许set-user-identifier or set-group-identifier位生效。

·nouser:禁止一个普通用户挂载该文件系统,这是默认挂载时的默认选项。

·remount:尝试重新挂载一个已经挂载了的文件系统,
这通常被用来改变一个文件系统的挂载标志,从而使得一个只读文件系统变的可写,
这个动作不会改变设备或者挂载点。当系统故障时进入single或rescue模式修复系统时,
会发现根文件系统经常会变成只读文件系统,不允许修改,此时该命令就派上用场了。
具体命令为:mount-o remount,rw/,表示将根文件系统重新挂载使得可写。
single或rescue模式修复系统时这个命令十分重要。※

·dirsync:目录更新时同步写入磁盘。*
其中,标有“※”的为性能优化重要选项,标有“*”的为安全优化重要选项。
一般情况安全的参数和性能参数是对立的,即越安全性能就越差。

93)fstab修改错误导致系统无法启动故障修复案例

解决方法:
维护模式或救援模式:
mount -o rw,remount
然后修改/etc/fstab

94)文件系统只读故障修复案例

1)rsync bug
2)文件系统内部自动一致性(只读)
维护模式或救援模式:
mount -o rw,remount /
案例:
http://blog.sina.com.cn/s/blog_4a2fadfb010131jf.html

NFS客户端挂载优化

mount挂载优化(有些参数也适合其他文件系统),一般来说要适当加挂载参数,但是,最好是先做好测试,用数据来说话,才能更好地确定到底是挂载还是不挂载。

1.有关系统安全挂载参数选项 在工作场景,一般来说,NFS服务器共享的只是普通静态数据(图片、附件、视频),不需要执行suid、exec等权限,挂载的这个文件系统只能作为数据存取之用,无法执行程序,对于客户端来讲增加了安全性,例如:很多木马篡改站点文件都是由上传入口上传的程序到存储目录,然后执行的。

因此在挂载的时候,用下面的命令很有必要:

mount -t nfs -o nosuid,noexec,nodev,rw 10.0.0.7:/data /mnt

通过mount-o指定挂载参数与在/etc/fstab里指定挂载参数的效果是一样的。 网络文件系统和本地的文件系统效果也是一样的。

mount挂载性能优化参数选项

下面几个在我在工作环境下,NFS性能优化挂载的经历。

1)禁止更新目录及文件时间戳挂载,命令如下:

mount -t nfs -o noatime,nodiratime 10.0.0.7:/data

2)安全加优化的挂载方式如下:

mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=131072,wsize=131072 10.0.0.7:/data /mnt

3)默认的挂载方式如下:

mount -t nfs 10.0.0.7:/data /mnt

如果是本地文件系统,使用如下命令:

[root@nfs-server bbs]# mount /dev/sdb1 /mnt -o defaults,async,noatime,data=writeback,barrier=0

[root@nfs-server bbs]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             5.2G  3.5G  1.5G  71% /
/dev/sda1             190M   12M  169M   7% /boot
tmpfs                 249M     0  249M   0% /dev/shm
/dev/sdb1             892M   24M  817M   3% /mnt

[root@c58-nfs-server bbs]# grep mnt /proc/mounts 
/dev/sdb1 /mnt ext3 rw,noatime,data=writeback 0 0
本地文件系统挂载时,如果加nodirtime会报错。

[root@c58-nfs-server bbs]# mount /dev/sdb1 /mnt -o defaults,async,noatime,nodirtime,data=writeback,barrier=0
mount: wrong fs type,bad option,bad superblock on /dev/sdb1,
    missing codepage or other error
    In some cases useful info is found in syslog - try
    dmesg | tail  or so

根据前面的测试我们知道,默认情况下NFS Server共享目录的参数默认配置为WSIZE和RSIZE,它们设定了NFS Server和NFS Client之间往来数据块的大小。

WSIZE和RSIZE的大小最好是1024的倍数,对于NFSV2来说,8192是RSIZE和WSIZE的最大数值,如果使用的是NFSV3,则可以尝试设置32768,如果是NFSV4可以到65536或更大。

如果在客户端挂载时使用了这两个参数,可以让客户端在读取和写入数据时,一次性读写更多的数据包,这可以提升访问性能和效率。

除此之外,还有noatime、nodiratime性能优化选项,这两个选项是说在读写磁盘的时候,不更新文件和目录的时间戳(即不更新文件系统中文件对应inode信息),这样就可以减少和磁盘系统的交互,提升读取和写入磁盘的效率,因为磁盘是机械的,每次读写都会消耗磁盘I/O,而更新文件时间戳对于工作数据必要性不大,最大问题是增加了访问磁盘I/O的次数,拖慢系统性能。

以下是NFS网络文件系统优化挂载的参数建议。

在CentOS 6.6 x86_64服务器端和客户端环境下,可使用如下命令参数:

mount -t nfs -o noatime,nodiratime,nosuid,noexec,nodev,rsize=131072,wsize=131072  10.0.0.7:/data  /mnt

经过实际测试,CentOS 6.6 x86_64默认的挂载参数性能还是不错的。

mount -t nfs 10.0.0.7:/data  /mnt

注意:非性能的参数越多,速度可能会越慢。根据具体的业务需要以及实际测试效果选择挂载参数。

3.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_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
EOF

[root@nfs01 backup]# sysctl -p

4.企业生产场景NFS共享存储优化小结

1)硬件:sas/ssd磁盘,买多块,硬件raid5/raid10。网卡吞吐量要大,至少千兆(多块bond)。

2)NFS服务器端配置:

/data 10.0.0.0/24(rw,sync,all_squash,anonuid=65534,anongid=65534)

3)NFS客户端挂载优化配置命令:

mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,rsize=131072,
wsize=131072 10.0.0.7:/data/ /mnt ←兼顾安全性能

4)对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

执行sysctl-p生效。

5)如果卸载的时候提示“umount:/mnt:device is busy”,需要退出挂载目录再进行卸载,如果是NFS server宕机了,则需要强制卸载,可执行umount-lf/mnt。

6)大型网站NFS网络文件系统的替代软件为分布式文件系统Moosefs(mfs)、GlusterFS(大文件)、FastDFS。

NFS系统应用的优缺点说明

NFS服务可以让不同的客户端挂载使用同一个共享目录,也就是将其作为共享存储使用,这样可以保证不同节点客户端数据的一致性,在集群架构环境中经常会用到。如果是Windows和Linux混合环境的集群系统,可以用samba来实现。

优点:

1)简单,容易上手,容易掌握。

2)NFS文件系统内数据是在文件系统之上的,即数据是能看得见的。

3)部署快速,维护简单方便,且可控,满足需求就是最好的。

4)可靠,从软件层面上看,数据可靠性高,经久耐用。数据是在文件系统之上的。

5)服务非常稳定。

局限:

1)存在单点故障,如果NFS Server宕机了,所有客户端都不能访问共享目录。这个在后期会通过负载均衡及高可用方案弥补。

2)在大数据高并发的场合,NFS效率、性能有限(2千万/日以下PV的网站不是瓶颈,除非网站架构设计太差)。

3)客户端认证是基于IP和主机名的,权限要根据ID识别,安全性一般(用于内网则问题不大)。

4)NFS数据是明文的,NFS本身不对数据完整性进行验证。

5)多台客户机器挂载一个NFS服务器时,连接管理维护麻烦(耦合度高)。
尤其当NFS服务器端出问题后,所有NFS客户端都处于挂掉状态
(测试环境可使用autofs自动挂载解决,正式环境可修复NFS服务或强制卸载)。

6)涉及了同步(实时等待)和异步(解耦)的概念,
NFS服务器端和客户端相对来说就是耦合度有些高。
网站程序也是一样,尽量不要耦合度太高,
系统及程序架构师的重要职责就是为程序及架构解耦,让网站的扩展性变得更好。

应用建议:

1)对于大中小型网站(参考点2000万/日PV以下)线上应用,都有用武之地。

2)门户网站也会有应用,生产场景应该多将数据的访问往前推,即尽量将静态存储里的资源通过CDN或缓存服务器提供服务,如果没有缓存服务或架构不好,存储服务器数量再多也是扛不住压力的,而且用户体验会很差。

NFS涉及的相关知识

showmount 命令

show mount information for an NFS server 显示一个NFS服务器挂载信息。一般用于从NFS客户端检查NFS服务器端共享目录情况,其常用的参数为

-e:--exports

显示NFS服务器输出的目录列表
[root@web01 mnt]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data1 172.16.1.0/24
/data  172.16.1.0/24

-d:--directories

显示NFS服务器中提供的共享的目录
showmount -d 172.16.1.31

-a:--all

以ip:/dir格式显示NFS服务器的IP地址和可被挂载的目录。
showmount -a 172.16.1.31

exportfs 命令

exportfs -rv 命令相当于/etc/init.d/nfs reload,该带参数的命令用于使使新加载的配置生效,除此之外,通过exportfs命令,我们还可以管理当前NFS共享的文件系统目录列表。

在启动了NFS服务之后,如果此时修改了/etc/exports,就需要重新启动NFS,使修改的配置文件生效。这个适合就可以用exportfs命令来完成。 下面就看看exportfs的语法,如下:

/usr/sbin/exportfs [-avi] [-o options,..] [client:/path ..]
/usr/sbin/exportfs -r [-v] 相当于/etc/init.d/nfs reload
/usr/sbin/exportfs [-av] -u [client:/path ..]
/usr/sbin/exportfs [-v]
/usr/sbin/exportfs -f

/usr/sbin/exportfs [ -a ] [ -v ] [ -u ] [ -i ] [ -fFile ] [ -oOption
[,Option ... ] ] [ Directory ]

2.exportfs命令参数的使用方法

1)重新加载配置使修改生效,实现这个功能的命令为:exportfs-rv,该命令相当于/etc/init.d/nfs reload。

2)管理当前NFS共享的文件系统目录列表。 下面的示例将不通过/etc/exports文件,而是通过exportfs命令来共享NFS存储目录,具体命令如下。

[root@C64-A ~]# exportfs -o rw,sync 10.0.0.7:/data

[root@C64-A ~]# showmount -e localhost
Export list for localhost:
/mnt           10.0.0.7
/data 10.0.0.0/24  #<==这就是上述exportfs命令共享/data目录的结果
/data/r_shared 10.0.0.0/24
/data      10.0.0.0/24
还可以指定其他参数共享/data目录,例如增加了“all_squash,anonuid=888,anongid=888”3个参数,设置NFS共享的命令为:

[root@oldboy data]# exportfs -o rw,sync,all_squash,anonuid=888,anongid=888 10.0.0.0/24:/data

[root@oldboy data]# showmount -e localhost|grep data
/data  10.0.0.0/24

本章重点回顾

1)NFS服务的访问原理流程。

2)NFS作为集群共享存储角色的搭建、部署。

3)NFS作为集群共享存储角色的排障,高级优化。

4)mount命令的知识及参数,如-o(noatime,nodirtime,noexec,nosuid,rsize,wsize)等。

5)fstab文件的知识。

6)常用命令showmount,exportfs,umount(-lf),rpcinfo。

7)NFS的优点、缺点,适合的应用场景,替代产品(FastDFS、Moosefs(mfs)、GlusterFS)。

4)NFS深度优化与企业方案

原文:http://www.cnblogs.com/aofo/p/6379580.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!