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

相关推荐
用户9718356334661 小时前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪3 小时前
linux 拷贝文件或目录到指定的位置
linux
大树8819 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠19 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质19 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush419 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行52019 小时前
Linux 11 动态监控指令top
linux
Inhand陈工20 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智20 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
不会C语言的男孩21 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言