首页 > 其他分享 >NFS存储简述

NFS存储简述

时间:2023-06-06 12:00:53浏览次数:33  
标签:存储 js 简述 nfs test NFS data 客户端


什么是NFS ?

NFS 就是network file system 的缩写,中文:网络文件系统,NFS主要的功能是通过网络让不同的机器,不同的系统之间可以共享文件或者目录,可以认为是一个文件服务器。
NFS服务器可以让客户端将网络远程的NFS服务器分享的目录挂载到客户端,在客户端看来,远程的主机(NFS服务器端)就好像是自己的一个磁盘分区一样,使用比较方便。
当NFS服务器设置好了共享目录之后,网络中的NFS客户端就可以将目录挂载到系统上面的某个挂载点,如下图中的NFS client1 与 NFS client2 使用网络挂载NFS服务端的共享目录/data/js到本地/data/nfs/js目录,客户端就可以像本地文件一样使用cp、cat、cd、mv、rm等命令操作客户端的文件。

NFS存储简述_RPC

什么是RPC

上述描述中得知NFS主要是在不同设备之间通过网络传输文件,且每个程序传输数据都需要启动端口,端口随机产生且小于1024,那么就需要使用RPC(远程过程调用协议,RPC描述:一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议)

RPC需要先启动,端口111,NFS后启动,服务端在NFS启动之后NFS会随机使用1024内没有被占用的端口,并向RPC注册这些端口,RPC记录端口信息。当NFS客户端需要连接服务端时,会先向服务器端的RPC服务111端口获取对应功能的端口号,然后返回给NFS客户端,客户端获得端口号就可以使用端口连接服务端。下图看可知,客户端和服务端的NFS在使用时都需要启动RPC服务。 NFS简单工作流程图

NFS存储简述_NFS_02

服务端安装

查看是否安装nfs 和 rpcbind

rpm -qa |egrep "nfs|rpcbind"

安装nfs-utils 和 rpcbind

yum install nfs-utils rpcbind

修改配置文件/etc/exports

cat > /etc/exports <<EOF /data/js 192.168.199.0/24(rw,sync,all_squash) EOF

修改的配置介绍

/data/js 共享的目录 192.168.199.0/24 共享对象 rw 读写访问 sync NFS 服务器在将之前请求所做的更改写入磁盘之前不回复请求(来自文档,网络上基本是“所有数据在请求时写入共享”,不知道共享指的具体是什么? 这里我的理解是内存数据实时写入磁盘,且写入磁盘之前不响应新的请求。) 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 NFS #服务器在将之前请求所做的更改写入磁盘之前不回复请求(来自文档,网络上基本是“所有数据在请求时写入共享”,不知道共享指的具体是什么? 这里我的理解是内存数据实时写入磁盘,且写入磁盘之前不响应新的请求。) Async #优先将数据保存在内存,然后在写入磁盘,速度更快,但突然断电或者内存故障可能会有数据丢失。 Anonuid=xxxx/anongid=xxxx #要和root_squash 以及all_squash一同使用,用于指定使用NFS的用户限定后的uid和gid,前提是本机的/etc/passwd中存在这个uid和gid

创建数据目录和授权nfs匿名用户权限

mkdir -p /data/js
chown -R nfsnobody:nfsnobody /data/js

nfsnobody 安装nfs后自动创建的用户

NFS存储简述_NFS_03

启动nfs和rpc

在使用 NFS 服务进行文件共享之前,需要使用 RPC(Remote Procedure Call 远程过程调用 服务将 NFS 服务器的IP 地址和端口号信息发送给客户端。因此,在启动 NFS 服务之 前, 需要先重启并启用 rpcbind 服务程序,同时都加入开机自启动

启动nfs 和 rpcbind

systemctl   start   rpcbind
systemctl  start  nfs
chowmount -e 192.168.199.23

NFS存储简述_NFS_04

加入开机自启动

systemctl enable  rpcbind
systemctl enable  nfs

因为rpc需要优先与nfs启动,所以需要设定systemd启动依赖,具体请查看网络文件,使用开机时自动执行脚本启动。

客户端安装

安装nfs 和rpc

yum install  nfs-utils  rpcbind

启动rpc,不用启动nfs

systemctl start  rpcbind

创建挂载点

mkdir -p /data/nfs/js

测试

关闭firewall

在firewall加入nfs 和 rpcbind 服务 , 或者关闭firewall服务,这里我选择关闭firewall服务

systemctl stop firewalld

在客户端查看可以挂载的目录

showmount -e  192.168.199.23

NFS存储简述_NFS_05

挂载

mount -t nfs  192.168.199.23:/data/js  /data/nfs/js

NFS存储简述_RPC_06

客户端读写测试

[root@nfs02 js]# pwd
/data/nfs/js
[root@nfs02 js]# ll
total 4
-rw-r--r-- 1 nfsnobody nfsnobody 20 Mar  2 10:27 test_server
[root@nfs02 js]# cat test_server 
this is test_server
[root@nfs02 js]# echo "test_client" >> test_server
[root@nfs02 js]# cat test_server 
this is test_server
test_client
[root@nfs02 js]# cp test_server /data/
[root@nfs02 js]# cat /data/test_server 
this is test_server
test_client

NFS存储简述_RPC_07

服务端变更,客户端读写测试

服务端执行

[root@nfs03 data]# date  >> /data/js/test_server 
[root@nfs03 data]# cat /data/js/test_server
this is test_server
test_client
Thu Mar  2 12:53:51 CST 2023

客户端执行

[root@nfs02 js]# cat /data/nfs/js/test_server 
this is test_server
test_client
Thu Mar  2 12:53:51 CST 2023

测试nfs01是否也能共享文件

[root@nfs01 js]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 475M     0  475M   0% /dev
tmpfs                    487M     0  487M   0% /dev/shm
tmpfs                    487M   14M  473M   3% /run
tmpfs                    487M     0  487M   0% /sys/fs/cgroup
/dev/mapper/centos-root   17G  2.5G   15G  15% /
/dev/sda1               1014M  168M  847M  17% /boot
tmpfs                     98M     0   98M   0% /run/user/0
192.168.199.23:/data/js   17G  2.5G   15G  15% /data/nfs/js
[root@nfs01 js]# hostname >> test_server 
[root@nfs01 js]# cat test_server
this is test_server
test_client
Thu Mar  2 12:53:51 CST 2023
nfs01

开机自动挂载/etc/fstab

192.168.199.23:/data/js  /data/nfs/js  nfs  defaults,_netdev 1 1

NFS存储简述_NFS_08

其他

NFS工作原理

1.用户进程访问 NFS 客户端,使用不同的函数对数据进行处理

2.NFS 客户端通过 TCP/IP 的方式传递给 NFS 服务端 3.NFS 服务端接收到请求后,会先调用 portmap 进程进行端口映射。 4.nfsd 进程用于判断 NFS 客户端是否拥有权限连接 NFS 服务端。 5.Rpc.mount 进程判断客户端是否有对应的权限进行验证。 6.idmap 进程实现用户映射和压缩 7.最后 NFS 服务端会将对应请求的函数转换为本地能识别的命令,传递至内核,由内核驱动硬件。

Rpc.nfsd:NFS守护进程,主要功能是管理客户端是否能够登录服务器; Rpc.mount:主要功能是管理NFS文件系统,当客户端顺利通过NFS登录NFS服务器后,在使用NFS服务所提供的文件前,还必须通过文件使用权限验证。它会读取NFS的配置文件/etc/ecports 来对比客户权限 Portmap:主要功能是进行端口映射

NFS存储简述_RPC_09

NFS服务端停止了服务,服务端卡住

服务端nfs停止服务,客户端没有卸载就会卡住,客户端只能强制卸载nfs (umount -rl 强制卸载)

设置了开机自启动,但是NFS服务没有起动就客户端重启会起不来

客户端在fstab中使用参数“_netdev”,重启能正常启动,后续修复之后在客户端手动挂载mount -a

NFS单点

当nfs服务器故障可能短时间不能恢复,就需要一个替代方案,为nfs服务器做一个备份,当nfs服务器故障之后重新挂载到新服务器上即可。这里就需要使用能够实时同步的工具inotify-tools + rsync、sersync + rsync、lsyncd + rsync实现服务器文件实时同步。

来源:https://www.jianshu.com/p/69fa22529383  (同一个作者)

标签:存储,js,简述,nfs,test,NFS,data,客户端
From: https://blog.51cto.com/u_14593742/6423788

相关文章

  • mysql 存储过程
    存储过程是一组特定的语句合计,为实现某种特定的功能。编译后存贮在字典中。因为的多条语句集合后执行,为了避免与sql语句的结束符;冲突而逐条执行,创建之前要申明存储过程需要使用的分隔符。 delimter$$#定义分隔符为$$…………$$#执行delimiter;#执行后结束符修改为;i......
  • 每日记录(线性表链式存储结构(链表))
    链表的基本概念建议每次写的时候都加一个头节点各结点由两个域组成:数据域:存储元素数值数据指针域:存储直接后继结点的存储位置结点:数据元素的存储映像。由数据域和指针域两部分组成链表:n个结点由指针链组成一个链表。它是线性表的链式存储映像,称为线性表的链式存储结构单链表......
  • 浏览器端存储
    ES标准里,浏览器端保存数据,可以使用以下两种存储方式:sessionStorage(会话存储)和localStorage(本地存储)这两种存储,都是以键/值对的形式存储内容。生命周期不同(session为会话期间有效,local为永久有效),用法相同。属性:length:返回存储对象中包含多少条数据。方法:key(n):返回存储对象......
  • GaussDB存储过程介绍
    前言华为云数据库GaussDB是一款高性能、高安全性的云原生数据库,在数据库领域处于领先地位。而在GaussDB中,存储过程是一个不容忽视的重要功能。本文将深入介绍GaussDB存储过程的使用场景、使用优缺点、示例及示例解析、调用方法等方面,为读者提供全方位的指导与帮助。存储过程是一个......
  • helm从Harbor存储的chart发布服务
    李大白-作者......
  • 武汉星起航:2023年做亚马逊还有机会吗?简述亚马逊平台的优势
    亚马逊作为全球最大的电商平台之一,拥有许多优势,使其在竞争激烈的电商市场中占据重要地位。武汉星起航将介绍亚马逊平台的优势,从多个方面来解析其成功之处。巨大的市场份额和用户规模:亚马逊在全球范围内拥有庞大的市场份额和用户规模。其广泛的市场覆盖和庞大的用户群体为卖家提供了......
  • Jwt生成和解析工具类(万用版,可作为数据存储容器来传输)
    packagecom.ciih.authcenter.client.util.jwt;importcom.alibaba.fastjson.JSON;importcom.auth0.jwt.JWT;importcom.auth0.jwt.JWTCreator;importcom.auth0.jwt.JWTVerifier;importcom.auth0.jwt.algorithms.Algorithm;importcom.auth0.jwt.interfaces.Claim;......
  • 数据万象 | AIGC 存储内容安全解决方案
    AIGC(人工智能生产内容)已经成为与PGC(专业生产内容)、UGC(用户生产内容)并驾齐驱的内容生产方式。由于AI的特性,AIGC在创意、个性化、生产效率等方面具有独特的优势,这些优势可以使得高质量的内容制作更简单,但也会帮助恶意份子更高效地炮制违法违规内容。数据万象从AIGC的输入、生产......
  • Flutter get_storage本地存储
    倪大头关注IP属地:山东0.0972021.09.0818:01:18字数84阅读4,451之前本地存储用的是shared_preferences,但它的存取都是异步的,现在推荐一个Getx提供的本地存储插件get_storagedependencies:get_storage:import'package:get_storage/get_storage.dart';需要......
  • c语言基于链表的文件存储与读取
    今天写了一下如何将链表中的数据存储到文件中head为链表的起始结点写入文件voidfilewirte(LinkListhead){LinkListfd;FILE*p=fopen("student_grad.txt","w");if(p==NULL){printf("没有东西");getchar();exit(1);}fd=head......