第二个服务-存储

暂时无法播放,可回源网站播放

3.1 nfs核心掌握

1) 内容

存储是什么,网站架构地位

为何使用存储

存储分类

NFS存储原理

NFS部署,配置与使用

NFS配置案例与详解

总结

2) 目标

说出来网站为何是否存储服务(共享存储)

说出常见存储服务.

搭建NFS存储,对服务进行配置(比如共享/nfsdata目录)

故障与排查

3.2 概述

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

为何用?

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

如果使用存储,用户上传的内容存放在存储上面,用户访问就会访问存储.

位置: 网站后排

3.3 存储选型

怎么实现?

简单一点的网站用NFS

对象存储的本质就是物理服务器+分布式存储搭建好,负责维护,给用户使用

3.4  NFS原理

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

NFS服务端:2个服务组成

NFS服务:rpcbind(portmap)rpc服务(远程调用协议)

关于RPC的说明:

RPC:远程过程调用,本质起到调度作用.

rpc服务从CentOS 6开始叫rpcbind,之前叫portmapper.

                                                  

 3.5 部署及使用

1.环境说明

2.服务端部署使用

1)部署(安装软件)

#检查是否安装

rpm -qa |egrep 'nfs|rpcbind'

#如果没有就安装

yum install -y rpcbind nfs-utils

启动(先启动RPC)

#启动rpcbind

systemctl enable rpcbind

systemctl start rpcbind

rpcinfo -p          ##查看rpc服务信息,这个服务另一个名字是portmapper

#启动nfs

systemctl enable nfs

systemctl start nfs

rpcinfo -p 

2)NFS服务器配置

#1.创建共享目录/nfsdata/

#2.修改/nfsdata所有者为nobody (centos 系统中 nfsnobody)

chown  -R nobody.nobody   /nfsdata/

#3.修改nfs服务端配置文件/etc/exports

[root@nfs01 ~]# cat /etc/exports

#1.共享/nfsdata/目录 用户 nobody

/nfsdata/    172.16.1.0/24(rw)

#配置表示: 172.16.1.0/24网段对NFS服务端的/data/目录,拥有

rw读写权限.

[root@nfs01 ~]# systemctl reload nfs

查看是否配置成功nfs:showmount -e/nfs机器ip/主机名

[root@nfs01 ~]# showmount -e

Export list for nfs01:

/nfsdata 172.16.1.0/24

[root@nfs01 ~]# showmount -e nfs01

Export list for nfs01:

/nfsdata 172.16.1.0/24

reload表示优雅重启,不会断开已有连接(目前只有nfs和nginx有).

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

NFS服务端本地进行测试:使用(挂载 mount 或 /etc/fstab )

#挂载存储

mount -t nfs  172.16.1.31:/data/   /mnt/

排错指令: rpcinfo -p ip 和showmount -e ip

NFS服务端小结

部署:nfs-utils,rpcbind

1.  准备环境:目录,权限

᲼ 服务配置文件:/etc/exports

 2.启动服务:rpc,nfs(后面修改配置文件,只需要重启nfs reload)

3.服务端本地测试(mount)

mount -t nfs  172.16.1.31:/data/   /mnt/

3)客户端挂载

客户端操作:

如果客户端没有安装NFS,挂载会显示:选项错误,需要安装NFS系统才能挂载nfs类型的文件系统

临时挂载:安装nfs-utils,不用启动,使用挂载命令mount -t nfs  172.16.1.31:/data/   /mnt/即可使用(-t 指定类型)

卸载:umount /mnt

强制卸载:umount -lf  /mnt

永久挂载:

①mkdir -p /upload

②vim /etc/fstab

👉添加 172.6.1.31:/nfsdata/   /upload/   nfs   defaults 0 0

注意:永久挂载之后必须保证NFS服务器比客户端先启动,保证正常挂载

故障案例:

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

5) 服务端与客户端小结(步骤)

3.6 NFS相关的文件

服务端配置文件:/etc/exports👉相当于/var/lib/nfs/etab(不用修改)

客户端配置文件:

/etc/fstab(开机自动挂载)对应👉

/proc/mounts(当前系统的实时挂载情况)

小结

核心:服务端配置/etc/exports

核心:客户端永久挂载方式.

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

3.7 NFS服务端的配置文件

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

1) 配置文件格式

/etc/exports

第一部分                第二部分

共享目录               网段(nfs配置)

2) NFS配置文件中网络配置

网段

172.16.1.0/24(最常用)

172.16.1.7(指定ip)

baidu.com(指定域名)

3) 服务端核心配置(NFS默认同步)

理解:同步与异步⭐ ⭐ ⭐ ⭐ ⭐

幼儿园工作

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

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

CPU 👉内存 👉 磁盘

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

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

异步可以防止网站并发过高导致的卡顿,但是数据可能丢失

4) 服务端用户压缩

user mapping 用户压缩或用户映射?

现象:客户端 访问的时候的用户root,到了服务端变成了nfsnobody.

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

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

默认情况只能root用户对共享目录进行读写操作,其他用户没权限

all_squash:所有用户都有权限,在nfs中被设置为匿名用户

用户压缩/用户映射: NFS客户端访问NFS共享目录的时候变成了什么用户.

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

root 👉nfsnoboby

想把默认的nfsnobody修改,需要在所有的客户端服务端创建统一用户且UID,GID一致,就可以在服务端配置文件中加上anonuid和anongid

5) 用户压缩案例

用户压缩案例:

搭建网站,对存储提出一些需求

nfs服务端设置/nfs/pics共享目录,匿名用户为www(都压缩为www).

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

客户端挂载到/upload-pic/

流程 C(Client 客户端) S(Server 服务端)

①CS:部署nfs服务,rpcbind ✅

② CS:添加用户www,指定uid,gid ✅

③S:创建目录,修改权限,修改服务端配置文件 ✅

④ C:客户端进行挂载测试 ✅

#1. 所有主机(nfs服务端和nfs客户端)添加用户 www uid统一1999 1999

#2. nfs服务端配置

#3. nfs客户端挂载

#1. 所有主机(nfs服务端和nfs客户端)添加用户 www uid统一1999 1999

创建用户及用户组之前先id命令查询用户id,在grep/etc/passwd查看是否有uidgid号冲突

#groupadd -g 1999 www

#useradd -u 1999 -g www -s /sbin/nologin -M www

(-u设置用户id,-s  设置默认shell 无法登录,-M不创建家目录,-g 设置用户对应的基本用户组)

虽然省略 -g 参数时,系统会自动创建一个与用户名同名的组作为主组,但正确严谨的操作顺序如上,先创建一个名为www的用户组,id为1999,再将用户www加入1999的用户组中(显式指定)

useradd  -u 1999  -s /sbin/nologin -M www(此种方法可能出现的问题:组gid随机分配时:

如果主机A自动分配 GID=1999,主机B分配 GID=2000,在 NFS 共享目录中:

  • 主机A创建的文件在主机B显示为未知用户
  • 导致权限错误或文件访问失败

#2. nfs服务端配置

cat /etc/exports

/nfsdata/     172.16.1.0/24 (rw,all_squash)

/nfs/pics/  172.16.1.0/24 (rw,all_squash,anonuid =1999,anongid=1999)

systemctl reload nfs重载服务生效修改

showmount -e查看是否配置成功

❌注意,这里不可以同时共享/nfs/和/nfs/pics/,后面的子目录会失效

#3. nfs客户端挂载

mount - nfs 172.16.1.31:/nfs/pics/   /upload-pic/

du -h /upload-pic/

touch /upload-pic/test.txt      测试效果,之后去服务端看是否创建成功

ll /upload-pic/

项目小结:

项目web服务器和nfs服务器统一虚拟用户为www.为了系统安全.

nfs服务器配置文件中主要修改的:all_squash,anonuid,anongid.

3.8 NFS优化

终极优化目标: ⭐ ⭐ ⭐ ⭐ ⭐

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

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

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

有可能用户上传的数据中有病毒等不安全因素,存储中的解决方案:

mount -o 指定挂载选项,有这个概念

mount  -o noexec,nosuid,nodev  -t nfs

在web服务器的程序代码中也可以拦住类似的危险操作,在存储中是最后一道防线

noexec:取消挂载后重新挂载时加上选项,禁止执行命令,mount -t nfs -o noexec 172.16.1.31:/nfs/pics/ /upload-pic/

172.16.1.31:/data   /video/

#这几个是客户端挂载选项

noexec 挂载的nfs目录中如果有命令,无法运行。

nosuid 带有suid的命令

nodev 带有特殊属性的文件。

永久生效实现方法:/etc/fstab中的defaults改成这三个如👇:

#/etc/fstab

172.16.1.31:/data/   /video/   nfs  noexec,nosuid,nodev  0 0

NFS有单点故障的解决方案:

准备个nfs备用节点(数据),故障的时候进行切换(取决于nfs可以挂多久).

或者直接用多个节点的服务:

分布式存储:GlusterFS(GFS),MinIO,Ceph…………,FastDFS,Mfs

公有云OSS(阿里云) (对象存储在代码里面调用)

3.9 NFS小结

说出来网站为何是否存储服务(共享存储)

存储选型

核心:①搭建NFS存储,对服务进行配置(比如共享/nfsdata目录)

②用户映射选项:all_squash,anonuid,anongid

常用:故障与排查:rpcinfo -p ip ,showmount -e ip

解决nfs服务单点问题: 实时同步lsyncd.

完成项目:全网备份项目,共享存储,nfs存储实时同步(解决单点)

存储服务常见故障

1.服务器重启后NFS服务没有正常启动:

解决方案:排查配置文件/共享目录是否有问题

注意:status查看运行状态excited是正常情况

2.访问被拒绝(access denied):

原因:挂载用的ip与服务端配置文件里指定的主机ip地址不符,导致无法找到对应的机器,或者共享目录权限不对(所属主nobody)

3.使用nfs客户端挂载或查看nfs挂载目录时卡住了:

排查:先ping ip,然后检查防火墙/selinux 

当df -h卡住了如何寻找挂载点:客户端/proc/mounts里面过滤nfs即可

服务端没有日志文件,使用status查看运行状况/报错信息

客户端排查问题使用showmount -e nfs01 检查

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部