【运维知识进阶篇】集群架构-NFS网络文件系统

简介: 【运维知识进阶篇】集群架构-NFS网络文件系统

本篇文章给大家介绍NFS相关知识,NFS是网络文件系统的缩写,主要功能是通过网络让不同主机系统之间可以共享文件和目录。NFS系统和Windows网络共享、网络驱动器类似,只不过Windows用于局域网,NFS用于企业集群架构中,大型网站会用到更复杂的分布式文件系统FastDFS,glusterfs,HDFS等等。

NFS使用场景

NFS实现了多台服务器之间的数据共享,遵循了数据一致性。

例如A用户上传图片,通过负载均衡将请求发送到了Web01服务器,如果集群中没有NFS,图片就上传到了Web01服务器,B用户想要查看A用户上传的图片,如果负载均衡将请求发送到Web01上,就可以查看到,但是如果发送到其他Web服务器,例如Web02上,就无法查到A用户上传的图片。

但是如果有NFS,则A用户的请求不管发送到哪个服务器,图片都会保存到NFS中,那么B用户访问的时候,请求不管发送到哪个服务器,都可以看到这个图片。

 

本地文件操作原理

1、用户执行命令,该命令会调用shell解释器翻译给内核;

2、内核解析完成后会驱动对应的硬件设备,完成相应的操作。

 

NFS实现原理

1、用户通过客户端进行发送请求,上传静态资源,请求通过负载均衡发送到Web服务器,此时Web服务器作为NFS的客户端,会将请求(读、写、创建、移动、改名)进行函数封装,转成二进制,与NFS服务端进行TCP/IP连接,把二进制数据传递给NFS服务端。

2、NFS的客户端与服务端是需要通过端口进行连接的,NFS的服务端如何进行这个端口的分配,就需要Portmap来控制,Portmap主要功能就是进行端口映射工作,那么Portmap辅助客户端连接好服务端后,Rpc.nfsd是NFS的守护进程,可以判断NFS客户端是否有权限登录服务端。此时,传输到服务端的二进制数据会变成命令执行,但是执行的命令需要在服务端有权限才行。

3、此时需要用Rpc.mount来管理NFS的文件系统,当客户端顺利通过nfsd登录NFS服务器后,在使用NFS服务所提供的文件前,需要通过文件使用权限的验证,他会读取NFS的配置文件/etc/exports来对比客户端权限。一般咱们都改NFS要挂载目录的属主属组,保证有执行命令的权限。

4、而idmap进程可以实现用户的映射和压缩,为了安全,我们不能让root用户直接去操作我们NFS服务端上的内容,所以就使用nfsnobody虚拟用户或自建的虚拟用户去执行命令。

5、最终NFS服务端会将请求的二进制转换为本地能识别的命令,传递至内核,由内核驱动硬件。

 

NFS服务端安装配置

1、我们准备一台NFS(10.0.0.31,172.16.1.31),一台Web01(10.0.0.7,172.16.1.7),都关闭防火墙,以免默认的防火墙策略禁止正常的NFS共享服务,都关闭selinux(这些都是基本操作,以后不再赘述)

2、安装NFS服务端

1. [root@NFS ~]# yum -y install nfs-utils
2. [root@NFS ~]# systemctl start nfs
3. [root@NFS ~]# systemctl enable nfs

3、配置NFS服务

格式:NFS共享目录        NFS客户端地址(参数选项)

我们将NFS服务端上的/data目录共享给172.16.1.0/24网段的所有主机

1. [root@NFS ~]# vim /etc/exports
2. /data 172.16.1.0/24(rw,sync,all_squash)
3. [root@Web01 ~]# systemctl restart nfs
4. [root@NFS ~]# cat /var/lib/nfs/etab    #NFS共享目录会记录至这个位置,如果该目录没有共享信息,则/etc/exports配置错误
5. /data  172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,all_squash)

NFS参数选项及作用

nfs共享参数 参数作用
rw 所有的客户端主机都有读写权限
ro 所有的客户端主机都有只读权限
root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户(不常用)
no_root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员(不常用)
all_squash 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户(常用)
no_all_squash 无论NFS客户端使用什么账户访问,都不进行压缩
sync 同时将数据写入到内存与硬盘中,保证不丢失数据
async 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据
anonuid 配置all_squash使用,指定NFS的用户UID,必须存在系统
anongid 配置all_squash使用,指定NFS的用户UID,必须存在系统

4、配置共享目录并修改属主属组

1. [root@NFS ~]# mkdir -p /data/
2. [root@NFS ~]# chown -R nfsnobody.nfsnobody /data/

 

NFS客户端挂载使用

1、安装NFS,仅安装不启动

[root@Web01 ~]# yum -y install nfs_utils

2、查看服务端的可挂载NFS信息

1. [root@Web01 ~]# showmount -e 172.16.1.31
2. Export list for 172.16.1.31:
3. /data 172.16.1.0/24
4. [root@Web01 ~]#

3、客户端挂载

1. [root@Web01 ~]# mkdir NFS_client_Web01
2. [root@Web01 ~]# mount -t nfs 172.16.1.31:/data NFS_client_Web01/
3. [root@Web01 ~]# df -h
4. Filesystem         Size  Used Avail Use% Mounted on
5. devtmpfs           476M     0  476M   0% /dev
6. tmpfs              487M     0  487M   0% /dev/shm
7. tmpfs              487M  7.7M  479M   2% /run
8. tmpfs              487M     0  487M   0% /sys/fs/cgroup
9. /dev/sda3           19G  2.5G   17G  13% /
10. /dev/sda1          197M  110M   88M  56% /boot
11. tmpfs               98M     0   98M   0% /run/user/0
12. 172.16.1.31:/data   19G  2.0G   17G  11% /root/NFS_client_Web01

4、挂载成功后可以进行增删改查

1. [root@Web01 ~]# touch NFS_client_Web01/1.txt
2. 
3. [root@NFS ~]# ll /data/
4. total 0
5. -rw-r--r-- 1 nfsnobody nfsnobody 0 Apr 13 18:06 1.txt

5、开机自动挂载

可以写到fstab,但不推荐,因为挂载需要客户端能ping通服务端,但是开机的时候网络和fstab不一定哪个先执行,所以不一定每次都能挂载上,最好是使用rc.local。

fstab

1. [root@Web01 ~]# vim /etc/fstab
2. [root@Web01 ~]# 172.16.1.31:/data /root/NFS_client_Web01 nfs defaults 0 0
3. [root@Web01 ~]# mount -a    #检查fstab是否写正确

rc.local

/etc/rc.local已经有了可执行权限,但是它是软链接,不管用,所以需要给/etc/rc.local或者/etc/rc.d/rc.local加可执行权限,才会开机自动执行

1. [root@Web01 ~]# cat /etc/rc.local 
2. mount -t nfs 172.16.1.31:/data NFS_client_Web01/
3. [root@Web01 ~]# chmod +x /etc/rc.d/rc.local

6、取消NFS挂载

1. [root@Web01 ~]# umount NFS_client_Web01/
2. [root@Web01 ~]# df -h
3. Filesystem      Size  Used Avail Use% Mounted on
4. devtmpfs        476M     0  476M   0% /dev
5. tmpfs           487M     0  487M   0% /dev/shm
6. tmpfs           487M  7.7M  479M   2% /run
7. tmpfs           487M     0  487M   0% /sys/fs/cgroup
8. /dev/sda3        19G  2.5G   17G  13% /
9. /dev/sda1       197M  110M   88M  56% /boot
10. tmpfs            98M     0   98M   0% /run/user/0

注意:如果取消挂载时有如下提示,可以切换至挂载目录外其他目录,再进行卸载;还不行可能是因为NFS宕机了,需要强制取消挂载。

1. umount.nfs: /nfsdir: device is busy
2. 
3. [root@Web01 ~]# umount -lf NFS_client_Web01/  #强制取消挂载

 

NFS挂载参数

-t:指定档案系统的形态

-o:指定挂载参数

在企业中,NFS共享的只是普通静态文件(图片、附件、视频),不需要执行suid、exec等权限,挂载的这个文件系统只能作为数据存取只用,无法执行程序,对于客户端来说,禁用这些权限可以增加安全性,例如:很多木马篡改站点文件都是由上传入口上传的程序到存储目录,然后执行的。

[root@Web01 ~]# mount -t nfs -o nosuid,noexec,nodev 172.16.1.31:/data NFS_client_Web01/

有时候也需要考虑性能相关参数,禁止更新目录和文件时间戳

[root@Web01 ~]# mount -t nfs -o noatime,nodiratime 172.16.1.31:/data NFS_client_Web01/

 

NFS参数权限测试

1、测试ro权限

1. [root@NFS ~]# cat /etc/exports
2. /data 172.16.1.0/24(ro,sync,all_squash)
3. [root@NFS ~]# systemctl restart nfs
4. 
5. [root@Web01 ~]# mount -t nfs 172.16.1.31:/data NFS_client_Web01/
6. [root@Web01 ~]# df -h
7. Filesystem         Size  Used Avail Use% Mounted on
8. devtmpfs           476M     0  476M   0% /dev
9. tmpfs              487M     0  487M   0% /dev/shm
10. tmpfs              487M  7.7M  479M   2% /run
11. tmpfs              487M     0  487M   0% /sys/fs/cgroup
12. /dev/sda3           19G  2.5G   17G  13% /
13. /dev/sda1          197M  110M   88M  56% /boot
14. tmpfs               98M     0   98M   0% /run/user/0
15. 172.16.1.31:/data   19G  2.0G   17G  11% /root/NFS_client_Web01
16. [root@Web01 ~]# touch NFS_client_Web01/2.txt
17. touch: cannot touch ‘NFS_client_Web01/2.txt’: Read-only file system

2、测试all_squash、anonuid、anongid权限

1. [root@NFS ~]# cat /etc/exports              #服务端配置
2. /data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
3. [root@NFS ~]# groupadd -g666 www            #创建对应用户组和用户
4. [root@NFS ~]# useradd -u666 -g666 -M -s /sbin/nologin www
5. [root@NFS ~]# id www
6. uid=666(www) gid=666(www) groups=666(www)   
7. [root@NFS ~]# systemctl restart nfs         #重载NFS
8. [root@NFS ~]# cat /var/lib/nfs/etab 
9. /data  172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=666,anongid=666,sec=sys,rw,secure,root_squash,all_squash)
10. [root@NFS ~]# chown -R www.www /data/       #修改共享项目属主属组
11. [root@NFS ~]# ll -d /data/
12. drwxr-xr-x 4 www www 52 Apr 13 18:06 /data/
13. [root@NFS ~]# ll /data/
14. total 0
15. -rw-r--r-- 1 www www 0 Apr 13 18:06 1.txt
16. 
17. [root@Web01 ~]# touch NFS_client_Web01/2.txt #客户端验证
18. [root@Web01 ~]# ll NFS_client_Web01/2.txt    #客户端查看到的属组属主是666,因为客户端没有www用户,所以只显示了uid和gid
19. -rw-r--r-- 1 666 666 0 Apr 13 18:48 NFS_client_Web01/2.txt
20. [root@Web01 ~]# groupadd -g666 www            #在客户端也创建用户组和用户,统一身份,避免后续出现权限不足的情况
21. [root@Web01 ~]# useradd -u666 -g666 -M -s /sbin/nologin www
22. [root@Web01 ~]# ll NFS_client_Web01/2.txt     #检查文件身份
23. -rw-r--r-- 1 www www 0 Apr 13 18:48 NFS_client_Web01/2.txt

 

NFS案例挂载

1、准备工作

我们准备一台NFS(10.0.0.31,172.16.1.31),一台Web01(10.0.0.7,172.16.1.7),一台Web02(10.0.0.8,172.16.1.8)在NFS上共享/data/w目录(可写)和/data/r目录(只读),将可写目录挂载到Web01,只读目录挂载到Web02

2、NFS服务端配置

1. #1、安装NFS
2. [root@NFS ~]# yum install -y nfs
3. 
4. #2、配置NFS
5. [root@NFS ~]# cat /etc/exports
6. /data/r 172.16.1.0/24(ro,sync,all_squash,anonuid=666,anongid=666)
7. /data/w 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
8. 
9. #3、创建对应用户
10. [root@NFS ~]# groupadd -g 666 www
11. [root@NFS ~]# useradd -u666 -g666 -M -s /sbin/nologin www
12. [root@NFS ~]# id www
13. uid=666(www) gid=666(www) groups=666(www)
14. [root@NFS ~]# 
15. 
16. #4、创建共享目录
17. [root@NFS ~]# mkdir -p /data/{r,w}
18. [root@NFS ~]# chown -R www.www /data/
19. 
20. #5、重启NFS
21. [root@NFS ~]# systemctl restart nfs

3、NFS客户端配置

1. #1、安装NFS
2. [root@Web01 ~]# yum -y install nfs    #Web02操作相同
3. 
4. #2、准备本地挂载点目录
5. [root@Web01 ~]# mkdir -p /data/w      #创建不同目录
6. 
7. [root@Web02 ~]# mkdir -p /data/r
8. 
9. #3、准备对应用户
10. [root@Web01 ~]# groupadd -g666 www    #Web02操作相同
11. [root@Web01 ~]# useradd -u666 -g666 -M -s /sbin/nologin www
12. [root@Web01 ~]# id www
13. uid=666(www) gid=666(www) groups=666(www)
14. 
15. #4、查看远端共享的NFS目录
16. [root@Web01 ~]# showmount -e 172.16.1.31
17. Export list for 172.16.1.31:
18. /data/w 172.16.1.0/24
19. /data/r 172.16.1.0/24
20. 
21. #5、挂载对应目录
22. [root@Web01 ~]# mount -t nfs 172.16.1.31:/data/w /data/w    
23. [root@Web01 ~]# df -h
24. 172.16.1.31:/data/w   19G  2.0G   17G  11% /data/w
25. 
26. [root@Web02 ~]# mount -t nfs 172.16.1.31:/data/r /data/r   
27. [root@Web02 ~]# df -h
28. 172.16.1.31:/data/r   19G  2.0G   17G  11% /data/r
29. 
30. #6、测试/data/r读权限 /data/w读写权限
31. [root@NFS ~]# cat /data/r/1.txt
32. 123
33. [root@NFS ~]# cat /data/w/1.txt
34. 123
35. 
36. [root@Web01 ~]# cat /data/w/1.txt 
37. 123
38. [root@Web01 ~]# touch /data/w/2.txt
39. 
40. [root@Web02 ~]# cat /data/r/1.txt 
41. 123
42. [root@Web02 ~]# touch /data/r/2.txt
43. touch: cannot touch ‘/data/r/2.txt’: Read-only file system
44. 
45. #7、实现开机自动挂载
46. [root@Web01 ~]# echo 'mount -t nfs 172.16.1.31:/data/w /data/w' >> /etc/rc.local
47. [root@Web02 ~]# echo 'mount -t nfs 172.16.1.31:/data/r /data/r' >> /etc/rc.local
48. 
49. #8、取消挂载NFS
50. [root@Web01 ~]# umount /data/w
51. 
52. [root@Web02 ~]# umount /data/r
53.

4、NFS扩展项

1)无需重启NFS服务平滑加载配置文件

1. [root@NFS ~]# cat /etc/exports
2. /data/r 172.16.1.0/24(ro,sync,all_squash,anonuid=666,anongid=666)
3. /data/w 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
4. [root@NFS ~]# exportfs -rv
5. exporting 172.16.1.0/24:/data/w
6. exporting 172.16.1.0/24:/data/r

2)NFS客户端挂载参数

[root@Web01 ~]# mount -t nfs -o noatime,nodiratime,noexec,nodev,nosuid 172.16.1.31:/data/w /data/w/

3)NFS客户端永久挂载参数

1. [root@Web01 ~]# tail -1 /etc/rc.local 
2. mount -t nfs -o noatime,nodiratime,noexec,nodev,nosuid 172.16.1.31:/data/w /data/w/

4)客户端检查挂载参数是否生效

1. [root@Web01 ~]# mount
2. [root@Web01 ~]# cat /proc/mounts     #与mount一致
3. [root@Web01 ~]# df -h                #查看挂载磁盘

 

NFS总结

1、NFS优点

NFS简单易用、方便部署、数据可靠、服务稳定、满足中小企业需求。

NFS文件系统内存放的数据都在文件系统上,所有的数据都能看见

2、NFS缺点

存在单点故障,如果构建高可用维护麻烦,Web到NFS再到Backup

NFS数据明文、不对数据做校验

客户端挂载NFS服务没有密码验证,安全性一般,所以适合内网使用

3、NFS应用建议

应该把静态数据尽可能往前端推,减少后端存储压力

必须将存储的静态资源通过CDN缓存jpg\png\mp4\avi\css\js

如果没有缓存或架构本身历史遗留问题太大,再多存储也无用,容易故障

 


我是koten,10年运维经验、持续分享运维干货,感谢大家的阅读和关注!

目录
相关文章
|
1天前
|
弹性计算 运维 Kubernetes
自动化运维的新篇章:容器编排与微服务架构
【7月更文挑战第14天】在数字化转型的浪潮中,企业对运维效率和系统可靠性的需求日益增长。本文深入探讨了自动化运维的最新趋势——容器编排和微服务架构,并阐述了如何通过这些技术提升运维效率、降低系统复杂性以及提高服务的可用性和可扩展性。文章不仅介绍了相关技术和工具的选择,还提供了实际案例分析,旨在为读者提供一套完整的解决方案框架,以适应快速变化的市场需求。
|
7天前
|
运维 Prometheus 监控
「架构」云上自动化运维及其应用
企业在云上采用自动化运维,通过Prometheus+Grafana实现监控,Ansible进行配置管理,Jenkins+GitLab+SonarQube支持CI/CD,提升效率,降低成本。关键指标包括系统可用性、故障恢复时间等。通过自动化监控、配置管理和持续集成/部署,保证服务稳定性,促进快速迭代,确保市场竞争力。持续改进与培训是维持领先的关键。
13 0
|
7天前
|
机器学习/深度学习 人工智能 运维
自动化运维在现代IT架构中的关键角色
【7月更文挑战第8天】随着技术的快速发展,自动化运维成为企业追求高效、稳定IT服务的重要策略。本文将探讨自动化运维如何优化工作流程、提升系统稳定性和安全性,以及它在现代IT架构中不可或缺的地位。
15 1
|
9天前
|
存储 消息中间件 缓存
Lustre架构介绍的阅读笔记-NFS兼容性
Lustre是分布式NFS系统,融合了分布式系统和NFS特性。它支持线性扩展容量和性能,提供POSIX语义,隐藏复杂存储细节。关键技术涉及分布式计算、缓存、锁、事务、通信(RPC、消息队列、同步/异步模式)、选举、任务调度、健康检查、负载均衡、集群管理和QoS。数据一致性、复制(副本、EC)、热点管理及多种上层协议(如NFS、S3)也是重点。分布式存储通过扩容提升读写带宽和IOPS。
|
16天前
|
运维 Kubernetes 安全
自动化运维在现代IT架构中的角色与实践
【6月更文挑战第28天】随着企业对信息技术的依赖日益加深,高效、可靠的运维体系变得至关重要。本文将探讨自动化运维如何优化现代IT架构,提升运维效率和系统稳定性。我们将从实际案例出发,分析自动化工具的选择、部署策略以及面临的挑战,为读者提供一套可行的自动化运维解决方案。
|
17天前
|
运维 Kubernetes 云计算
云计算时代的运维革新:容器化与微服务架构的融合之道
在云计算技术飞速发展的当下,企业IT运维面临前所未有的挑战与机遇。传统的运维模式已难以满足现代业务对敏捷性、可伸缩性和自动化的需求。本文深入探讨了容器化技术和微服务架构如何共同推动运维领域的革命,通过数据支持和科学分析,揭示了这一融合趋势如何提高运维效率、降低风险并促进创新。
|
21天前
|
机器学习/深度学习 运维 安全
自动化运维在现代IT架构中的应用与挑战
【6月更文挑战第23天】随着云计算和微服务架构的兴起,自动化运维成为保障系统稳定性、提升效率的关键。本文探讨了自动化运维在现代IT环境中的实践方法、面临的挑战以及未来的发展趋势,旨在为运维人员提供策略指导和技术参考。
20 0
|
22天前
|
运维 Kubernetes 监控
自动化运维的新篇章:容器化与微服务架构的融合
【6月更文挑战第22天】在数字化时代的浪潮中,企业IT架构正经历着一场深刻的变革。本文将探讨自动化运维如何通过容器化技术与微服务架构的结合,提升系统的可维护性、扩展性和敏捷性。我们将深入分析这一结合背后的技术细节,以及它如何影响日常运维工作,同时提供一系列实用的操作建议和最佳实践。
|
25天前
|
存储 负载均衡 网络协议
杨老师课堂之JavaWeb项目架构之NFS文件服务器
杨老师课堂之JavaWeb项目架构之NFS文件服务器
25 0
|
1月前
|
人工智能 运维 监控
智能化运维:AI在IT基础架构管理中的应用
【6月更文挑战第8天】本文将探讨人工智能(AI)如何革新传统的IT运维领域,实现智能化的故障预测、自动化的修复流程以及高效的资源分配。我们将通过实例分析AI技术如何优化数据中心的能源使用,提升网络性能监控的准确性,并降低系统维护成本。
49 2