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=,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 服务器也不检查其父目录的权限,这样可以提高效率 |
小结
目前就这些内容,如果出现问题可以联系我,当然,如果你觉得这个文章对你有帮助,请点击 推荐~
NFS4 挂载同主机多个目录的更多相关文章
- Vmware10中Centos7挂载Windows主机的共享文件夹,提示:Error: cannot mount filesystem: No such device
1.设置共享权限 2.安装VMware tools 点击虚拟机 点击安装 VMware tools 将/run/media/zhaojq/VMware\ Tools 目录下的VMwareTools-9 ...
- 景安快云VPS挂载数据盘至指定目录 使得系统与数据分离
如果我们细心的用户会发现购买景安快云VPS主机后,通过df检测看到系统盘大小与我们购买时候给的不一样,这个是很正常的事情.一般VPS主机商会通过给予系统盘和数据盘一并的数据磁盘给我们,但是默认我们看到 ...
- linux挂载本地windows分区或目录
linux挂载本地windows分区或目录 一.linux挂载本地windows硬盘分区 向虚拟机Centos添加本地windows硬盘 注:(添加物理硬盘后,在centos操作会直接写入本地硬盘) ...
- 使用nfs3将hdfs挂载到本地或远程目录(非kerberos适用)
最基本的配置方法,aix.kerberos等的操作详见http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/Hdf ...
- sftp服务器搭建以及挂载新硬盘到home目录下
前言 我身边一直有一个空闲不用的硬盘,一直空闲不用,闲暇的时候想到为什么不用起来呢,于是想起来搭建一个sftp服务器,当做云盘用了 搭建sftp服务器 SFTP称作"安全的FTP" ...
- 使用docker-compose运行nginx容器挂载时遇到的文件/目录问题
单独使用docker run命令指定挂载文件路径运行nginx容器是可以的,但是用在docker-compose中就不行了 报错如下: 原因就是挂载出错,不能直接挂载文件,还有挂载的容器里的目录要正确 ...
- docker:(3)docker容器挂载宿主主机目录
有一项重要的参数 -v 目录挂载,就是让容器内部目录和宿主主机目录关联起来,这样就可以直接操作宿主主机目录而不用再操作具体容器了 比如在2中,我们要发布一个war包,是通过 sudo docker c ...
- 将宿主主机上的目录挂载到Docker中
docker run -it -v /home/zhouqun/文档/workplace:/var/www/html ubuntu64 /bin/bash 将宿主主机中/home/文档/workpla ...
- 怎么把Windows主机上的目录共享到Ubuntu上
使用Oracle VM VirtualBox在Windows主机上创建了一台Ubuntu虚拟机,怎么把宿主机上的目录共享到Ubuntu上,可使用以下方法: eg.把Windows主机上D盘里的test ...
随机推荐
- 接口规范,js处理json,php返回给ajax的数据格式
ajax异步获取php数据. 一般php会在后台处理请求,并返回结果给前端. 必须是echo的方式,不然ajax获取不到. 返回的类型包括,字符串,数字,json. 最常用的就是json. 返回后,前 ...
- python学习(十七) 扩展python
c, c++, java比python快几个数量级. 17.1 考虑哪个更重要 开发速度还是运行速度更重要. 17.2 非常简单的途径:Jython和IronPython Jython可以直接访问JA ...
- 40个Java多线程问题总结【转】
1.多线程有什么用? 一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡.所谓”知其然知其所以然”,”会用”只是”知其然”,”为什么用”才是”知其所以然 ...
- 小记一次mysql启动失败没有日志的处理
本来mysql好的,之前清理了一次tmp下的东西,mysql在查询的时候提示: Can't create/write to file '/tmp/ib0n3frL 然后停止启动: [root@sevc ...
- CVE-2017-11882复现配合koadic
项目地址:https://github.com/iBearcat/CVE-2017-11882 首先开启koadic,然后配置一下 复制这句代码 mshta http://192.168.220.13 ...
- Django项目部署-01
1. 安装Python 下载链接:https://www.python.org/getit/ 我这边下载的是3.6.5的版本的执行版本,安装过程中选择自动安装pip 2.安装django pip in ...
- Ubuntu下编写C语言程序
新建C文件,新建一个文件用touch,新建文件夹用mkdir. 打开文本编辑器,编辑C文件,命令用gedit xxx.C 编写C程序,Ctrl+S保存 编译运行 1.gcc命令是编译 -o是可选项 是 ...
- C# RSA的加解密与签名验证
最近做了一个CS架构的序列号生成器,用到 RSA加解密技术,以下是RSA的使用方法 RSA加密算法是一种非对称加密算法.在公钥加密标准和电子商业中RSA被广泛使用.RSA是1977年由罗纳德•李维斯特 ...
- Cause: java.sql.SQLException: 无效的列索引
今天调试代码发现“Cause: java.sql.SQLException: 无效的列索引”,查资料得出结论如下: 1.sql串的?号用''括了起来. 例如:select* from user t ...
- typedef struct与struct的区别
typedef struct与struct的区别 1. 基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字.这里的数据类型包括内部数据类型(int,char等)和自定义的数据 ...