一、目的
服务器A 共享目录 /data
服务器B 挂载服务器A的目录 /data
服务器C 挂载服务器A的目录 /data
…
上面的/data 只是举例,也可以是自定义的路径
二、常见的使用场景
①、应用多实例多机器部署的情况下,有一些下载或者上传的模板文件,可以放在共享目录下,方便管理维护。
②、应用多实例多机器部署的情况下,日志文件可以统一保存到共享目录下,方便管理查看。
安装NFS服务
在线安装:
yum install -y nfs-utils
离线安装:
todo~
三、操作步骤
服务器需要开启NFS服务。
这里以CentOS 服务器A,服务器B举例:
先查看nfs-server的状态
systemctl status nfs-server
systemctl status rpcbind
下面是开启的状态
如果没开启,可以执行下面启动命令
systemctl start rpcbind
systemctl start nfs-server
服务器A 和 服务器B 都确认开启nfs-server后
服务器A 创建目录 /data , 服务器B 创建目录 /data
服务器A需要在/etc/exports文件中添加可供访问的目录,并给予相应的权限。
vi /etc/exports
添加下面一行
/data *(insecure,rw,async,no_root_squash)
下面对配置进行简单解释:
-
*号 :
表示 共享/data目录下全部内容 -
insecure:
这个选项允许 NFS 使用非加密的连接。默认情况下,NFS 要求使用加密的连接(如通过 Kerberos 认证)。如果服务器未配置为使用加密连接,则可以使用此选项来禁用加密要求。需要注意的是,这可能会降低安全性。并且nfs-server可以使用1024以上的端口 -
rw :
表示读写模式挂载远程文件系统 -
async (asynchronous):
当使用 async 选项时,服务器端对数据的修改不会立即同步到磁盘上,而是由操作系统根据其策略决定何时进行同步。这可以提高性能,但也可能意味着在系统崩溃的情况下会丢失更多的数据。与之相对的是 sync 选项,它要求所有的写操作都要立刻同步到磁盘上。 -
no_root_squash :
使用 no_root_squash 选项时,root 用户在客户端的操作将会保持其 root 权限,这意味着 root 用户可以在远程文件系统中执行具有 root 权限的操作。这增加了方便性,同时也带来了安全风险。
服务器A 的/etc/exports文件配置好后,重启nfs-server:
systemctl restart nfs-server
下面开始在服务器B上执行挂载命令:
注意点: 需要其他机器挂载共享目录的机器,执行挂载命令时候必须在 根目录下执行才能真正挂载成功。
服务器B
先进入根目录:
cd /
执行挂载命令:
mount -t nfs [替换为服务器A的IP]:/data /data
查看是否挂载成功:
df -Th
如果能看到上图红框内容就表示挂载成功了。
上图表示 服务器B 的 /data 目录 挂载到了 服务器A的 /data目录
此时在服务器A上的/data目录新建一个a.txt文件 ,在服务器B的/data目录下 也能看到并操作该文件。
同理在服务器B上的/data目录新建一个b.txt文件 ,在服务器A的/data目录下 也能看到并操作该文件。
本质上在服务器B上创建的文件实际上是存储在服务器A上的。
备注:
如果想取消挂载 直接在服务器B上执行取消挂载的命令即可: umount 目录
例如 取消挂载 /data目录:
umount /data
四、设置开机重启自动挂载
systemctl enable rpcbind
systemctl enable nfs-server
编写挂载脚本:
vi /opt/nfsmount.sh
脚本内容(下面服务器A的IP需要修改你自己的服务器IP, /data 修改成你需要挂载的目录):
#!/bin/bash
echo "NFS startime:$(date +"%F %T")" >> /opt/nfs.log;
val=`df -h|grep 你的共享目录服务器IP:/你需要挂载的目录 | wc -l`
if [ $val -eq 1 ]
then
echo "NFS目录 /data已经挂载,无需重复挂载" >> /opt/nfs.log;
else
mount -t nfs 你的共享目录服务器IP:/data /data
echo "NFS目录/data 挂载成功" >> /opt/nfs.log;
exit
fi
echo "执行完毕" >> /opt/nfs.log
设置脚本执行权限:
chmod +x /opt/nfsmount.sh;
chmod +x /etc/rc.d/rc.local;
添加到开机自启动脚本:
echo "sh /opt/nfsmount.sh" >> /etc/rc.d/rc.local;
cat /etc/rc.d/rc.local;
当然也可以不用另外写个脚本,直接在/etc/rc.d/rc.local 文件内添加命令:
mount -t nfs 你的共享目录服务器IP:/data /data
还是推荐脚本方式:脚本中能记录日志,这样更友好。
五、注意事项
上述设置均为内网服务器设置,如果您的机器具有外网访问权限,请配置相关的安全选项以保证服务器的安全。