杨老师课堂之JavaWeb项目架构之NFS文件服务器

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kese7952/article/details/81013750 NFS简介NFS(Network File System)即网络文件系统。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kese7952/article/details/81013750

NFS简介

NFS(Network File System)即网络文件系统。

主要功能:通过网络(局域网)让不同的主机系统之间可以共享文件或目录。

主要用途:NFS网络文件系统一般被用来存储共享视频,图片,附件等静态资源文件。

NFS存储服务

无NFS文件共享存储

当用户A通过互联网上传文件时,经过负载均衡,随机或者定向分配到某个节点。但是当用户B去下载这个文件的时候,并不确定会向哪个节点发送请求,这样会导致用户存在一定几率下载不到的情况。

NFS_A.png

NFS_A.png

有NFS文件共享存储

当用户A通过互联网上传文件时,经过负载均衡,无论发送到哪个节点都会被存储到NFS文件服务器。但是当用户B去下载这个文件的时候,任何节点都可以读取NFS文件服务器的文件。

NFS_B.png

NFS_B.png

NFS服务的优缺点

优点

  • 简单容易上手
  • 方便部署非常快速,维护十分简单
  • 节省本地存储空间将常用的数据存放在一台服务器可以通过网络访问

缺点

  • 在高并发下NFS效率/性能有限
  • NFS的数据是明文的,对数据完整性不做验证
  • 多台机器挂载NFS服务器时,连接管理维护麻烦
  • 容易发生单点故障,如果服务端宕机,所有客户端将不能访问
  • 客户端没用用户认证机制,且数据是通过明文传送,安全性一般(一般建议在局域网内使用)

RPC工作流程

170621082430983.png

170621082430983.png

NFS支持的功能非常多,不同的功能会有不同的服务来完成,很多服务都需要监听在一些端口,其中的很多端口并不是固定的。这些服务在启动时,都需要向rpcbind服务注册一个端口,rpcbind服务随机选取一个未被使用的端口予以分配。rpcbind服务监听在111端口,所以rpcbind的主要功能就是指定每个RPC service对应的port number,并且通知给客户端,让客户端连接到正确的端口上去。

客户端向NFS服务器端请求的步骤:

  • 首先用户访问网站程序,由程序在NFS客户端上发出存取NFS文件的请求,这是NFS客户端的RPC服务就不通过网络向NFS服务器端的RPC服务的111端口发出NFS文件存取功能的查询请求,包括要实现的什么功能。
  • NFS服务器端的RPC服务找到对应的已注册的NFS端口,通知NFS客户端的RPC服务。
  • 此时NFS客户端获取到正确的端口,并与NFS联机存取数据。
  • NFS客户端把数据存取成功后,返回给客户端程序,告知用户存取结果。

注意:由于rpc service在启动时需要向rpcbind注册端口,所以rpcbind要先启动。另外若rpcbind重新启动,原来注册的数据也会不见,因此一但rpcbind重新启动,让所管理的服务因为需要重新启动以重新向rpcbind注册。

NFS服务器端配置

NFS服务器:192.168.1.180

检查并安装NFS
[root@iZ2ze74fkxrls31tr2ia2fZ ~]# rpm -qa rpcbind nfs-utils
nfs-utils-1.3.0-0.48.el7_4.1.x86_64
rpcbind-0.2.0-42.el7.x86_64

如果没有,安装 NFS 服务器所需的软件包,实际上需要安装两个包nfs-utils(nfs服务主程序)和rpcbind(rpc主程序), 不过当使用yum安装nfs-utils时会把rpcbind一起安装上。

yum install -y nfs-utils
配置说明
/etc/sysconfig/nfs #NFS的主配置文件
/etc/exports       #配置共享目录的文件

/etc/exports的配置格式:

nfs共享目录 nfs客户端地址1(参1,参2…..) 客户端地址2(参1,参2…)

说明:

nfs共享目录:为nfs服务器要共享的实际目录,绝对目录。注意权限问题。

nfs客户端地址:为nfs服务器授权可以访问的客户端的地址,可以是单独的ip地址或主机名,域名。也可以是整个网段。

授权整个网段:eg:10.0.0.0/24

文件配置实例说明:

/data/fileserver 192.168.1.190(rw,sync,no_root_squash)

若服务器端对/etc/exports文件进行了修改,可以通过exportfs命令重新加载服务而不需要重启服务。若重启服务需要重新向prcbind注册,而且对客户端的影响也很大,所以尽量使用exportfs命令来使配置文件生效。

exportfs:
exportfs -ar      #重新导出所有的文件系统
exportfs -r       #导出某个文件系统
exportfs -au      #关闭导出的所有文件系统
exportfs -u       #关闭指定的导出的文件系统
相关参数 (man exports)

A. 选项:选项用来设置输出目录的访问权限、用户映射等。

  • 设置输出目录只读:ro
  • 设置输出目录读写:rw

B. 用户映射选项

  • all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody);
  • no_all_squash:与all_squash取反(默认设置);
  • root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置);
  • no_root_squash:与rootsquash取反;
  • anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);
  • anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx);

C. 其它选项

  • secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
  • insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
  • sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
  • async:将数据先保存在内存缓冲区中,必要时才写入磁盘;
  • wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);
  • no_wdelay:若有写操作则立即执行,应与sync配合使用;
  • subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);
  • no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;
启动NFS服务端上nfs服务

1、先为rpcbind和nfs做开机启动:

systemctl enable rpcbind.service
systemctl enable nfs-server.service

2、然后分别启动rpcbind和nfs服务:

systemctl start rpcbind.service
systemctl start nfs-server.service
查看服务是否启动
[root@iZ2ze74fkxrls31tr2ia2fZ ~]# rpcinfo -p
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  47426  status
    100024    1   tcp  35379  status
    100005    1   udp  20048  mountd
    100005    1   tcp  20048  mountd
    100005    2   udp  20048  mountd
    100005    2   tcp  20048  mountd
    100005    3   udp  20048  mountd
    100005    3   tcp  20048  mountd
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    3   udp   2049  nfs_acl
    100021    1   udp  53046  nlockmgr
    100021    3   udp  53046  nlockmgr
    100021    4   udp  53046  nlockmgr
    100021    1   tcp  38280  nlockmgr
    100021    3   tcp  38280  nlockmgr
    100021    4   tcp  38280  nlockmgr

使用exportfs查看本机上已经共享的目录:

exportfs

NFS客户端配置

NFS客户端:192.168.1.190

安装nfs,并启动服务。

yum install -y nfs-utils
systemctl enable rpcbind.service
systemctl start rpcbind.service

客户端不需要启动nfs服务,只需要启动rpcbind服务。

检查 NFS 服务器端是否有目录共享
showmount -e 192.168.1.180
挂载远程服务
mount -t nfs  192.168.1.180:/data/fileserver  /data/itstyle
查看挂载
df -h
开机挂载,编辑/etc/fstab

vim /etc/fstab 加入以下内容:

# 设备文件  挂载点  文件系统类型  mount参数  dump参数  fsck顺序
192.168.1.180:/data/fileserver /data/itstyle nfs defaults,_netdev 0 0

_netdev明确说明这是网络文件系统,避免网络启动前挂载出现错误。

保存后,重新挂载 /etc/fstab 里面的内容。
mount -a

http://img1.ph.126.net/ARpca6Dq040KI6CZU1If7g==/92323792381350400.gif

作者: 杨校

出处: https://blog.csdn.net/kese7952

分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大家指正,共同进步。

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 如有问题, 可邮件(397583050@qq.com)咨询。

目录
相关文章
|
2月前
|
前端开发 JavaScript 测试技术
Kotlin教程笔记 - 适合构建中大型项目的架构模式全面对比
Kotlin教程笔记 - 适合构建中大型项目的架构模式全面对比
40 3
|
2天前
|
开发框架 前端开发 .NET
一个适用于 .NET 的开源整洁架构项目模板
一个适用于 .NET 的开源整洁架构项目模板
40 26
|
10天前
|
机器学习/深度学习 弹性计算 人工智能
阿里云服务器ECS架构区别及选择参考:X86计算、ARM计算等架构介绍
在我们选购阿里云服务器的时候,云服务器架构有X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器、高性能计算可选,有的用户并不清楚他们之间有何区别,本文主要简单介绍下这些架构各自的主要性能及适用场景,以便大家了解不同类型的架构有何不同,主要特点及适用场景有哪些。
|
15天前
|
存储 人工智能 运维
面向AI的服务器计算软硬件架构实践和创新
阿里云在新一代通用计算服务器设计中,针对处理器核心数迅速增长(2024年超100核)、超多核心带来的业务和硬件挑战、网络IO与CPU性能增速不匹配、服务器物理机型复杂等问题,推出了磐久F系列通用计算服务器。该系列服务器采用单路设计减少爆炸半径,优化散热支持600瓦TDP,并实现CIPU节点比例灵活配比及部件模块化可插拔设计,提升运维效率和客户响应速度。此外,还介绍了面向AI的服务器架构挑战与软硬件结合创新,包括内存墙问题、板级工程能力挑战以及AI Infra 2.0服务器的开放架构特点。最后,探讨了大模型高效推理中的显存优化和量化压缩技术,旨在降低部署成本并提高系统效率。
|
2月前
|
监控 前端开发 数据可视化
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
@icraft/player-react 是 iCraft Editor 推出的 React 组件库,旨在简化3D数字孪生场景的前端集成。它支持零配置快速接入、自定义插件、丰富的事件和方法、动画控制及实时数据接入,帮助开发者轻松实现3D场景与React项目的无缝融合。
226 8
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
|
2月前
|
机器学习/深度学习 弹性计算 人工智能
阿里云服务器架构有啥区别?X86计算、Arm、GPU异构、裸金属和高性能计算对比
阿里云ECS涵盖x86、ARM、GPU/FPGA/ASIC、弹性裸金属及高性能计算等多种架构。x86架构采用Intel/AMD处理器,适用于广泛企业级应用;ARM架构低功耗,适合容器与微服务;GPU/FPGA/ASIC专为AI、图形处理设计;弹性裸金属提供物理机性能;高性能计算则针对大规模并行计算优化。
104 7
|
2月前
|
存储 缓存 弹性计算
Codota的服务器存储架构
Codota的服务器存储架构
34 5
|
2月前
|
前端开发 JavaScript 测试技术
android做中大型项目完美的架构模式是什么?是MVVM吗?如果不是,是什么?
在 Android 开发中,选择合适的架构模式对于构建中大型项目至关重要。常见的架构模式有 MVVM、MVP、MVI、Clean Architecture 和 Flux/Redux。每种模式都有其优缺点和适用场景,例如 MVVM 适用于复杂 UI 状态和频繁更新,而 Clean Architecture 适合大型项目和多平台开发。选择合适的架构应考虑项目需求、团队熟悉度和可维护性。
68 6
|
2月前
|
存储 前端开发 数据可视化
在实际项目中,如何选择使用 Flux 架构或传统的 MVC 架构
在实际项目中选择使用Flux架构或传统MVC架构时,需考虑项目复杂度、团队熟悉度和性能需求。Flux适合大型、高并发应用,MVC则适用于中小型、逻辑简单的项目。
|
3月前
|
前端开发 JavaScript 测试技术
Android适合构建中大型项目的架构模式全面对比
Android适合构建中大型项目的架构模式全面对比
60 2

热门文章

最新文章