java文件服务器_JavaWeb项目架构之NFS文件服务器

NFS简介

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

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

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

NFS存储服务

无NFS文件共享存储

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

575bb34f0c76bd34c0644908473358a9.png

有NFS文件共享存储

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

218ddb0a42e01fa65d8eb1bc77aa7592.png

NFS服务的优缺点

优点

简单容易上手

方便部署非常快速,维护十分简单

节省本地存储空间将常用的数据存放在一台服务器可以通过网络访问

缺点

在高并发下NFS效率/性能有限

NFS的数据是明文的,对数据完整性不做验证

多台机器挂载NFS服务器时,连接管理维护麻烦

容易发生单点故障,如果服务端宕机,所有客户端将不能访问

客户端没用用户认证机制,且数据是通过明文传送,安全性一般(一般建议在局域网内使用)

RPC工作流程

edc15af50510b65bab9855c9ecf766d7.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://www.mzph.cn/news/572813.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【bzoj】3224: Tyvj 1728 普通平衡树

3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 10097 Solved: 4302[Submit][Status][Discuss]Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作&#xff1a…

java 修改 referer_看好你的门-客户端传数据-用java修改referer

1、简单说明Referer、origin用来表明,浏览器向WEB服务器表明自己来自哪里。但是就它本身而言,并非完全安全。写一个例子,可以任意修改http信息头中的referer、origin2、准备:用httpClient4.0来具体实现3、Java修改http信息头refer…

table 样式详解

1.table 中css样式控制border 只能控制外边框&#xff0c;内边框需要写<table border"1"> 2.table 会自动撑大&#xff0c;即使td 设置了 width和height这与div 是不同的 3.只有一个table的时候 &#xff0c;高度自适应全屏 <style type"text/css"…

libsvm java 实例_LibSVM Java API调用示例程序

【实例简介】LibSVM Java API调用示例程序Eclipse 完整工程可以运行相关详情见http://blog.csdn.net/yangliuy/article/details/8041343#comments3行程序搞定SVM分类-用JAVA程序调用LibSVM API 最简单的示例欢迎关注我的博客blog.csdn.net/yangliuy【实例截图】【核心代码】326…

关于H3 BPM数据库如何实现排序取数据的问题

问题&#xff1a; 在打印模板中获取子表内容&#xff0c;可从数据库中取数据&#xff0c;而当前项目数据库里面数据按年度录入&#xff0c;但是只需要显示近3年的数据&#xff0c;插件如何实现排序取数据&#xff1f; 解决方法&#xff1a; 1、先直接写一个SQL语句&#xff0c;…

java 将pdf转换成word_java如何实现pdf转word?

Atitit pdf转文本 pdfutiljava -jar C:\Users\attilax\Pictures\pdfbox-app-2.0.9.jar ExtractText "C:\atibeks517\l4 doc v3 r7a ori exted\_0index\一种简单的基于字符形状的验证码识别技术.pdf" c:\logs\识别技术.pdf.txt转html-consolefalseSend text to consol…

spring整合

spring整合hibernate&#xff0c;整合什么&#xff1f; 1. Spring 整合 Hibernate 整合什么 ?1). 有 IOC 容器来管理 Hibernate 的 SessionFactory 2). 让 Hibernate 使用上 Spring 的声明式事务2. 整合步骤:1). 加入 hibernate ①. jar 包 ②. 添加 hibernate 的配置文件: hi…

java 进程不关闭_java运行程序关不了窗口

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼package office菜单;import java.awt.Frame;import java.awt.Menu; //菜单组件import java.awt.MenuBar; //菜单条组件import java.awt.MenuItem; //菜单项组件public class frameTest {public static void main(String[] args) {f…

看看大货车到底有多少盲区,肯定用得到!救命的!

上路的司机都知道&#xff0c;一旦看到大货车就要离它远远的&#xff0c;因为大货车的盲区大。可是又有多少轿车司机懂得盲区在哪里呢?不仅是轿车司机&#xff0c;许多行人和非机动车辆对于大货车的盲区也是一知半解&#xff0c;常常有人因此丧命。 行人篇 先给大家看一张最直…

msgpack java lua_使用lua-cmsgpack序列化和反序列化lua对象

原文在简书首发&#xff1a;http://www.jianshu.com/p/badf412db4e7lua-cmsgpack是一个开源的MessagePack实现方式、纯C的库&#xff0c;没有任何其它依赖&#xff0c;编译后可以直接被lua调用&#xff0c;目前主要支持Lua5.1/5.2/5.3 版本。1、什么是MessagePack&#xff1f;-…

Oracle-11g 基于 NBU 的 rman 冷备份及恢复

备份恢复环境&#xff1a; (1).源端&#xff1a;SUSE Enterprise Linux 11Oracle 11g 11.2.0.3.6&#xff08;RAC&#xff09;(2).目标端&#xff1a;SUSE Enterprise Linux 11Oracle 11g 11.2.0.3.6&#xff08;RAC&#xff09;冷备份及恢复情形&#xff1a;冷备份 odsdb 集群…

全国250米DEM数据

全国250米DEM数据 DEM是数字高程模型的英文简称(Digital Elevation Model)&#xff0c;是研究分析地形、流域、地物识别的重要原始资料。由于DEM 数据能够反映一定分辨率的局部地形特征&#xff0c;因此通过DEM 可提取大量的地表形态信息&#xff0c;可用于绘制等高线、坡度图、…

redis集群连接 java_Redis分布式集群和直连的Java客户端调用方式详解

jedis是一个著名的key-value存储系统&#xff0c;而作为其官方推荐的java版客户端jedis也非常强大和稳定&#xff0c;支持事务、管道及有jedis自身实现的分布式。在这里对jedis关于事务、管道和分布式的调用方式做一个简单的介绍和对比&#xff1a;一、普通同步方式最简单和基础…

【bzoj1705】[Usaco2007 Nov]Telephone Wire 架设电话线 dp

题目描述 最近&#xff0c;Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是&#xff0c;她们要求FJ把那些老旧的电话线换成性能更好的新电话线。 新的电话线架设在已有的N(2 < N < 100,000)根电话线杆上&#xff0c; 第i根电话线杆的高度为height_i米(1 &…

Loadrunner进行HTTPS协议性能测试

1.最简单办法就是在脚本前面加上&#xff1a;web_set_sockets_option("SSL_VERSION","TLS")&#xff0c;一般能解决HTTPS协议的请求问题&#xff0c;无毒无公害&#xff0c;快速还能解决问题 2.其实对于HTTP跟HTTPS&#xff0c;只是在服务器端配置到底是走…

Linux 权限、磁盘操作命令-Linux基础环境命令学习笔记

1、创建用户和用户组 1&#xff09;用户和用户组 /etc/passwd  保存系统用户的基本信息 /etc/group    保存用户组信息 用户名&#xff1a;x&#xff1a;UID&#xff1a;GID 2&#xff09;基本命令 useradd  增加用户 groupadd  增加用户组 passwd  为用户设置密码…

java伪代码生成器_JAVA单例模式的实现伪代码

什么是单例&#xff1f;&#xff1a;其定义是单例对象的类只能允许一个实例存在单例的实现基本原理&#xff1a;1.将该类的构造方法定义为私有访问&#xff0c;不对外暴露从而使其他类不能实例化该类对象&#xff0c;只能通过该类的静态方法得到该类的唯一实例 2.在该类中定义一…

python怎么存储数据_Python:如何在类中存储数据并继承

我对课程很陌生,我已经写了一个班来做熊猫的操作。分类方法,但我不知道如何使用它们。我的班级目标:我想写一个权限类。它应该加载/写入一个json文件,并且应该能够添加更多的权限。编辑:读了一段时间后,我发现staticmethod还有一个__init__在初始化期间加载文件的。class Permi…

Eclipse手动配置svn

1、在Eclipse根目录下建一个任意文件夹&#xff08;如plugin&#xff09;&#xff0c;在该文件夹下建一个以该插件名命名的文件夹&#xff08;如SVN&#xff09;。2、将下载下的插件文件解压&#xff0c;plugins和features文件夹复制到该文件夹下&#xff08;SVN&#xff09;。…

java爬虫新浪微博_java爬虫(爬新浪新闻) 如何从零开始

爬虫通常搜索引擎处理的对象是互联网网页。首先面临的问题是&#xff1a;如何能够设计出高效的下载系统&#xff0c;以将如此海量的网页数据传送到本地&#xff0c;在本地形成互联网网页的镜像备份。网络爬虫即起此作用&#xff0c;它是搜索引擎系统中很关键也很基础的构件。爬…