搭建 NFS 环境

NFS 介绍

NFS(Network File System) 即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。NFS的数据传输基于RPC(remote procedure call)协议。

NFS 应用场景是:A,B,C 三台机器上需要保证被访问到的文件是一样的。A共享数据出来,B和C分别去挂载A共享的数据目录,从而B和C访问到的数据和A上的一致。

例子:跑了一个网站,上面传输了很多图片,用户访问一个图片时,需要从A机器上去请求,但A机器负载高,为了分担负载,就多弄了两台机器,B机器C机器同时提供服务;正常的话,需要到A机器上才能拿到数据,但是B机器和C机器做了负载均衡,分担了相同的服务器,那么用户也有可能到B机器或者C机器上;那么用户请求到B机器上的时候,如何才能获取到A机器上的数据呢;要么把A机器的数据传输到B机器上,同时传输到C机器上,但是这个不能时时更新,(用户上传的数据是存放在A机器上,但用户请求的时候数据是请求到B机器上)这样A上的数据还没到B上面去,就会导致用户请求获取的数据访问不到,访问为空,为404;那么NFS服务就可以解决这个问题,将A机器的数据共享到B机器、C机器,通过NFS来实现。有NFS服务以后,上传到A机器上的数据,B机器或C机器上就能马上看到和调用。NFS可以实时同步数据。

NFS原理图:

p0TKJJ.jpg

NFS 服务端安装配置

服务端配置

服务端IP:192.168.1.101

  • 安装NFS工具:

    sudo apt install -y nfs-kernel-server
    
  • 配置NFS:

    安装NFS服务后,会新增一个/etc/exports文件,NFS服务根 据它的配置来运行,其默认内容可通过命令 cat /etc/exports 查看,它默认包含了一些配置 的范例,内容如所示。

    # /etc/exports: the access control list for filesystems which may be exported
    # to NFS clients.
    # See exports(5).
    #
    # Example for NFSv2 and NFSv3:
    # /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
    #
    # Example for NFSv4:
    # /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
    # /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
    

    编辑 /etc/exports 文件,加入下面内容:

    [root@localhost ~]# sudo vim /etc/exports
    /home/nfstestdir 192.168.1.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000,no_subtree_check)
    
    • /home/nfstestdir:要共享的开发主机目录,注意使用空格与后面的配置隔开。
    • 192.168.1.0/24 配置谁可以访问,其中的/24是掩码, 即掩码是255.255.255.0。
    • rw: 表示客户机的权限,rw表示可读写,具体的权限还受文件系统的rwx及用户身份影响。
    • sync:资料同步写入到内存与硬盘中。
    • anonuid=1000:将客户机上的用户映射成指定的本地用户ID的用户,请根据具体的主机用户组gid进行配置。
    • anongid=1000: 将客户机上的用户映射成属于指定的本地用户 组ID,请根据具体的主机用户组gid进行配置。
    • no_subtree_check:不检查子目录权限,默认配置。
  • 更新exports配置:

    修改完/etc/exports文件并保存后,可使用exportfs命令更新配置:

    sudo exportfs -arv
    
  • 启动NFS服务:

    安装完成后,系统会自动启动rpcbind服务(在服务端进程名为systemd),默认监听的端口为111端口:

    [root@localhost ~]# ps aux | grep rpc
    rpc 2390 0.0 0.0 64964 1044 ? Ss 21:19 0:00 /sbin/rpcbind -w
    root 3826 0.0 0.0 112680 972 pts/0 R+ 21:31 0:00 grep --color=auto rpcbind
    [root@localhost ~]# netstat -lntp 
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name 
    tcp 0 0 0.0.0.0:111 0.0.0.0: *LISTEN 1/systemd 
    ......
    tcp6 0 0 :::111 :::* LISTEN 1/systemd 
    ......
    

    启动NFS服务命令:

    sudo systemctl start nfs
    

    将NFS服务加入开机启动项命令:

    sudo systemctl enable nfs
    

客户端配置

在 ICE-EVB 开发板上安装 NFS 客户端,安装命令如下:

apt install nfs-common -y
  • 客户端挂载:

    检查客户端是否有权限访问服务端文件:

    showmount -e 192.168.1.101
    

    显示信息如下:

    [root@localhost ~]# showmount -e 192.168.1.101
     Export list for 192.168.1.101:
     /home/nfstestdir 192.168.1.0/24
    

    客户端已有权限访问服务端

    开始挂载:

    mount -t nfs 192.168.1.101:/home/nfstestdir /mnt/
    df -h
    
    ......
    192.168.1.101:/home/nfstestdir 16G 5.2G 11G 33% /mnt
    
  • 测试:

    在客户端/mnt目录下创建test文件:

    [root@localhost ~]# touch /mnt/test
    [root@localhost ~]# ls -l /mnt/
    总用量 0
    -rw-r--r--. 1 mysql mysql 0 1月 16 22:05 test
    

    查看服务端/home/nfstestdir/目录:

    [root@localhost ~]# ls -l /home/nfstestdir/
    总用量 0
    -rw-r--r--. 1 mysql mysql 0 1月 16 22:05 test
    // 存在个客户端上一样的文件,实现了同步共享。
    
  • 取消挂载:

    sudo umount /mnt
    

results matching ""

    No results matching ""