zoukankan      html  css  js  c++  java
  • NFS4 挂载同主机多个目录

    写在前面的话

    事情是酱婶儿的,前两天实在是帮他们查日志查的心里交瘁了,而且有些时候下班了,也就不想再接到这样的需求,于是想基于 Nginx 做一个文件下载中心,在这个文件下载中心里面存有各个服务的日志。用户认证采用 Nginx 自己的用户认证方式。所以想到了将服务器多个日志目录都采用 NFS 挂载的方式交予 Nginx 的机器,但是在这个时候,惊喜发生了。

    以前用 NFS 的时候都是每个服务器都只有一个目录需要挂载,这一次多个,于是美滋滋的挂载上去,在网上随便搜了一个参数。然后愉快的挂载上了。结果过了几天他们在使用的时候,突然给我反馈,所有目录的日志是一样的,于是瞬间懵逼,完全不相信,登录上去一看,我x,还真是。然后问了几个老哥,终于有人遇到这个问题,推荐我使用 NFS4 协议,然后愉快实现了需求,在这里做个分享~

    谈谈 NFS 和 NFS4 协议

    NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源,分为服务端(Server)和客户端(Client)。最早由 sun 公司开发,是类 unix 系统间实现磁盘共享的一种方法。

    这是网上到处都可以看到的一个概念,我这里可以加一些个人理解:NFS,及 Network File Share,文件共享。我们需要记住一个很重要的概念,服务端和客户端的区别,这是很多人至始至终都没有弄清楚的一个东西。

    服务端:文件在我这里,由我共享出去,所以我是老大,我是服务端。

    客户端:我去网络中找服务端,将他共享的文件挂载我的系统下,从而实现访问。

    至于 NFS4,及 NFS 协议的 version 4,在原有的基础上对多目录文件共享做了优化~

    安装部署 NFS

    闲话少说,直接开干,具体拓扑图如下:

     

    我们以两台测试机器为例,系统都为 CENTOS 7.5~

    我们要共享的目录结构如下图,我们想把 node1 上面的三个目录都刚想出去给 node2 挂载:

    【1】在 node1 上面部署配置 NFS 服务端:

    # 安装需要的包
    yum -y install nfs-utils rpcbind 
    
    # 添加共享配置
    vim /etc/exports

    内容如下:

    /nfsdata 192.168.100.101(rw,fsid=0,sync,no_wdelay,insecure_locks,no_root_squash)

    简单的说一下配置:

    1. 这是一个通用的配置,几乎对挂载目录没做什么限制,参数后续会就行补充说明。

    2. 三个目录,但是我们只做了 1 条规则,这个规则是下面需要共享目录的顶层目录。

    3. 在规则的后面有个 fsid=0 的配置,这是 NFS4 不可缺少的。 

    启动服务:

    # 启动 rpcbind 和配置开机自启动
    systemctl start rpcbind
    systemctl enable rpcbind
    
    # 启动 nfs 和配置开机自启动
    systemctl start nfs
    systemctl enable nfs

    查看本机共享目录情况:

    showmount -e

    如图:

    注意:在我们修改 exports 文件的添加其他目录的时候,我们需要重启 rpcbind 和 nfs 服务端服务,再度查看才会存在!

    【2】在 node2 上面部署 nfs 客户端: 

    yum -y install nfs-utils rpcbind

    启动服务,和服务端不同的是,我们只需要启动 rpcbind 服务即可~

    # 启动 rpcbind 和配置开机自启动
    systemctl start rpcbind
    systemctl enable rpcbind

    查看指定服务器授权给我们的目录:

    showmount -e 192.168.100.100

    结果如图:

    本地的目录结构:

    我们依次想把 node1 上面的 test123 挂载到 node2 上面的 data123 ~

    mount -t nfs4 192.168.100.100:/test1 /nfsdata/data1
    mount -t nfs4 192.168.100.100:/test2 /nfsdata/data2
    mount -t nfs4 192.168.100.100:/test3 /nfsdata/data3

    和传统的 nfs 不一样,这里我们指定协议为 nfs4

    查看挂载结果: 

    nfsstat -m

    结果如图: 

    查看目录效果: 

    至此,NFS 同主机多目录 NFS4 协议挂载完成~ 

    参数说明

    【1】挂载授权 IP 说明:

    配置说明
    授权某个IP 192.168.1.1
    授权某个网段 192.168.1.0/24
    授权某个域名 www.baidu.com
    授权某个域 *.baidu.com
    授权所有 *

    【2】授权参数:

    参数说明
    ro 目录只读
    rw 目录可读写
    all_squash 将远程访问的所有普通用户和组都映射为匿名(nfsnobody)
    no_all_squash 与 all_squash 取反(默认设置)
    root_squash 将 root 用户及所属组都映射为匿名用户或用户组(默认设置)
    no_root_squash 与 root_squash 取反
    anonuid=xxx 将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx)
    anongid=xxx 将远程访问的所有用户组都映射为匿名用户组,并指定该匿名用户组为本地用户组(GID=xxx)
    secure 限制客户端只能从小于 1024 的 tcp/ip 端口连接 nfs 服务器(默认设置)
    insecure 允许客户端从大于 1024 的 tcp/ip 端口连接服务器
    sync 将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性
    async 将数据先保存在内存缓冲区中,必要时才写入磁盘
    wdelay 检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置)
    no_wdelay 若有写操作则立即执行,应与 sync 配合使用
    subtree_check 若目录是一个子目录,则 nfs 服务器将检查其父目录的权限(默认设置)
    no_subtree_check 即使目录是一个子目录,nfs 服务器也不检查其父目录的权限,这样可以提高效率

    小结

    目前就这些内容,如果出现问题可以联系我,当然,如果你觉得这个文章对你有帮助,请点击 推荐~

  • 相关阅读:
    ABP理论学习之Swagger UI集成
    最佳加法表达式
    洛谷 P1736 创意吃鱼法
    洛谷P1387 最大正方形
    1078 最小生成树
    判断元素是否存在
    1531 山峰 【栈的应用】
    洛谷 P2335 [SDOI2005]位图
    矿藏估价
    二分法小结
  • 原文地址:https://www.cnblogs.com/Dy1an/p/10536093.html
Copyright © 2011-2022 走看看