java读取nfs⽂件_JavaWeb项⽬架构之NFS⽂件服务器
NFS简介
NFS(Network File System)即⽹络⽂件系统。
主要功能:通过⽹络(局域⽹)让不同的主机系统之间可以共享⽂件或⽬录。
主要⽤途:NFS⽹络⽂件系统⼀般被⽤来存储共享视频,图⽚,附件等静态资源⽂件。
NFS存储服务
⽆NFS⽂件共享存储
当⽤户A通过互联⽹上传⽂件时,经过负载均衡,随机或者定向分配到某个节点。但是当⽤户B去下载这个⽂件的时候,并不确定会向哪个节点发送请求,这样会导致⽤户存在⼀定⼏率下载不到的情况。
有NFS⽂件共享存储
当⽤户A通过互联⽹上传⽂件时,经过负载均衡,⽆论发送到哪个节点都会被存储到NFS⽂件服务器。但是当⽤户B去下载这个⽂件的时候,任何节点都可以读取NFS⽂件服务器的⽂件。
NFS服务的优缺点
优点
简单容易上⼿ ⽅便部署⾮常快速,维护⼗分简单 节省本地存储空间将常⽤的数据存放在⼀台服务器可以通过⽹络访问
缺点
在⾼并发下NFS效率/性能有限 NFS的数据是明⽂的,对数据完整性不做验证 多台机器挂载NFS服务器时,连接管理维护⿇烦 容易发⽣单点故障,如果服务端宕机,所有客户端将不能访问 客户端没⽤⽤户认证机制,且数据是通过明⽂传送,安全性⼀般(⼀般建议在局域⽹内使⽤)
RPC⼯作流程
NFS⽀持的功能⾮常多,不同的功能会有不同的服务来完成,很多服务都需要监听在⼀些端⼝,其中的很多端⼝并不是固定的。这些服务在启动时,都需要向rpcbind服务注册⼀个端⼝,rpcbind服务随机选取⼀个未被使⽤的端⼝予以分配。rpcbind服务监听在111端⼝,所以rpcbind的主要功能就是指定每个RPC rvice对应的port number,并且通知给客户端,让客户端连接到正确的端⼝上去。
客户端向NFS服务器端请求的步骤:
⾸先⽤户访问⽹站程序,由程序在NFS客户端上发出存取NFS⽂件的请求,这是NFS客户端的RPC服务就不通过⽹络向NFS服务器端的RPC服务的111端⼝发出NFS⽂件存取功能的查询请求,包括要实现的什么功能。
NFS服务器端的RPC服务找到对应的已注册的NFS端⼝,通知NFS客户端的RPC服务。
手机充此时NFS客户端获取到正确的端⼝,并与NFS联机存取数据。
我特意整理了⼀下,⾥⾯的技术不是靠⼏句话就能讲清楚,所以⼲脆找朋友录制了⼀些视频,很多问题其实答案很简单,但是背后的思考和逻辑不简单,要做到知其然还要知其所以然。如果想学习Java⼯程化、⾼性能及分布式、深⼊浅出。性能调优、Spring,MyBatis,Netty 源码分析的朋友可以加我新建的Java群:650385180,群⾥有阿⾥⼤⽜直播讲解技术,以及Java⼤型互联⽹技术的视频免费分享给⼤家。
NFS客户端把数据存取成功后,返回给客户端程序,告知⽤户存取结果。
注意:由于rpc rvice在启动时需要向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/filerver 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. 其它选项
cure:限制客户端只能从⼩于1024的tcp/ip端⼝连接nfs服务器(默认设置);
incure:允许客户端从⼤于1024的tcp/ip端⼝连接服务器;
sync:将数据同步写⼊内存缓冲区与磁盘中,效率低,但可以保证数据的⼀致性;
async:将数据先保存在内存缓冲区中,必要时才写⼊磁盘;
wdelay:检查是否有相关的写操作,如果有则将这些写操作⼀起执⾏,这样可以提⾼效率(默认设置);
no_wdelay:若有写操作则⽴即执⾏,应与sync配合使⽤;
色温调节
subtree:若输出⽬录是⼀个⼦⽬录,则nfs服务器将检查其⽗⽬录的权限(默认设置);
no_subtree:即使输出⽬录是⼀个⼦⽬录,nfs服务器也不检查其⽗⽬录的权限,这样可以提⾼效率;启动NFS服务端上nfs服务
1、先为rpcbind和nfs做开机启动:
systemctl enable rpcbind.rvice
systemctl enable nfs-rver.rvice
白菜包子馅怎么做好吃2、然后分别启动rpcbind和nfs服务:
systemctl start rpcbind.rvice
systemctl start nfs-rver.rvice
查看服务是否启动
[root@iZ2ze74fkxrls31tr2ia2fZ ~]# rpcinfo -p
program vers proto port rvice
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
covisint
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.rvice
systemctl start rpcbind.rvice
客户端不需要启动nfs服务,只需要启动rpcbind服务。
检查 NFS 服务器端是否有⽬录共享
showmount -e 192.168.1.180
挂载远程服务
mount -t nfs 192.168.1.180:/data/filerver /data/itstyle
查看挂载
df -h
开机挂载,编辑/etc/fstab
vim /etc/fstab 加⼊以下内容:
#设备⽂件 挂载点 ⽂件系统类型 mount参数 dump参数 fsck顺序
192.168.1.180:/data/filerver /data/itstyle nfs defaults,_netdev 0 0
_netdev明确说明这是⽹络⽂件系统,避免⽹络启动前挂载出现错误。
保存后,重新挂载 /etc/fstab ⾥⾯的内容。
mount -a
推荐⼀个交流学习群:650385180⾥⾯会分享⼀些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,⾼并发、⾼性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,⽬前受益良多:
注:喜欢的⼩伙伴可以点赞加⼀波关注,⼀起学习进步