标签(空格分隔):Linux实战教学笔记-陈思齐
1)什么是NFS?
2)NFS在企业中的应用场景
3)企业生产集群为什么需要共享存储角色。
上图是企业生产集群没有NFS共享存储访问的示意图。下图是企业生产集群有NFS共享存储的情况
下图是企业工作中的NFS服务器与客户端挂载情况结构图
客户端挂载NFS后,本地挂载基本信息显示如下:
当访问程序通过NFS客户端向NFS服务端存取文件时,其请求数据流程大致如下:
1)首先用户访问网站程序,由程序在NFS客户端上发出存取NFS文件的请求,这时NFS客户端(即执行程序的服务器)的RPC服务(rpcbind服务)就会通过网络向NFS服务器端的RPC服务(rpcbind服务)的111端口发出NFS文件存取功能的询问请求。
2)NFS服务端的RPC服务(rpcbind服务)找到对应的已注册的NFS端口后,通知NFS客户端的RPC服务(rpcbind服务)
3)此时NFS客户端获取到正确的端口,并与NFSdaemon联机存取数据
4)NFS客户端把数据存取成功后,返回给前端访问程序,告知给用户存取结果,作为网站用户,就完成了一次存取操作。
因为NFS的各项功能都需要向RPC服务(rpcbind服务)注册,所以只有RPC服务(rpcbind服务)才能获取到NFS服务的各项功能对应的端口号(portnumber),PID,NFS在主机所监听的IP等信息,而NFS客户端也只能通过向RPC服务(rpcbind服务)询问才能找到正确的端口。也就是说,NFS需要有RPC服务(rpcbind服务)的协助才能成功对外提供服务。从上面的描述,我们不难推断,无论是NFS客户端还是NFS服务器端,当要使用NFS时,都需要首先启动RPC服务(rpcbind服务),NFS服务必须在RPC服务启动之后启动,客户端无需启动NFS服务,但需要启动RPC服务。
注意:NFS的RPC服务,在CentOS5.X下名称为portmap,在CentOS6.x下名称为rpcbind
要部署NFS服务,需要安装下面的软件包:
注意:有关RPC协议知识这里大家不必细究,详细说明可见本章结尾命令部分。
可使用如下命令查看默认情况下CentOS6.x里NFS软件的安装情况。
rpm-qanfs-utilsrpcbind
当不知道软件名字时候,可以用rpm-qa|grep-E"nfs-|rpcbind"来过滤包含在引号内的字符串。grep-E这里相当于egrep。grep,egrep这两个命令在运维工作中非常常用并且很好用。CentOS6.8默认没有安装NFS软件包,可以使用yum-yinstallnfs-utilsrpcbind命令来安装NFS软件。
root@nfs01~]#yum-yinstallnfs-utilsrpcbind...忽略软件显示信息...[root@nfs01~]#rpm-qanfs-utilsrpcbindnfs-utils-1.2.3-70.el6_8.2.x86_64rpcbind-0.2.0-12.el6.x86_64如果出现rpcbind和nfs-utils开头的两个软件包,表示NFS服务端软件安装完毕
查看某个命令属于已经安装的哪个rpm包
[root@nfs01backup]#whichrpcinfo#查询命令绝对路径/usr/sbin/rpcinfo[root@nfs01backup]#rpm-qf/usr/sbin/rpcinfo#查询某个命令属于已经安装的哪个rpm包rpcbind-0.2.0-12.el6.x86_64[root@nfs01backup]#rpm-qf`whichshowmount`nfs-utils-1.2.3-70.el6_8.2.x86_641.4.1.1启动rpcbind因为NFS及其辅助程序都是基于RPC(remoteProcedureCall)协议的(使用的端口为111),所以首先要确保系统中运行了rpcbind服务。启动的实际操作如下:
[root@nfs01backup]#/etc/init.d/rpcbindstatus#检查rpcbind服务状态rpcbind已停[root@nfs01backup]#/etc/init.d/rpcbindstart#启动rpcbind服务正在启动rpcbind:[确定][root@nfs01backup]#rpcinfo-plocalhost#查看NFS服务向rpc服务注册的端口信息,因为NFS还没有启动,因此,没有太多注册的端口影射信息。programversprotoportservice1000004tcp111portmapper1000003tcp111portmapper1000002tcp111portmapper1000004udp111portmapper1000003udp111portmapper1000002udp111portmapper#提示:111端口为rpcbind服务对外提供服务的主端口1.4.3.2启动NFS服务[root@nfs01backup]#/etc/init.d/nfsstart#启动nfs服务启动NFS服务:[确定]关掉NFS配额:[确定]启动NFSmountd:[确定]启动NFS守护进程:[确定]StartingRPCidmapd:[OK]特别提示:如果不启动rpcbind服务直接启动nfs服务的会启动时失败。
[root@nfs01~]#ps-ef|egrep"rpc|nfs"root21792007:3800:00:00[rpciod/0]rpc25601007:4200:00:00rpcbindroot26051007:4200:00:00rpc.rquotad#磁盘配额进程(remotequotaserver)root26101007:4200:00:00rpc.mountd#权限管理验证等(NFSmountdaemon)root26172007:4200:00:00[nfsd4]root26182007:4200:00:00[nfsd4_callbacks]root26192007:4200:00:00[nfsd]#nfs主进程root26202007:4200:00:00[nfsd]#nfs主进程root26212007:4200:00:00[nfsd]#nfs主进程root26222007:4200:00:00[nfsd]#nfs主进程root26232007:4200:00:00[nfsd]#nfs主进程root26242007:4200:00:00[nfsd]#nfs主进程root26252007:4200:00:00[nfsd]#nfs主进程root26262007:4200:00:00[nfsd]#nfs主进程root26571007:4200:00:00rpc.idmapd#namemappingdaemonroot27281525008:06pts/000:00:00egreprpc|nfsNFS服务的主要任务是共享文件系统数据,而文件系统数据的共享离不开权限问题。所以NFS服务器启动时最少需要两个不同的进程,一个是管理NFS客户端是否能够登入的rpc.nfsd主进程,另一个用于管理NFS客户端是否能够取得对应权限的rpc.mountd进程。如果还需要管理磁盘配额,则NFS还要再加载rpc.rquotad进程。
[root@nfs01~]#tail-3/etc/rc.local#startupnfsservicebychensiqiat20170309/etc/init.d/rpcbindstart/etc/init.d/nfsstart1.5实战配置NFS服务端1.5.1NFS服务端配置文件路径NFS服务的默认配置文件路径为:/etc/exports,并且默认是空的。
[root@nfs01~]#ls-l/etc/exports-rw-r--r--.1rootroot01月122010/etc/exports[root@nfs01~]#cat/etc/exports提示:NFS默认配置文件/etc/exports其实是存在的,但是没有内容,需要用户自行配置。
/etc/exports文件位置格式为:
NFS共享的目录NFS客户端地址1(参1,参2...)客户端地址2(参1,参2...)
NFS共享的目录NFS客户端地址(参1,参2...)
查看exports语法文件格式帮助的方法为:执行manexports命令,然后切换到文件结尾,可以快速看如下样例格式:
[root@nfs01~]#cat/etc/exports/data172.16.1.0/24(rw,sync)命令说明:/data:nfs的共享目录路径172.16.1.0/24:允许挂载我的共享目录的IP地址段(rw):可读可写(sync):实时同步修改配置文件以后,必须重启nfs服务
[root@nfs01~]#touch/mnt/atouch:无法创建"/data/a":权限不够1.5.4进行本地挂载测试[root@nfs01~]#mount172.16.1.31:/data/mnt提示:没有报错就说明挂载成功了。
[root@nfs01~]#ls/data#查看目录[root@nfs01~]#ls/mnt#查看目录[root@nfs01~]#touch/data/a#在data目录创建文件a[root@nfs01~]#ls/data#data共享目录有aa[root@nfs01~]#ls/mnt#mnt挂载目录也有aa[root@nfs01~]#touch/mnt/b#在mnt目录创建文件b[root@nfs01~]#ls/data#data共享目录有bab[root@nfs01~]#ls/mnt#mnt挂载目录也有bab提示:当配置文件exports里设定了(rw,rsync)后,表示目录可读写,并且是实时同步的。也就是说,在其中任意一个挂载目录里改变了里面的内容信息,那么所有挂载目录包含源共享目录的内容信息同步改变。
至此NFS服务器端配置完毕
[root@web01~]#yum-yinstallnfs-utils提示:不安装则不能挂载nfs共享目录
[root@web01~]#showmount-e172.16.1.31Exportlistfor172.16.1.31:/data172.16.1.0/241.6.4客户端挂载[root@web01~]#mount-tnfs172.16.1.31:/data/mnt提示:-tnfs可以省略
[root@web01~]#ls/mntab[root@web01~]#touch/mnt/chensiqi#创建文件[root@web01~]#ls/mntabchensiqi[root@web01~]#sshroot@172.16.1.31"ls/data"#远程看一下nfs服务器端共享目录root@172.16.1.31'spassword:abchensiqi1.6.6配置开机自动挂载nfs共享目录(/etc/fstab)配置客户端mount挂载命令使挂载开机自动执行,这里有两种方法,如下:
第一种方法:将挂载命令放在/etc/rc.local里缺点:偶尔开机挂载不上,工作中除了开机自启动配置,还要对是否挂载做监控
echo"mount-tnfs172.16.1.31:/data/mnt"第二种方法,将挂载命令放在/etc/fstab里
[root@web01~]#tail-1/etc/fstab172.16.1.31:/data/mntnfsdefaults00其实所谓配置方法,这里有一个误区,如下:
例如:
[root@web01~]#chkconfig--listnetfsnetfs0:关闭1:关闭2:关闭3:关闭4:关闭5:关闭6:关闭[root@web01~]#chkconfignetfson[root@web01~]#chkconfig--listnetfsnetfs0:关闭1:关闭2:启用3:启用4:启用5:启用6:关闭如此一来,我们也可以通过fstab进行开机挂载了nfs网络文件系统了。同学们可以自行仿照测试。
至此NFS客户端配置完毕
实例一:共享/data目录给10.0.0.0/24整个网段可读可写。
实例二:nfs服务器:172.16.1.31共享下面两个目录:/app/w:要求可读可写,同步数据,所有用户压缩为匿名用户/app/r:要求只读,同步数据,所有用户都压缩为匿名用户
客户端上面的要求:backup服务器,把nfs服务器的/app/r挂载到/data/r
web01服务器,把nfs服务器的/app/w挂载到/data/w
EXAMPLE#sample/etc/exportsfile/master(rw)trusty(rw,no_root_squash)/projectsproj*.local.domain(rw)/usr*.local.domain(ro)@trusted(rw)/home/joepc001(rw,all_squash,anonuid=150,anongid=100)/pub*(ro,insecure,all_squash)上述各个列的参数含义如下:
1)(rw,sync):可读可写,同步传输2)(ro,async):只读,异步传输。
详细说明:rw或者ro,主要控制的是所有客户端用户(包含root)的读写权限。如果设置成ro,就算root也只有读权限。它是NFS权限设置的第一道总闸阀门。sync:同步传输,实时进行。async:异步传输:攒一会在传输。
3)root_squash:将root账户在共享目录里的身份降低为匿名者(默认nfsnobody)身份4)no_root_squash:不降低root账户在共享目录的身份,身份还是root5)all_squash:将所有访问用户在共享目录里的身份都降低为匿名者(默认nfsnobody)身份
详细说明:
6)anonuid和anongid:指定NFS虚拟账户的uid或gid
1)NFS客户端挂载后,往共享目录写入数据时卡住了2)NFS服务端,重启restart服务,客户端如果写入数据卡住了。
通过如下命令在NFS客户端测试挂载获取的默认挂载参数:
[root@backup~]#grepmnt/proc/mountsnfs01:/data//mntnfs4rw,relatime,vers=4,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=172.16.1.41,minorversion=0,local_lock=none,addr=172.16.1.3100NFSClientmount挂载参数列表
mount-o参数对应的选项:
|参数|参数意义|系统默认值||suid;nosuid|当挂载的文件系统上有任何SUID的程序时,只要使用nosuid就能够取消设置SUID的功能。|suid||--|--|--||rw;ro|可以指定文件系统是只读(ro)或可写(rw)|rw||dev;nodev|是否可以保留装置文件的特殊功能?一般来说只有/dev才会有特殊的装置,因此可以选择nodev|dev||exec;noexec|是否具有执行文件的权限?如果想要挂载的仅是普通资源数据区(例如:图片,附件),那么可以选择noexec|exec||user;nouser|是否允许用户进行文件的挂载与卸载功能?如果要保护文件系统,最好不要提供用户进行挂载与卸载|nouser||auto;noauto|这个auto指的是“mount-a”时会不会被卸载的项目,如果不需要这个分区随时被挂载,可以设置为noauto|auto|
某网友问:在企业生产环境中,NFS客户端挂载有没有必须要加的参数,比如,加noexec,nosuid,nodev,bg,soft,rsize,wsize等参数。
解答:这个问题属于mount挂载优化内容(有些参数也适合其他文件系统),一般来说要适当加挂载参数,但是,最好是先做好测试,用数据来说话,才能更好的确定到底是挂载还是不挂载。
在企业工作场景,一般来说,NFS服务器共享的只是普通静态数据(图片,附件,视频),不需要执行suid,exec等权限,挂载的这个文件系统只能作为数据存取之用,无法执行程序,对于客户端来讲增加了安全性,例如:很多木马篡改站点文件都是由上传入口上传的程序到存储目录,然后执行的。
因此在挂载的时候,用下面的命令很有必要:
mount-tnfs-onosuid,noexec,nodev,rw172.16.1.31:/data/mnt
mount-tnfs-onoatime,nodiratime172.16.1.31:/data/mnt
2)安全加优化的挂载方式如下:
mount-tnfs-onosuid,noexec,nodev,noatime,nodiratime,intr,rsize=131072,wsize=131072172.16.1.31:/data/mnt
3)默认的挂载方式如下:
mount-tnfs172.16.1.31:/data/mnt
如果是本地文件系统,使用如下命令:
mount/dev/sdb1/mnt-odefaults,async,noatime,data=writeback,barrier=0
注意:如果本地文件系统挂载时,如果加入nodiratime会报错
在CentOS6.56.66.8等服务器端和客户端环境下,可使用如下命令参数:
mount-tnfs-onoatime,nodiratime,nosuid,noexec,nodev,rsize=131072172.16.1.31:/data/mnt
经过实际测试,CentOS6.66.8默认的挂载参数性能还是不错的。
注意:非性能的参数越多,速度可能会变慢
下面是优化选项说明:
NFS服务可以让不同的客户端挂载使用同一个共享目录,也就是将其作为共享存储使用,这样可以保证不同节点客户端数据的一致性,在集群架构环境中经常会用到。如果是windows和Linux混合环境的集群系统,可以用samba来实现。
优点:
局限:
应用建议:
大中小型网站(参考点2000万/日PV以下)线上应用,都有用武之地。门户站也会有应用,生产场景应该多把数据的访问往前推,即尽量把静态存储里的资源通过CDN或缓存服务器提供服务,如果没有缓存服务或架构不好,存储服务器数量再多也是扛不住压力的,而且用户体验会很差。
NFS客户端实现fstab开机自启动挂载
现象:nfs开机挂载卸载了/etc/fstab中,结果无法开机自动挂载nfs
解答:1,nfs客户对岸挂载命令放在/etc/rc.local实现自动挂载2,开机自启动netfs服务,然后才能实现fstab的开机自动挂载nfs文件系统(linux开机时在加载网络之前就会加载/etc/fstab)
1,fstab文件被错误修改,导致在开机启动linux时候出现错误,提示让你恢复系统设置。
4)退出/etc/fstab。在命令行输入命令
mount-oremount,rw/的意思是将整个根目录已可读可写rw的方式重新挂载一边remount
5)我们再打开/etc/fstab就会发现只读模式没了
6)赶紧修改fstab然后重启服务器。
2,光盘救援模式恢复(用linux光盘修复系统)1)调整开机bios设置光盘启动,然后挂载光盘