nfs的使用

一、nfs是什么

  NFS(Network File System)是一个网络文件系统协议,用于在不同的计算机之间共享文件和目录。它允许一个计算机上的用户或应用程序通过网络访问另一个计算机上的文件,就像本地文件一样。
  那么nfs的应用场景有哪些呢?举个例子,现在我要发布一个视频网站,我会使用多台服务器做负载均衡,那我要在每个服务器上都存放一份视频吗,显然这样做是很不合理的,每个服务器上都放一份相同的数据,容灾能力是提高了,可是利用率也太低了,而且还涉及到一个同步的问题,比如,小明向我的网站上传了一个视频,这个视频可能上传到了服务器A上,其他服务器上没有这个视频,还要考虑服务器的同步问题,在这个场景下,我们就可以使用nfs服务,使用一台服务器作为nfs服务器,将共享目录挂载到每个服务器上,视频都存放在nfs服务器上,这样就方便多了。
  nfs中rpcbind是非常重要的一个程序,nfs的所有端口都要向rpcbind注册,客户端的请求也要经过rpcbind,rpcbind就像是一个不可或缺的中间人。在启动nfs服务之前要先启动rpcbind,这一点非常重要。

二、场景引入

  现在小明要为部门配置nfs共享存储,共享目录名为/data部门内所有人都可以将该目录挂载到自己本地,并具有读写权限。

三、实验过程

第一部分 :服务端配置

1、在服务端安装nfs-utils,安装nfs-utils会自动安装rpcbind,如没有自动安装rpcbind就再手动安装一下。

yum install -y nfs-utils

2、启动nfs服务,并设置开机自启

systemctl start rpcbind nfs-server
systemctl enable rpcbind nfs-server

查看服务运行状态

systemctl status rpcbind nfs-server

在这里插入图片描述
3、创建共享目录

mkdir /data

配置/data权限,挂载之后权限会被压缩成nobody,所以将共享目录的属主属组改为nobody,这样才能正常访问。或者赋予777权限。

chmod 777 /data/
或者:
chown -R nobody.nobody /data/

4、修改配置文件

[root@nfs ~] vim /etc/exports
[root@nfs ~] cat /etc/exports
/data *(rw,sync)

ro:只读权限;
rw:读写权限;
sync:同步,同时将数据写入内存和磁盘中;
async:异步,先将数据写到内存,然后再写入磁盘,效率较高,可能丢失数据;
root_squash:压缩root用户,当NFS客户端以root用户访问时,将其映射为nfsnobody用户;
no_root_squash:不压缩root用户,正常映射为root用户;
all_squash:压缩所有用户,即客户端任何用户访问服务端时,在服务端都将其映射为nfsnobody用户;
no_all_squash:不压缩任何用户;
anonuid:需要配合all_squash使用,将客户端的所有用户在服务端映射为指定UID的用户,该UID在服务端必须存在;
anongid:需要配合all_squash使用,将客户端的所有用户组在服务端映射为指定GID的用户组,该GID在服务端必须存在;

5、重新加载配置文件

[root@nfs ~] exportfs -arv
exporting *:/data
[root@nfs ~]

exportfs: 服务端命令,当/etc/exportfs文件改变时不需要重启服务,只需要使用exportfs命令让新配置文件生效。
常用选项为:
-r:重新导出;
-a:所有文件系统;
-v:详细信息;
-u:取消导出文件系统;
exportfs -arv 表示重读配置文件。
exportfs -auv 表示取消导出的文件系统。

6、防火墙放行服务

[root@nfs ~] firewall-cmd --add-service=nfs --permanent 
Warning: ALREADY_ENABLED: nfs
success
[root@nfs ~] firewall-cmd --add-service=rpc-bind --permanent 
success
[root@nfs ~] firewall-cmd --add-service=mountd --permanent 
success
[root@nfs ~] firewall-cmd --reload 
success
[root@nfs ~] 

第二部分:客户端配置

1、客户端安装服务

yum install -y nfs-utils

2、启动客户端程序

systemctl start nfs-client.target
systemctl enable nfs-client.target

查看状态

systemctl status nfs-client

在这里插入图片描述
3、使用showmount命令查看nfs服务器的挂载信息

[root@client-php ~] showmount -e 192.168.189.178
Export list for 192.168.189.178:
/data *
[root@client-php ~]

4、尝试挂载

[root@client-php ~] mount -t nfs 192.168.189.178:/data /mnt
[root@client-php mnt] df -Th
Filesystem            Type      Size  Used Avail Use% Mounted on
devtmpfs              devtmpfs  845M     0  845M   0% /dev
tmpfs                 tmpfs     874M     0  874M   0% /dev/shm
tmpfs                 tmpfs     874M  9.4M  865M   2% /run
tmpfs                 tmpfs     874M     0  874M   0% /sys/fs/cgroup
/dev/mapper/cs-root   xfs        44G  6.8G   38G  16% /
/dev/nvme0n1p1        xfs      1014M  343M  672M  34% /boot
tmpfs                 tmpfs     175M   12K  175M   1% /run/user/42
tmpfs                 tmpfs     175M     0  175M   0% /run/user/0
192.168.189.178:/data nfs4       44G  6.7G   38G  16% /mnt
[root@client-php mnt]#

5、尝试创建文件,验证可用性。

[root@client-php mnt] echo test > /mnt/1.txt
[root@client-php mnt] cat /mnt/1.txt
test
[root@client-php mnt]

如果在创建文件时出现错误:Permission denied,可能是因为共享目录的权限不够,直接777,见第一部分第3步

[root@client-php mnt]$ touch /mnt/dcr.txt
touch: cannot touch '/mnt/dcr.txt': Permission denied

6、现在出现了一个新问题,一个普通用户dcr创建的文件另一个普通用户operater可以删除,这是不正常的

[root@client-php ~] su - dcr
[dcr@client-php ~]$ echo dcr > /mnt/dcr.txt
[dcr@client-php ~]$ ls /mnt/dcr.txt
/mnt/dcr.txt
[dcr@client-php ~]$ cat /mnt/dcr.txt
dcr
[dcr@client-php ~]$ exit
logout
[root@client-php ~] su - operater 
[operater@client-php ~]$ rm -rf /mnt/dcr.txt 
[operater@client-php ~]$ ll /mnt/
total 4
-rw-r--r--. 1 nobody nobody 5 Jul 16 10:43 1.txt
[operater@client-php ~]$ exit

要对挂载目录进行权限控制,对共享目录/data赋予特殊权限:o+t
然后重新加载配置文件,客户端取消挂载重新挂载。这时用户只能删除自己创建的文件。

服务端:

[root@nfs ~] chmod o+t /data/
[root@nfs ~] exportfs -arv
exporting *:/data

客户端:

[root@client-php ~] umount /mnt 
[root@client-php ~] mount -t 192.168.189.178 nfs:/data /mnt/

这时,再切换到dcr用户创建一个文件,然后切换到用户operater,尝试删除dcr创建的文件,此时就不能删除了。

[root@client-php ~] su - dcr
[dcr@client-php ~]$ touch /mnt/dcr.txt
[dcr@client-php ~]$ exit
logout
[root@client-php ~] su - operater 
[operater@client-php ~]$ ls /mnt/
dcr.txt
[operater@client-php ~]$ rm -rf /mnt/dcr.txt 
rm: cannot remove '/mnt/dcr.txt': Operation not permitted
[operater@client-php ~]$ 

本文参考链接:
1、NFS共享存储
2、在CentOS8上如何安装NFS服务器和客户端

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值