NFS工作原理及配置

一.NFS工作原理

1.NFS简介

NFS是Network File System的缩写,中文称为网络文件系统,它的主要功能是通过网络(一个局域网)让不同的主机系统之间可以共享文件或目录,NFS的客户端(一般为应用服务器,例如web)可以通过挂载(mount)的方式将NFS服务器共享的数据目录挂载到NFS客户端本地系统中,从客户端本地看,NFS服务器端共享目录就好像是客户端自己的磁盘分区或者目录一样,而实际上却是远端的NFS服务器的目录。
NFS企业在企业中的应用场景,在企业集群架构的工作场景中,NFS网络文件系统一般被用来存储共享视频、图片、附件等静态资源文件,通常网站用户上传的文件都会放到NFS共享中,例如产品的图片附件头像,然后前端所有节点在访问这些静态资源时都会读取NFS存储上的资源。

NFS是当前互联网系统架构中最常用的数据存储服务之一,特别是中小型网站应用频率更高。

2.NFS挂载原理

NFS服务器挂载结构图

如图所示:

NFS服务器设置好了共享目录/home/public,其他有访问NFS服务器权限的客户端就可以将这目录挂载到自己本地的挂载点。A客户端将/home/public挂载到了自己本地的/home/data/mypublic,B客户端将/home/public挂载到了本地的/mnt/nfs上。

 查看磁盘信息命令 df -h

3.什么是RPC

  • RPC服务类似于NFS服务器端和NFS客户端中间的一个中介
  • 因为NFS支持的功能相当多,而不同的功能会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此,NFS的功能所对应的端口无法固定
  • 因为端口不固定,这样一来就会造成NFS客户端与NFS服务器端通信障碍,因为NFS客户端必须要知道NFS服务器端的数据传输端口才能进行通信,才能交互数据
  • 要解决上面的困扰,就需要通过远程过程调用RPC服务来帮忙了,NFS的RPC服务最主要的功能就是记录每个NFS功能所对应的端口号,并且在NFS客户端发出请求时将该端口和功能对应的信息传递给请求数据的NFS客户端,从而确保客户端可以连接到正确的NFS端口上去,达到实现数据传输交互数据目的

4.NFS客户端和NFS服务器建立连接的过程



1.首先服务器启动RPC服务,开启111端口
2. 服务器启动NFS服务,向RPC注册端口信息
3. 客户端启动RPC(portmap服务),向服务端RPC(portmap服务)请求服务端的NFS端口
4. 服务端的RPC(portmap)服务反馈NFS端口信息给客户端
5. 客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输

二.NFS安装部署

1.查看系统信息

uname -a 查看系统信息在这里插入图片描述

要养成一个习惯,就是先查看系统版本和内核参数。同一个软件在不同版本,内核之间是有差异的,所以部署的方法也不一样,不要因为这个而造成不必要的错误

2.软件安装

要部署NFS服务,必须安装下面两个软件包:nfs-utils:NFS主程序,rpcbind:PRC主程序

###安装软件
[root@localhost ~]# yum -y install  nfs-utils rpcbind    
###nfsnobody 账户id为65534
[root@localhost ~]# id  nfsnobody    
uid=65534(nfsnobody) gid=65534(nfsnobody) groups=65534(nfsnobody)

注意:在安装完该软件包后会自动创建nfsnobody用户

3.启动服务

启动NFS服务之前必须先启动RPC服务

3.1启动rpcbind服务

###启动rpcbind服务
[root@localhost ~]# systemctl start  rpcbind
###设置开机自启
[root@localhost ~]# systemctl enable  rpcbind
###查看服务状态
[root@localhost ~]# systemctl status  rpcbind
● rpcbind.service - RPC bind service
   Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2023-07-07 02:43:40 EDT; 1min 14s ago
  Process: 4671 ExecStart=/sbin/rpcbind -w $RPCBIND_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 4672 (rpcbind)
   CGroup: /system.slice/rpcbind.service
           └─4672 /sbin/rpcbind -w

Jul 07 02:43:40 localhost.localdomain systemd[1]: Starting RPC bind service...
Jul 07 02:43:40 localhost.localdomain systemd[1]: Started RPC bind service.
###查看端口
[root@localhost ~]# netstat -lntup | grep rpcbind
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      4672/rpcbind        
tcp6       0      0 :::111                  :::*                    LISTEN      4672/rpcbind        
udp        0      0 0.0.0.0:111             0.0.0.0:*                           4672/rpcbind        
udp        0      0 0.0.0.0:607             0.0.0.0:*                           4672/rpcbind        
udp6       0      0 :::111                  :::*                                4672/rpcbind        
udp6       0      0 :::607                  :::*                                4672/rpcbind        
###查看端口映射情况
[root@localhost ~]# rpcinfo -p localhost
   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

在这里插入图片描述
3.2启动NFS服务

###启动nfs服务
[root@localhost ~]# systemctl start nfs
###设置开机自启
[root@localhost ~]# systemctl enable nfs
###查看服务状态
[root@localhost ~]# systemctl status nfs
● nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)
   Active: active (exited) since Fri 2023-07-07 02:49:52 EDT; 5s ago
  Process: 5076 ExecStartPost=/bin/sh -c if systemctl -q is-active gssproxy; then systemctl reload gssproxy ; fi (code=exited, status=0/SUCCESS)
  Process: 5049 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
  Process: 5047 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
 Main PID: 5049 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/nfs-server.service

Jul 07 02:49:52 localhost.localdomain systemd[1]: Starting NFS server and services...
Jul 07 02:49:52 localhost.localdomain systemd[1]: Started NFS server and services.
###查看注册端口信息
[root@localhost ~]# rpcinfo -p localhost
   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
    100024    1   udp  10809  status
    100024    1   tcp  19282  status
    100005    1   udp  20048  mountd
    100005    1   tcp  20048  mountd
    100005    2   udp  20048  mountd
    100005    2   tcp  20048  mountd
    100005    3   udp  20048  mountd
    100005    3   tcp  20048  mountd
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    3   udp   2049  nfs_acl
    100021    1   udp  27260  nlockmgr
    100021    3   udp  27260  nlockmgr
    100021    4   udp  27260  nlockmgr
    100021    1   tcp  13722  nlockmgr
    100021    3   tcp  13722  nlockmgr

在这里插入图片描述

4.配置NFS的配置文件/etc/exports

###编辑配置
[root@localhost ~]# vim   /etc/exports
###文件内容
### share /data 
/data 10.10.100.0/24(rw,sync)

在这里插入图片描述
nfs配置文件的格式:

NFS共享的目录 NFS客户端地址(参1,参2,……) NFS客户端地址2(参1,参2,……)或者

NFS共享的目录 NFS客户端地址(参1,参2,……)

上述各列参数的含义:

NFS共享的目录:为NFS服务端要共享的实际目录,要用绝对路径如(/data)。注意共享目录的本地权限,如果需要读写共享,一定要让本地目录可以被NFS客户端的用户(nfsnobody读写

NFS配置参数权限

参数名称参数用途
rw表示可读可写权限
ro表示只读权限
sync请求或写入数据时,数据同步写入到NFS Server的硬盘才会返回,优点:数据安全不会丢失;缺点:性能比比启用该参数要差
async写入数据时会先写入内存缓冲区,直到硬盘有空挡才会写入硬盘,这样可以提升写入效率。风险:若是服务器宕机或不正常关机,会损失缓冲区中为写入硬盘的数据
all_squash不管访问NFS Server共享目录的用户身份如何,它的权限都将被压缩为匿名用户,同时它的UID和GID都会变成nfsnobody账号身份
anonuidanonuid就是匿名的uid和gid。说明客户端以什么权限来访问服务端,在默认情况下是nfsnobody,uid65534
anongid同anonuid一样,就是把uid换成gid

5.创建共享目录

###创建目录
[root@localhost ~]# mkdir /data
[root@localhost ~]# ll -d /data/
drwxr-xr-x. 2 root root 6 Jul  7 16:14 /data/

6.更改共享目录权限

###修改权限
[root@localhost ~]# chown -R nfsnobody:nfsnobody /data
[root@localhost ~]# ll -d /data/
drwxr-xr-x. 2 nfsnobody nfsnobody 6 Jul  7 16:14 /data/

7.重新加载NFS服务

###重新加载服务
[root@localhost ~]# systemctl restart  nfs

8.检查服务器是否能够挂载

###showmount命令显示信息
[root@localhost ~]# showmount -e localhost
Export list for localhost:
/data 10.10.100.0/24

在这里插入图片描述

出现上面信息是,说明服务器可以挂载
测试的IP地址为NFS服务器的IP地址

9.NFS客户端配置

9.1 安装客户端软件

###安装软件
[root@localhost ~]# yum -y  install nfs-utils rpcbind   

安装nfs-utils软件的目的是为了使用showmount等功能,所以客户端最好也装上,但是不启动NFS服务
9.2 启动rpcbind服务

[root@localhost ~]# systemctl  start   rpcbind

9.3 检查能否访问服务器

[root@localhost ~]# showmount -e  10.10.100.222
Export list for 10.10.100.222:
/data 10.10.100.0/24

在这里插入图片描述

10.挂载NFS共享目录

###挂载NFS目录
[root@localhost mnt]# mount 10.10.100.222:/data /mnt
###查看磁盘挂载情况
[root@localhost mnt]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 7.8G     0  7.8G   0% /dev
tmpfs                    7.8G     0  7.8G   0% /dev/shm
tmpfs                    7.8G  9.0M  7.8G   1% /run
tmpfs                    7.8G     0  7.8G   0% /sys/fs/cgroup
/dev/mapper/centos-root   50G   22G   29G  44% /
/dev/sda1               1014M  155M  860M  16% /boot
/dev/mapper/centos-home   42G   33M   42G   1% /home
tmpfs                    1.6G     0  1.6G   0% /run/user/0
10.10.100.222:/data       44G  8.9G   36G  21% /mnt

在这里插入图片描述

11.测试读写数据

客户端创建文件在这里插入图片描述
服务器上查看
在这里插入图片描述

12.实现开机挂载

方法1
放入/etc/rc.local中,以实现开机自动挂载

 [root@localhost ~]# chmod +x /etc/rc.local 
 [root@localhost ~]# echo "#mount by  tdm"   >> /etc/rc.local 
 [root@localhost ~]# echo "/bin/mount  -t nfs 10.10.100.222:/data /mnt"  >> /etc/rc.local 

方法2
为什么fstab无法实现nfs挂载?

  • 开机启动流程所致
  • 加载防火墙在前
  • 加载网卡

放入fstab中,使用延迟服务

[root@localhost ~]# vim /etc/fstab 
[root@localhost ~]# echo " 10.10.100.222:/data  /mnt   nfs  defaults 0 0 "  >> /etc/fstab 
[root@localhost ~]# systemctl start  remote-fs.target

参考:https://www.cnblogs.com/me80/p/7464125.html

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: NFS服务器是一种网络文件系统,它的工作原理是将文件系统挂载到网络上,使得客户端可以通过网络访问服务器上的文件。具体流程是:客户端向服务器发送文件访问请求,服务器接收到请求后,将文件系统挂载到网络上,并将文件传输给客户端。客户端可以对文件进行读写操作,操作完成后,将文件传回服务器。NFS服务器的工作原理和流程可以提高文件共享的效率和便捷性。 ### 回答2: NFS(Network File System)是一种基于网络的文件系统协议,用于在网络上共享文件和目录。NFS服务器的工作原理和流程如下: 1. 服务器配置:首先,NFS服务器需要进行配置。管理员需要指定共享的文件和目录,并设置访问权限。 2. 客户端请求:当网络上的客户端需要访问共享文件或目录时,它会向NFS服务器发送请求。该请求包含操作(如读取、写入、修改等)的类型和所需的文件路径。 3. 服务器响应:NFS服务器接收到客户端请求后,会进行相应的处理。它会检查请求的合法性和权限,并寻找被请求的文件或目录。 4. 数据传输:如果请求涉及到文件的读取或写入操作,NFS服务器会根据请求将数据从服务器传输到客户端,或从客户端传输到服务器。数据传输采用网络通信协议,如TCP/IP。 5. 错误处理:如果在处理请求过程中发生错误,NFS服务器会产生相应的错误信息,并将其发送给客户端。客户端可以根据错误信息进行相应的处理,如重新发送请求或提示用户错误信息。 6. 完成请求:当NFS服务器成功处理请求并完成数据传输后,它会向客户端发送完成信号,表示请求已被成功处理。 总结来说,NFS服务器的工作原理是接收来自客户端的请求,根据请求的操作类型和文件路径进行处理,并通过网络通信协议进行数据传输。它充当文件共享的中介,提供了在网络上方便访问共享文件和目录的功能。同时,NFS服务器还负责权限管理和错误处理,以保证数据的安全性和正确性。 ### 回答3: NFS(Network File System)是一种分布式文件系统,它允许多台计算机共享文件和资源。NFS服务器的工作原理和流程如下: 1. 配置NFS服务器:首先,在目标计算机上安装和配置NFS服务器软件。然后,指定要共享的目录,并设置权限和访问规则。 2. 客户端请求:当客户端计算机需要访问共享文件时,它发送文件访问请求到NFS服务器。请求中包括要读取或写入的文件名和所需的权限。 3. 服务器响应:NFS服务器接收到客户端的请求后,检查请求的合法性和权限。如果请求合法,则服务器开始处理该请求。 4. 文件传输:NFS服务器通过网络将请求的文件分割成小块(通常为块大小)并传输给客户端计算机。客户端计算机通过接收这些块来获取文件内容。 5. 缓存管理:NFS服务器会将一部分数据缓存在内存中,以提高文件访问速度。 当客户端再次访问相同的文件时,服务器可以直接从缓存中读取文件数据,而不是再次访问磁盘。 6. 文件更新:当客户端计算机对共享文件进行更改时,它会发送更新请求给NFS服务器。 服务器会记录这些更改并将其写入磁盘,以确保数据的一致性。 7. 安全性和权限:NFS服务器根据权限设置来控制文件的访问。它会验证客户端的身份和权限,并仅提供允许的文件访问。对于敏感数据,可以使用加密或其他安全措施来保护数据的安全性。 总之,NFS服务器允许多台计算机之间通过网络共享文件和资源。它的工作原理是接收客户端的请求,将文件分割成小块并传输给客户端,同时使用缓存管理来提高访问速度,确保数据的一致性和安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值