Linux数据相关第2个服务_存储服务nfs

1、概述

存储: 用于存放用户上传的内容(数据),一般应用在网站集群中.

为何用?

  • 如果不使用存储,用户上传的数据就直接存放在网站服务器上了,用户下次访问就可能找不到.
  • 如果使用存储,用户上传的内容存放在存储上面,用户访问就会访问存储.

位置: 网站后排.

2、存储的类型

分类 说明
硬件存储 硬件存储,硬盘多,使用的时候挂载即可
开源产品 普通存储:NFS(linux);Samba(windows) 分布式存储:GlusterFS,Ceph......FastDFS,MinIO
云产品 阿里云OSS(对象存储),七牛云存储,腾讯云COS

3、NFS原理

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

2个服务组成

  • NFS服务
  • RPC(rpcbind)服务:RPC远程过程调用,本质起到调度作用.

4、部署指南

4.1、服务端部署

  • 下载软件包
arduino 复制代码
yum install -y rpcbind nfs-utils
#rpcbind可省略,因为nfs-utils工具依赖就是rpcbind,yum自己解决依赖问题
  • 启动服务
bash 复制代码
systemctl start rpcbind
systemctl enable rpcbind
rpcinfo -p
​
systemctl start nfs
systemctl enable nfs
rpcinfo -p
  • NFS服务端配置
bash 复制代码
[root@nanjing ~]# cat /etc/exports
/data/ 43.137.51.0/24(rw)
#配置表示:172.16.1.0/24网段对NFS服务端的/data/目录,拥有rw读写权限
systemctl reload nfs

reload表示优雅重启,不会断开已有连接.

restart在nfs中,会导致客户端一段时间的夯住.

  • NFS服务端后续配置:创建数据目录与修改权限
bash 复制代码
chown nfsnobody.nfsnobody /data/ 
systemctl reload nfs
  • NFS服务端本地进行测试:使用(挂载)

将远程主机上的目录挂载到本地目录的操作。/mnt/常用的挂载目录。

javascript 复制代码
#挂载存储
mount -t nfs 43.137.51.12:/data/ /mnt/
  • 排错指令:rpcinfo -p ipshowmount -e ip

ip为nfs服务端ip

rpcinfo -p ip检查nfs服务端的rpc信息. 主要检查是否有NFS信息即可.

showmount -e ip检查nfs服务端共享信息(共享哪些目录) 检查NFS共享了哪些目录

  • 验证
ruby 复制代码
[root@nanjing ~]# df -h
文件系统             容量  已用  可用 已用% 挂载点
43.137.51.12:/data   50G   11G   37G   22% /mnt

4.2、客户端挂载

bash 复制代码
yum install -y nfs-utils
mount -t nfs 172.16.1.31:/data /mnt

故障案例: mount: wrong fs type 错误的文件系统类型,客户端无法识别nfs.

需要在客户端安装nfs-utils,不用启动.

5、NFS相关文件

nfs服务端或客户端 说明
NFS服务端配置 /etc/exports(配置文件里面的)------》/var/lib/nfs/etab(当前使用的nfs服务端配置)
NFS客户端配置 客户端:mount /etc/rc.local 或/etc/fstab ------》/proc/mounts (当前系统的挂载情况)

客户端挂载与使用失败,df -h夯住,去看看,/proc/mounts查找是否有失败挂载.

nfs客户端永久挂载

bash 复制代码
#方法01 挂载命令写入到/etc/rc.local
chmod +x /etc/rc.d/rc.local
​
#方法02 按照/etc/fstab格式要求书写
设备                挂载点    文件系统数   挂载参数   是否检查 是否备份
172.16.1.31:/data/ /upload/  nfs        defaults  0 0

温馨提示: 如果配置了nfs客户端永久挂载,未来要优先启动nfs服务端

6、NFS服务端的配置文件

了解: /etc/exports 由来nfs管理systemctl命令的背后是在调用exportfs命令

6.1、配置文件格式

/etc/exports
第一部分 第二部分
共享目录 网段(选项)

6.2、NFS配置文件中网络配置

网段
172.16.1.0/24 最常用网段
172.16.1.7 指定ip
172.16.1.7 指定域名

6.3、服务端核心配置

服务端配置选项 说明
rw 可以读写共享目录
ro 只读 read only
sync 同步,只要用户上传,就把数据写到磁盘上
async 异步,用户上传的数据,nfs先临时存放到内存中,过一段时间写入到磁盘, 并发高,数据可能丢失

理解:同步与异步

幼儿园工作

同步:挨个小伙伴问,你是否要上wc,

异步:画了个圈圈,需要去wc的到这个圈圈中,定时去带走圈圈里面的人

同步在网站架构中指的是直接访问对应的资源

异步在网站架构中利用各种缓存达到用户优先访问缓存,缓存没有再访问对应服务

6.4、服务端用户压缩

NFS客户端挂载NFS服务端后,创建的文件默认属于nfsnobody,这种操作就叫用户压缩(映射).

用户压缩是通过NFS服务端的配置实现.

服务端配置选项-用户压缩系列 说明
root squash 如果客户端是root用户访问,则到了nfs服务端会被压缩(默认的)
no_all_squash 如果客户端不是root用户访问,则不进行压缩(保留原始用户,默认的)
all squash 所有用户都进行压缩(不是太安全)
anonuid 和 anongid 用于指定压缩的匿名用户(默认是nfsnobody用户)anonuid=65534,anongid=65534

用户压缩/用户映射:

NFS客户端访问NFS共享目录的时候变成了什么用户:

nfs客户端用户 nfs服务端用户

root ------> nfsnoboby

7、用户压缩案例

用户压缩案例: 设置/nfsdata共享目录,匿名用户为www. 客户端挂载到/upload-video/

www用户的 uid,gid:1999 (服务端,客户端)

流程

  • 部署nfs服务
  • rpcbind 添加用户www,指定uid,gid
  • 修改服务端配置文件
  • 客户端进行挂载测试
bash 复制代码
#1. 所有主机(nfs服务端和nfs客户端)添加用户 www uid统一 1999 1999
#2. nfs服务端配置
#3. nfs客户端挂载
​
#1. 所有主机(nfs服务端和nfs客户端)添加用户 www uid统一1999 1999
groupadd -g 1999 www
useradd -u 1999 -g www -s /sbin/nologin -M www
​
#2. nfs服务端配置
cat /etc/exports
/data/ 172.16.1.0/24 (rw)
/nfsdta/ 172.16.1.0/24 (rw,all_squash,anonuid = 1999,anongid=1999)
​
​
#3. nfs客户端挂载
mount - nfs 172.16.1.31:/nfsdata /upload-video/
du -h /upload-video/
touch /upload-video/lidao.txt
ll /upload-video/

8、NFS优化

终极优化目标:

  • 尽可能让用户的请求在访问网站架构之前解决掉。(尽可能把用户的请求往前推)

NFS优化: 硬件(物理服务器+nfs服务)

NFS安全优化: 客户端挂载 只能上传,无法执行.

bash 复制代码
mount -o noexec,nosuid,nodev -t nfs 172.16.1.31:/data /video/
 #这几个是客户端挂载选项
noexec 挂载的nfs目录中如果有命令,无法运行。
nosuid 带有suid的命令
nodev 带有特殊属性的文件。

NFS有单点故障,选择其他存储: 公有云OSS(阿里云) (对象存储在代码里面调用)

研究分布式存储:GlusterFS(GFS),MinIO

相关推荐
ShineWinsu20 分钟前
对于Linux:网络基础的解析
linux·网络·面试·udp·笔试·ip·tcp
Asuicao29 分钟前
centos7.9版本升级ssh OpenSSH 9.8p1 源码 OpenSSL 1.1.1w 源码包以及安装升级回滚文档
运维·ssh
志栋智能1 小时前
超自动化安全中的威胁狩猎
运维·安全·自动化
↘"LYong2 小时前
旧版 CentOS 安装 Docker 完整指南(附国内镜像加速)
linux·运维·docker
Zhang~Ling2 小时前
Vim 多模式详解:命令、插入、底行与插件配置
linux·编辑器·vim
Elastic 中国社区官方博客2 小时前
Elastic 在 Everest Group 企业搜索产品 PEAK Matrix® 评估 2026 中被评为领导者
大数据·运维·人工智能·elasticsearch·搜索引擎·ai·全文检索
程序员在囧途2 小时前
likeadmin-api API 中转站怎么做统一报价?从 /pricing、/user/balance 到 task_id 回执的落地方法
运维·服务器·数据库·likeadmin-api·api中转站·token计费
想你依然心痛3 小时前
Linux用户空间与内核空间通信:netlink、ioctl、mmap 零拷贝与性能对比
linux·运维·服务器
沉静的小伙3 小时前
在微服务中使用领域事件
java·运维·微服务
wenzhangli74 小时前
oodAgent 4.0 Skills分布式调度 — 从Code Agent实战看自主维护的Agent网络
运维·网络·人工智能·自动化