linux:NFS网络文件共享服务
目录
企业级NFS网络文件共享服务? 原文地址:http://www.cnblogs.com/chensiqiqi/ 第一章 NFS网络文件共享服务1.1 NFS介绍1)什么是NFS?
2)NFS在企业中的应用场景
3)企业生产集群为什么需要共享存储角色。
上图是企业生产集群没有NFS共享存储访问的示意图。下图是企业生产集群有NFS共享存储的情况
1.2 NFS系统原理介绍1.2.1 NFS系统挂载结构图解与介绍下图是企业工作中的NFS服务器与客户端挂载情况结构图
客户端挂载NFS后,本地挂载基本信息显示如下: [[email?protected] ~]# df -h Filesystem Size Used Use% Mounted on /dev/sda1 1.1T 467G 544G 47% / tmpfs 7.9G 0 7.9G 0% /dev/shm 10.0.0.7:/video 1002G 59G 892G 7% /video #<==10.0.0.7为nfsserver的ip地址 提示: mount 源 目标 mount 10.0.0.7:/video /video
1.2.2 什么是RPC(Remote Procedure Call)
1.2.3 NFS的工作流程原理当访问程序通过NFS客户端向NFS服务端存取文件时,其请求数据流程大致如下: 1)首先用户访问网站程序,由程序在NFS客户端上发出存取NFS文件的请求,这时NFS客户端(即执行程序的服务器)的RPC服务(rpcbind服务)就会通过网络向NFS服务器端的RPC服务(rpcbind服务)的111端口发出NFS文件存取功能的询问请求。 2)NFS服务端的RPC服务(rpcbind服务)找到对应的已注册的NFS端口后,通知NFS客户端的RPC服务(rpcbind服务) 3)此时NFS客户端获取到正确的端口,并与NFS daemon联机存取数据 4)NFS客户端把数据存取成功后,返回给前端访问程序,告知给用户存取结果,作为网站用户,就完成了一次存取操作。 因为NFS的各项功能都需要向RPC服务(rpcbind服务)注册,所以只有RPC服务(rpcbind服务)才能获取到NFS服务的各项功能对应的端口号(port number),PID,NFS在主机所监听的IP等信息,而NFS客户端也只能通过向RPC服务(rpcbind服务)询问才能找到正确的端口。也就是说,NFS需要有RPC服务(rpcbind服务)的协助才能成功对外提供服务。从上面的描述,我们不难推断,无论是NFS客户端还是NFS服务器端,当要使用NFS时,都需要首先启动RPC服务(rpcbind服务),NFS服务必须在RPC服务启动之后启动,客户端无需启动NFS服务,但需要启动RPC服务。
1.3 NFS服务端部署环境准备1.3.1 NFS服务部署服务器准备
1.3.2 修改主机名及标签hostname web01 sed -i ‘s#chensiqi#web01#g‘ /etc/sysconfig/network
1.3.3 必须的优化(统一使用模版机进行克隆)
1.4 NFS server端的设置1.4.1 NFS软件列表要部署NFS服务,需要安装下面的软件包:
1.4.2 查看NFS软件包可使用如下命令查看默认情况下CentOS6.x里NFS软件的安装情况。
当不知道软件名字时候,可以用 [email?protected] ~]# yum -y install nfs-utils rpcbind ...忽略软件显示信息... [[email?protected] ~]# rpm -qa nfs-utils rpcbind nfs-utils-1.2.3-70.el6_8.2.x86_64 rpcbind-0.2.0-12.el6.x86_64
如果出现rpcbind和nfs-utils开头的两个软件包,表示NFS服务端软件安装完毕 1.4.3 启动NFS相关服务查看某个命令属于已经安装的哪个rpm包 [[email?protected] backup]# which rpcinfo #查询命令绝对路径 /usr/sbin/rpcinfo [[email?protected] backup]# rpm -qf /usr/sbin/rpcinfo #查询某个命令属于已经安装的哪个rpm包 rpcbind-0.2.0-12.el6.x86_64 [[email?protected] backup]# rpm -qf `which showmount` nfs-utils-1.2.3-70.el6_8.2.x86_64
1.4.1.1 启动rpcbind因为NFS及其辅助程序都是基于RPC(remote Procedure Call)协议的(使用的端口为111),所以首先要确保系统中运行了rpcbind服务。启动的实际操作如下: [[email?protected] backup]# /etc/init.d/rpcbind status #检查rpcbind服务状态 rpcbind 已停 [[email?protected] backup]# /etc/init.d/rpcbind start #启动rpcbind服务 正在启动 rpcbind: [确定] [[email?protected] backup]# rpcinfo -p localhost #查看NFS服务向rpc服务注册的端口信息,因为NFS还没有启动,因此,没有太多注册的端口影射信息。 program vers proto port service 100000 4 tcp 111 portmapper 100000 3 tcp 111 portmapper 100000 2 tcp 111 portmapper 100000 4 udp 111 portmapper 100000 3 udp 111 portmapper 100000 2 udp 111 portmapper #提示:111端口为rpcbind服务对外提供服务的主端口
1.4.3.2 启动NFS服务[[email?protected] backup]# /etc/init.d/nfs start #启动nfs服务 启动 NFS 服务: [确定] 关掉 NFS 配额: [确定] 启动 NFS mountd: [确定] 启动 NFS 守护进程: [确定] Starting RPC idmapd: [ OK ]
1.4.3.3 NFS服务常见进程详细说明从上面NFS服务启动过程可以看出,运行NFS服务默认需要启动的服务或进程至少有:NFS quotas(rpc.rquotad),NFS daemon(nfsd),NFS mountd(rpc.mountd)。可以通过执行如下命令查看启动NFS后,系统中运行的NFS相关进程: [[email?protected] ~]# ps -ef | egrep "rpc|nfs" root 2179 2 0 07:38 ? 00:00:00 [rpciod/0] rpc 2560 1 0 07:42 ? 00:00:00 rpcbind root 2605 1 0 07:42 ? 00:00:00 rpc.rquotad #磁盘配额进程(remote quota server) root 2610 1 0 07:42 ? 00:00:00 rpc.mountd #权限管理验证等(NFS mount daemon) root 2617 2 0 07:42 ? 00:00:00 [nfsd4] root 2618 2 0 07:42 ? 00:00:00 [nfsd4_callbacks] root 2619 2 0 07:42 ? 00:00:00 [nfsd] #nfs主进程 root 2620 2 0 07:42 ? 00:00:00 [nfsd] #nfs主进程 root 2621 2 0 07:42 ? 00:00:00 [nfsd] #nfs主进程 root 2622 2 0 07:42 ? 00:00:00 [nfsd] #nfs主进程 root 2623 2 0 07:42 ? 00:00:00 [nfsd] #nfs主进程 root 2624 2 0 07:42 ? 00:00:00 [nfsd] #nfs主进程 root 2625 2 0 07:42 ? 00:00:00 [nfsd] #nfs主进程 root 2626 2 0 07:42 ? 00:00:00 [nfsd] #nfs主进程 root 2657 1 0 07:42 ? 00:00:00 rpc.idmapd #name mapping daemon root 2728 1525 0 08:06 pts/0 00:00:00 egrep rpc|nfs
NFS服务的主要任务是共享文件系统数据,而文件系统数据的共享离不开权限问题。所以NFS服务器启动时最少需要两个不同的进程,一个是管理NFS客户端是否能够登入的rpc.nfsd主进程,另一个用于管理NFS客户端是否能够取得对应权限的rpc.mountd进程。如果还需要管理磁盘配额,则NFS还要再加载rpc.rquotad进程。
1.4.3.4 配置NFS服务端服务开机自启动[[email?protected] ~]# chkconfig rpcbind on [[email?protected] ~]# chkconfig nfs on [[email?protected] ~]# chkconfig --list rpcbind rpcbind 0:off 1:off 2:on 3:on 4:on 5:on 6:off [[email?protected] ~]# chkconfig --list nfs nfs 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[[email?protected] ~]# tail -3 /etc/rc.local #start up nfs service by chensiqi at 20170309 /etc/init.d/rpcbind start /etc/init.d/nfs start
1.5 实战配置NFS服务端1.5.1 NFS服务端配置文件路径NFS服务的默认配置文件路径为:/etc/exports,并且默认是空的。 [[email?protected] ~]# ls -l /etc/exports -rw-r--r--. 1 root root 0 1月 12 2010 /etc/exports [roo[email?protected] ~]# cat /etc/exports
1.5.2 exports配置文件格式/etc/exports文件位置格式为: NFS共享的目录 NFS客户端地址1(参1,参2...)客户端地址2(参1,参2...) NFS共享的目录 NFS客户端地址(参1,参2...) 查看exports语法文件格式帮助的方法为: [[email?protected] ~]# cat /etc/exports
/data 172.16.1.0/24(rw,sync) 命令说明: /data :nfs的共享目录路径 172.16.1.0/24:允许挂载我的共享目录的IP地址段 (rw):可读可写 (sync):实时同步
修改配置文件以后,必须重启nfs服务 [[email?protected] ~]# /etc/init.d/nfs reload [[email?protected] ~]# showmount -e #查看生效的nfs配置文件规则 Export list for nfs01: /data 172.16.1.0/24
1.5.3 给共享目录更改属主属组为nfsnobady[[email?protected] ~]# grep nfs /etc/passwd nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin [[email?protected] ~]# chown -R nfsnobody.nfsnobody /data [[email?protected] ~]# ll -d /data drwxr-xr-x. 2 nfsnobody nfsnobody 4096 3月 9 09:43 /data
[[email?protected] ~]# touch /mnt/a touch: 无法创建"/data/a": 权限不够
1.5.4 进行本地挂载测试[[email?protected] ~]# mount 172.16.1.31:/data /mnt
1.5.5 进行文件写入测试[[email?protected] ~]# ls /data #查看目录 [[email?protected] ~]# ls /mnt #查看目录 [[email?protected] ~]# touch /data/a #在data目录创建文件a [[email?protected] ~]# ls /data #data共享目录有a a [[email?protected] ~]# ls /mnt #mnt挂载目录也有a a [[email?protected] ~]# touch /mnt/b #在mnt目录创建文件b [[email?protected] ~]# ls /data #data共享目录有b a b [[email?protected] ~]# ls /mnt #mnt挂载目录也有b a b
至此NFS服务器端配置完毕 1.6 实战配置NFS客户端配置过程-web011.6.1 回顾整体流程1.6.2 客户端必须安装nfs-utils软件[[email?protected] ~]# yum -y install nfs-utils
提示:不安装则不能挂载nfs共享目录 1.6.3 检查远端showmount[[email?protected] ~]# showmount -e 172.16.1.31 Export list for 172.16.1.31: /data 172.16.1.0/24
1.6.4 客户端挂载[[email?protected] ~]# mount -t nfs 172.16.1.31:/data /mnt
提示:-t nfs 可以省略 1.6.5 进行文件读写及同步测试[[email?protected] ~]# ls /mnt a b [[email?protected] ~]# touch /mnt/chensiqi #创建文件 [[email?protected] ~]# ls /mnt a b chensiqi [[email?protected] ~]# ssh [email?protected] "ls /data" #远程看一下nfs服务器端共享目录 [email?protected]16.1.31‘s password: a b chensiqi
1.6.6 配置开机自动挂载nfs共享目录(/etc/fstab)配置客户端mount挂载命令使挂载开机自动执行,这里有两种方法,如下: 第一种方法:将挂载命令放在/etc/rc.local里 echo "mount -t nfs 172.16.1.31:/data /mnt"
第二种方法,将挂载命令放在/etc/fstab里 [[email?protected] ~]# tail -1 /etc/fstab 172.16.1.31:/data /mnt nfs defaults 0 0
其实所谓配置方法,这里有一个误区,如下:
例如: [[email?protected] ~]# chkconfig --list netfs netfs 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭 [[email?protected] ~]# chkconfig netfs on [[email?protected] ~]# chkconfig --list netfs netfs 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
如此一来,我们也可以通过fstab进行开机挂载了nfs网络文件系统了。同学们可以自行仿照测试。 至此NFS客户端配置完毕 1.7 NFS配置权限设置常用参数说明
1.8 NFS服务企业案例配置实践实例一: 实例二: 客户端上面的要求: web01服务器,把nfs服务器的/app/w挂载到/data/w 1.9 exports配置文件相关参数的说明exports配置文件的相关参数,摘自man exports: EXAMPLE # sample /etc/exports file / master(rw) trusty(rw,no_root_squash) /projects proj*.local.domain(rw) /usr *.local.domain(ro) @trusted(rw) /home/joe pc001(rw,all_squash,anonuid=150,anongid=100) /pub *(ro,insecure,all_squash)
上述各个列的参数含义如下:
1.10 exports配置文件相关参数应用领域的详细解释 (NFS精华重点)1)(rw,sync) :可读可写,同步传输
3)root_squash:将root账户在共享目录里的身份降低为匿名者(默认nfsnobody)身份
6)anonuid和anongid:指定NFS虚拟账户的uid或gid
第二章 NFS企业级优化2.1 NFS配置文件优化1)NFS客户端挂载后,往共享目录写入数据时卡住了 解答: [[email?protected] ~]# sed -n ‘45,55p‘ /etc/sysconfig/nfs
# When there are no active clients,changing these values # can be done in a single server restart. # #NFSD_V4_GRACE=90 # 无敌时间 #NFSD_V4_LEASE=90 # 无敌时间 #NLM_GRACE_PERIOD=90 # 无敌时间 # # # # Optional arguments passed to rpc.mountd. See rpc.mountd(8) #RPCMOUNTDOPTS="" #说明: NFSD_V4_GRACE=90 <===>/proc/fs/nfsd/nfsv4gracetime NFSD_V4_LEASE=90 <===>/proc/fs/nfsd/nfsv4leasetime NLM_GRACE_PERIOD=90 <===>/proc/fs/nfsd/nfsv4recoverydir 这三条是控制无敌时间的,去掉#直接修改时间即可,改后别忘了重启服务。一旦启用了这三条,/proc临时目录下便会生成对应的临时文件
2.2 NFS客户端mount挂载深入在NFS服务端可以通过cat /var/lib/nfs/etab 查看服务端配置参数的细节。在NFS客户端可以通过cat /proc/mounts查看mount的挂载参数细节。 2.2.1 mount挂载说明通过如下命令在NFS客户端测试挂载获取的默认挂载参数: [[email?protected]backup ~]# grep mnt /proc/mounts nfs01:/data/ /mnt nfs4 rw,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.31 0 0
NFS Client mount 挂载参数列表
mount -o参数对应的选项: |参数|参数意义|系统默认值| 2.3 NFS 客户端mount挂载优化某网友问:在企业生产环境中,NFS客户端挂载有没有必须要加的参数,比如,加noexec,nosuid,nodev,bg,soft,rsize,wsize等参数。 解答: 2.3.1 有关系统安全挂载参数选项在企业工作场景,一般来说,NFS服务器共享的只是普通静态数据(图片,附件,视频),不需要执行suid,exec等权限,挂载的这个文件系统只能作为数据存取之用,无法执行程序,对于客户端来讲增加了安全性,例如:很多木马篡改站点文件都是由上传入口上传的程序到存储目录,然后执行的。 因此在挂载的时候,用下面的命令很有必要:
2.3.2 mount挂载性能优化参数选项下面介绍几个在企业生产环境下,NFS性能优化挂载的例子。
2)安全加优化的挂载方式如下:
3)默认的挂载方式如下:
如果是本地文件系统,使用如下命令:
2.3.3 NFS网络文件系统优化挂载的参数建议在CentOS6.5 6.6 6.8等服务器端和客户端环境下,可使用如下命令参数:
经过实际测试,CentOS6.6 6.8默认的挂载参数性能还是不错的。
注意:非性能的参数越多,速度可能会变慢 2.3.4 NFS内核优化建议下面是优化选项说明:
2.4 NFS系统应用的优缺点说明NFS服务可以让不同的客户端挂载使用同一个共享目录,也就是将其作为共享存储使用,这样可以保证不同节点客户端数据的一致性,在集群架构环境中经常会用到。如果是windows和Linux混合环境的集群系统,可以用samba来实现。 优点:
局限:
应用建议: 大中小型网站(参考点2000万/日PV以下)线上应用,都有用武之地。门户站也会有应用,生产场景应该多把数据的访问往前推,即尽量把静态存储里的资源通过CDN或缓存服务器提供服务,如果没有缓存服务或架构不好,存储服务器数量再多也是扛不住压力的,而且用户体验会很差。 附录1 【nfs挂载加入fstab案例】NFS客户端实现fstab开机自启动挂载 现象:nfs开机挂载卸载了/etc/fstab中,结果无法开机自动挂载nfs 解答: 附录2 fstab误操作导致无法开机1,fstab文件被错误修改,导致在开机启动linux时候出现错误,提示让你恢复系统设置。 1)开机时出现错误提示 2)输入root用户密码后,进入到用户操作界面 3)打开vim /etc/fstab 文件,我们发现fstab文件是只读的。也就是说目前只能看不能改。 4)退出/etc/fstab。在命令行输入命令
5)我们再打开/etc/fstab 就会发现只读模式没了 6)赶紧修改fstab然后重启服务器。 2,光盘救援模式恢复(用linux光盘修复系统) 2)重启系统,进入光盘救援模式 3)一路回车,不加在网络模式 4)一路回车,选择第一个 进入这个页面 5)输入命令 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |