Linux架构之NFS

目录

Linux架构之NFS

NFS基本概述:

什么是NFS:

NFS是Network File System的缩写及网络文件系统。NFS主要功能是通过局域网络让不同的主机系统之间可以共享文件和目录。基于TCP/IP传输的网络文件系统协议。

NFS系统和Windows网络共享、网络驱动器类似,只不过windows用于局域网,NFS用于企业集群架构中,如果是大型网站,会用到更复杂的分布式文件系统FastDFS,glusterfs,HDFS

NFS的原理:

  1. 用户访问NFS客户端,将请求转化为函数
  2. NFS通过TCP/IP连接服务端
  3. NFS服务端接收请求,会先调用portmap进程进行端口映射
  4. Rpc.nfsd进程用于判断NFS客户端能否连接服务端;
  5. Rpc.mount进程用于判断客户端对服务端的操作权限
  6. idmap进程实现用户映射和压缩
  7. 最后NFS服务端会将对应请求的函数转换为本地能识别的命令,传递至内核,由内核驱动硬件。

img

#端口映射:
端口映射就是将内网中的主机的一个端口映射到外网主机的一个端口,提供相应的服务。当用户访问外网IP的这个端口时,服务器自动将请求映射到对应局域网内部的机器上。

eg:我们在内网中有一台Web服务器,但是外网中的用户是没有办法直接访问该服务器的。于是我们可以在路由器上设置一个端口映射,只要外网用户访问路由器ip的80端口,那么路由器会把自动把流量转到内网Web服务器的80端口上。并且,在路由器上还存在一个Session,当内网服务器返回数据给路由器时,路由器能准确的将消息发送给外网请求用户的主机。在这过程中,路由器充当了一个反向代理的作用,他保护了内网中主机的安全。

NFS的使用要求:

NFS服务的实现依赖于RPC(远程过程调用)机制,以完成远程到本地的映射过程, 所以需要安装nfs-utils、rpcbind软件包来提供共享服务,前者用于NFS共享发布和访问,后者用于RPC支持

服务端操作

#安装nfs服务
[root@nfs ~]yum install -y nfs-utils

##配置NFS服务端
[root@nfs ~]vim /etc/exports

# 共享目录 允许访问NFS服务端的网段 (可读可写,同步,任何用户都映射成nfs的匿名用户)
/data       172.16.1.0/24         (rw,sync,all_squash)

#创建共享目录
[root@nfs ~]# mkdir /data

## 修改共享目录的属主和属组为nfs的匿名用户
[root@nfs ~]# chown nfsnobody:nfsnobody /data

##启动服务
[root@nfs ~]# systemctl start nfs

## 加入开机自启
[root@nfs ~]# systemctl enable nfs

## 检查进程
[root@nfs ~]# ps -ef|grep nfs

## 检测配置文件是否生效
[root@nfs ~]# cat /var/lib/nfs/etab
/data	172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,all_squash)

nfs参数及其作用

NFS共享的常用参数: 
rw	            //读写权限(常用)
ro	            //只读权限(不常用)
root_squash	    //当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户(不常用)
no_root_squash	//当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员(不常用)
all_squash	    //无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户(常用)
no_all_squash	//无论NFS客户端使用什么账户访问,都不进行压缩(不常用)
sync	        //同时将数据写入到内存与硬盘中,保证不丢失数据(常用)
async	        //优先将数据保存到内存,然后再写入硬盘,这样效率更高,但可能会丢失数据(不常用)
anonuid	        //配置all_squash使用,指定NFS的用户UID,必须存在系统(常用)
anongid	        //配置all_squash使用,指定NFS的用户GID,必须存在系统(常用)

客户端操作

# 1.安装nfs
[root@web01 ~]# yum install -y nfs-utils

# 2.查看哪些目录可以挂载
[root@web01 ~]# showmount -e 172.16.1.31

# 3.挂载共享目录
[root@web01 ~]# mount -t nfs 172.16.1.31:/data /opt

NFS共享存储实战

部署交作业的网站

# 1.安装apache和PHP
[root@web01 ~]# yum install -y httpd PHP

#2.# 2.下载代码(到站点目录下)
[root@web01 html]# ll
-rw-r--r-- 1 root root 26927 May 18 09:33 kaoshi.zip
[root@web01 html]# pwd
/var/www/html

# 3.解压代码
[root@web01 html]# unzip kaoshi_modify.zip

# 4.启动apache服务
[root@web01 html]# systemctl start httpd

# 5.检查进程
[root@web01 html]# ps -ef|grep 'httpd'

# 6.端口检查
[root@web01 html]# netstat -lntup|grep httpd
tcp6 0 0 :::80 :::* LISTEN 21802/httpd

# 7.打开浏览器访问
http://10.0.0.7/

# 8.授权站点目录
chown apache.apache /var/www/html

给交作业网站部署共享存储

# 1.先部署nfs的服务端
根据上述 完成服务端操作

# 2.先创建用户数据上传目录
[root@web01 html]# mkdir /var/www/html/user_data/

# 3.客户端挂载nfs服务端
[root@web01 html]# mount -t nfs 172.16.1.31:/data /var/www/html/user_data/

相关文章

vue阻止冒泡事件 阻止点击事件的执行 <div @click=&a...
尝试过使用网友说的API接口获取 找到的都是失效了 暂时就使用...
后台我拿的数据是这样的格式: [ {id:1 , parentId: 0, name:...
JAVA下载文件防重复点击,防止多次下载请求,Cookie方式快速简...
Mip是什么意思以及作用有哪些