Linux网络服务之NFS服务

NFS概述

什么是NFS?

NFS:Network File System 网络文件系统,基于内核的文件系统。Sun 公司开发,通过使用 NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件,基于RPC(Remote Procedure Call Protocol 远程过程调用)实现。

RPC远程调度

RPC全称是 Remote Procedure Call ,翻译过来就是——远程过程调用/调度,RPC 服务会指定一个端口(111)来对外提供服务,这个服务主要功能就是去记录 NFS server 上每个 NFS 功能所对应的端口,并且通知给 client,让 client 可以连接到正确的端口上去。

RPC是如何知道每个NFS功能的端口呢?

当 NFS server 服务启动时,会启用一些功能,然后这些功能会去随机调用一些端口,这时候 NFS server 就会向 RPC 去注册这些端口,RPC 将注册端口记录下来,并且 RPC 开启 111 去监听 client 的请求,如果 client 有请求,那么 RPC 就会将记录的 NFS 端口信息通知给 client,client 获取到 NFS server 的端口信息后就能够与 NFS server 进行通信了

NFS的工作原理 

1、首先 server 启动 RPC 服务,并开启 111 端口
2、接着 server 启动 NFS 服务,并向 RPC 注册端口信息
3、client 启动 RPC(portmap服务),向 server 的 RPC (portmap) 服务发送请求,请求 server 的 NFS 端口
4、server 的 RPC(portmap) 服务返回 NFS 端口信息给 client
5、client 通过获取的 NFS 端口来建立和 server 的 NFS 连接并进行数据的传输

 NFS的优缺点

NFS 优点:
    1)将常用的数据放在一台可以通过网络访问的服务器上,以此来节省 client 本地存储空间
    2)部署简单快捷,上手容易
    3)维护简单

NFS 缺点:
    1)容易发生单点故障,一旦 server 宕机,那么所有的 client 就访问不到数据了
    2)因为后端只有一台 server,在高并发情况下 server 端容易出现性能瓶颈
    3)NFS 数据是明文传输,而且不会对数据完整性做验证,所以安全性较差(建议在局域网内使用)

 NFS的常见应用场景

1、家庭网络存储:家庭网络存储设备使用NFS协议来提供共享文件和媒体,家庭成员可以从各自的设备上访问和播放共享的照片、音乐和视频。

2、云存储服务:许多云存储服务(如Dropbox、Google Drive)使用NFS协议来提供文件共享和同步功能,用户可以轻松地访问和分享文件,而无需考虑文件在哪个设备上。

3、远程办公:随着越来越多的人在家里工作,远程办公变得越来越普遍。在这种情况下,NFS可以提供一种方便的方式,让员工可以从家里的电脑上直接访问共享文件和数据,以便于工作。

4、大型零售商:一些大型零售商使用NFS来管理其海量的产品图像和描述信息。通过使用NFS,这些零售商可以确保其数百万的产品信息保持同步,并在需要时快速地检索和访问。

NFS安装 

NFS软件安装介绍

相关软件包:nfs-utils,rpcbind

端口:2049(nfsd),其他端口有rpc(111)分配

NFS服务主要进程:

 rpc.nfsd 最主要的NFS进程,管理客户端是否可登录
 rpc.mountd 挂载和卸载NFS文件系统,包括权限管理
 rpc.lockd 非必要,管理文件锁,避免同时写出错
 rpc.statd 非必要,检查文件一致性,可修复文件

NFS的管理文件

1、NFS 文件系统维护指令:/usr/sbin/exportfs

维护 NFS 共享资源的命令,可以对共享资源进行更新、删除等

2、共享资源的登录文件:/var/lib/nfs/*tab

在 NFS server的登录文件都放置到 /var/lib/nfs/ 目录里面,在该目录下有两个比较重要的登录文件,一个是 etab ,主要记录了 NFS 所共享出来的目录的完整权限设定值;另一个 xtab 则记录曾经连接到此 NFS 服务器的相关客户端数据

3、客户端查询服务器分享资源的指令:/usr/sbin/showmount

showmount 则主要用在 Client 端, 可以用来查看 NFS server 共享出来的目录资源

NFS配置文件 

/etc/exports
/etc/exports.d/*.exports

NFS共享配置文件

vim /etc/exports

其中添加内容如下:

共享资源(共享目录)        主机1(op1,op2) 主机2(op1,op2)

其中主机格式为

        anonymous:表示使用通配所有客户端

        单个主机:ipv4,ipv6,FQDN

        IP networks:两种掩码格式均支持

        172.18.0.0/255.255.0.0

        172.18.0.0/16

        wildcards:主机名通配,例如:.test.com,IP不可以

        netgroups:NIS域的主机组,@group_name

op1格式为:

        默认选项:(ro,sync,root_squash,no_all_squash)

        ro,rw 只读和读写

        async 异步,数据变化后不立即写磁盘,先写入到缓冲区中,过一段时间再写入磁盘,性能高,安全性低

        sync(1.0.0后为默认)同步,数据在请求时立即写入共享存储磁盘,性能低,安全性高

        root_squash (默认)远程root映射为nfsnobody,UID为65534,CentOS8 为nobody,CentOS 7以前的版本为nfsnobody

        no_root_squash 远程root映射成NFS服务器的root用户

        all_squash 所有远程用户(包括root)都变成nfsnobody,CentOS8 为nobody

        no_all_squash (默认)保留共享文件的UID和GID

        anonuid和anongid 指明匿名用户映射为特定用户UID和组GID,而非nobody,可配合all_squash使用

NFS配置示例:

 # vim /etc/exports 
/myshare server.example.com
/myshare *.example.com
/myshare server?.example.com
/myshare server[0-20].example.com
/myshare 172.25.13.10
/myshare 173.25.0.0/16
/myshare 2000:472:18:b51:c32:a21
/myshare 2000:472:18:b51::/64
/myshare *.example.com 172.28.0.0/16
/myshare desktop.example.com(ro)
/myshare desktop.example.com(ro) server[0-20].example.com(rw)
/myshare diskless.example.com(rw,no_root_squash)

NFS一些工具

 rpcinfo

可以查看RPC相关信息,查看注册在指定主机的RPC程序

rpcinfo -p IP

        rpcinfo -p 192.168.2.11

exportfs

 可用于管理NFS导出的文件系统

常见选项

-v  #查看本机所有NFS共享
-r  #重读配置文件,并共享目录
-a  #输出本机所有共享
-au  #停止本机所有共享

showmount

查看远程主机的NFS共享目录

showmount -e IP

实现两台服务器之间的NFS文件共享

    1、安装两个包
        yum -y install nfs-utils rpcbind
    2、启用服务
        systemctl start rpcbind
        systemctl start nfs-server
    3、编辑服务器的配置文件
        vim /etc/exports
        在中添加一行
        共享资源    共享给谁(共享的权限)        允许所有人可以访问用%
            /test    客户机ip(rw)读和写的权限
            /test    192.168.143.129(rw)
    4、重启服务
        systemctl restart nfs-server        不建议
        exportfs -r                    建议
        exportfs -v
    5、客户端挂载和查看
        showmount -e 服务器ip地址
        mount.nfs 服务器IP地址:共享文件目录 挂载到什么地方
        mount.nfs 192.168.143.7:/test /data
        df -h    查看是否挂载成功
    6、进行测试
        在服务器共享目录下创建一个文件
        touch /test/file1
        在客户端查看是否有内容

    7、客户端测试

        在挂载点下创建文件

        touch file

        发现没有权限创建

    8、服务器赋予目录所有权限

        chmod 777 /test

    9、客户端再次测试

        touch file

        创建成功

    10、服务器查看创建文件的所有者

        ll /test

        发现客户端映射到目录中的所有者为nfsnobody

    11、给nfsnobody设置ACL权限

        先恢复目录原本的权限

        chmod 755 /test

        setfacl -m u:nfsnobody:rwx /test

    12、客户端再次测试ACL权限

        touch /data/file

总结

最后用一个案例来应用上面的一些命令,才能让我们更加深刻的体会到这些命令的作用,NFS是一种广泛应用于Linux系统中的文件共享协议,它可以帮助不同计算机之间共享文件和目录。使用NFS可以减少数据冗余、提高效率和数据可靠性。要使用NFS,需要在服务器上安装NFS服务器软件,并配置要导出的目录,然后在客户端计算机上安装NFS客户端软件,并将共享资源挂载到本地文件系统。然而,使用NFS也存在一些风险,如需要确保服务器的安全性以防止未经授权的访问,并受到网络带宽和延迟的影响。因此,在正确配置和管理NFS时,需要仔细考虑这些因素以确保数据的安全性和共享效率。

到这里NFS的基本使用就结束了,谢谢大家!

  • 19
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值