NFS

nfs centos7.x

 

1. 首先NFS服务器端开启rpcbind;

2. 然后服务端开启NFS服务,这时NFS的各项功能都需要向RPC服务注册,这时rpc会通知portmap模块将可用的端口分配给statd,rquotad等;

3. 然后NFS客户端RPC服务就会通过网络向NFS服务端的RPC服务的111端口发出NFS文件存取功能的询问请求。

4. NFS服务端的RPC服务找到对应的已注册的NFSdaemon端口后,通知NFS客户端的RPC服务。

5. 此时NFS客户端就可获取到nfs服务端各个进程的正确端口,然后通过客户端rpc就直接与NFS服务器的rpc进行存取数据了(rpc知道了nfs的具体端口,就可以实现远程调用,即传输)。

NFS并不是单独存在的,而是由NFS-server,RPC,PORTMAP这三个模块组成。

NFS-server只负责将数据通过以文件系统的方式共享出去,并进行登录管理和权限管理,并不负责数据的传输,而数据的传输则有RPC来完成。

NFS客户端要想访问NFS服务器,就必须要知道对方的ip和端口,但是NFS服务除了启动nfsd本身监听的端口2049/tcp和2049/udp,还会启动其它进程(如statd,rquotad等)以完成文件共享,这些进程的端口是由PORTMAP随机分配的(每次NFS服务启动时向RPC服务注册,RPC服务会通知PORTMAP分配剩余可用的端口)。

所以NFS客户端是很难直接与NFS服务器通信的。

不难想出,NFS的工作流程是,NFS客户端rpc服务就会通过网络向NFS服务端的rpc服务的111端口发出

NFS文件存取功能的询问请求,RPC服务获得请求,然后将NFS服务的各个进程端口号返给客户端的rpc请求,客户端的rpc再拿着这些进程端口与服务端的rpc通信,进行数据传输

RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。

RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行

NFS安装部署:
	
服务端IP:10.0.0.31
		
客户端IP:10.0.0.7
客户端IP:10.0.0.8
		
		
# 关闭防火墙:
systemctl stop firewalld && systemctl disable firewalld
# 临时关闭selinux:
setenforce 0
# 永久关闭selinux:
sed -i 's/=enforcring/=disabled/' /etc/selinux/config
	
常用参数解释
	rw
	    可读可写
		
	ro
	    仅可读
		
	sync
	    是指数据同步写入内存和磁盘
		
	root_squash
	    如果客户端用root身份访问,则被压缩成nobody,权限也将受到限制。
		
	no_root_squash
	    也就是不压缩,客户端使用root身份登录,全有所有权限,很危险。
		
	all_squash
	    不管访问者是什么身份,包括root,全部压缩至匿名用户。
		
	no_all_squash
	    保留访问用户的身份uid以及gid,一般只能查看,不能修改,权限问题,但是可以强制保存。
		
		
	
	
	1.安装
		yum install nfs-utils rpcbind -y
		
	2.创建目录,方便客户端挂载
		mkdir -p /data/{nfs1..nfs3}
	
	3.编写配置文件
	    vim /etc/vim /etc/exports
	
	4.写入以下内容
	    /data/nfs1      10.0.0.7(ro,sync)
	    /data/nfs2      10.0.0.0/24(rw,no_root_squash,sync)
	    
	    解释:
		/data/nfs1
		    需要挂在的目录,需要提前创建好目录,或者这个目录存在
				
		 10.0.0.7
		    只能10.0.0.7的这台主机可以挂载此目录
			
		ro
		    表示权限只可以读,但是不能写入东西
				
		sync	
		    同步数据
				
		
			
		/data/nfs2
		    要共享的目录,需要存在
			 
		10.0.0.0/24 
		    这个是10.0.0.0/24 这个就是10.0.0.1-10.0.0.254这个网段内的所有主机都能挂载
			 
		rw
		    挂载的目录容易读写的权限
				
		no_root_squash
		    如果不加入no_root_squash这个选项,root身份被压缩成nobody,相对服务器文件系统来说,就是其他用户。所以要想编辑,需要在服务端对文件授权或者更改exports文件,设置no_root_squash(不压缩客户端root身份)。
			 
		sync
		    同步数据
				
		启动服务
		    systemctl start rpcbind 
			
		    systemctl start nfs
			
		查看都配置哪些目录和权限
		
		exports -v
		
		快速重启,可以检查配置文件是否抒写错误
		exports -r
		
		设置为开机自启动
		    systemctl enable rpcbind
			
		    systemctl enable nfs
			
		客户端挂载
		
		客户端需要安装一下nfs
		    yum install nfs-utils -y
		
		客户端IP:10.0.0.7
		

		可用showmount搜索网络中可用的共享文件
		    showmount -e 10.0.0.31
			
		本地创建目录,挂载远程服务器的目录
		    mkdir /data/www
			
		临时挂载
		    mount -t nfs 10.0.0.31:/data/nfs1 /data/www/
			
		
		#推荐使用:
		mount -t nfs -o soft,timeo=1  10.0.0.31:/data/nfs1 /data/www/
		
		soft: 
		    软挂载,遇到报错会终止挂载,并返回信息,默认是硬挂载,一直尝试挂载。
		
		timeo: 
		    超时时间,如果不设置,一直链接,可以设置小点
			
		解释
		mount -t nfs 
		    挂载类型
				
		10.0.0.31:/data/nfs1
		    服务端IP地址和要挂载的目录
				
		/data/www
		    本地要挂载到哪个目录里
			
		客户端IP:10.0.0.8
		
		客户端需要安装一下nfs
		    yum install nfs-utils -y

		    创建目录
			mkdir /data/mysqldb
			
		临时挂载
		    mount -t nfs 10.0.0.31:/data/nfs2 /data/mysqldb
			
		
	卸载报错
	    umount.nfs4: /mnt/jfedu: device is busy
	    umount -l /mnt/jfedu  强行解除挂载
	或者使用
	    fuser -m /mnt/data 将会显示使用这个模块的pid
	    fuser -mk /mnt/data 将会直接kill那个pid


本文 暂无 评论

Top