综合架构之存储服务之NFS

1. 存储服务概念介绍
2. 存储服务部署流程 
3. 存储服务存储原理 
4. 存储服务配置参数
5. 存储服务挂载方法 
6. 存储服务常见异常
7. 存储服务优点缺点

第一部分 存储的概念介绍

1.1存储服务器的价值

1. 可以实现数据统一共享存储(解决数据不一致的问题)
2. 节省架构服务运营成本(如果不用共享存储,则会每台服务器都会存储一个集群内服务器的数据,更浪费磁盘资源。)
3. 减少web服务器的压力。

1.2如何实现数据存储

NFS(network file system --- 网络共享文件系统 不支持windows) server u 搭建FTP服务器
FTP(文件共享存储 --- windows比较方便简单 linux如何部署FTP--数据权限设置)
samba (linux部署服务端 可以让 windows 与 linux同时可以访问)

注:samba配置比较复杂 135 139端口也较危险。

1.3分布式存储

分布式存储原理图

原理:将数据分散的传到各个存储服务器,通过一定的算法将数据进行保存。然后由一台管理服务器进行对多个存储服务器进行控制。当客户端访问存储时,只需要访问分布式存储服务器的管理服务器即可。同时当一台存储服务器出现问题时,这时将数据转移到其他服务器上。

第二部分 部署nfs存储流程

nfs存储原理图

存储服务器 客户端
把远程的存储服务器的一个目录作为存储设备
把客户端的一个目录作为挂载点
由多个服务器共同挂载服务端的目录,通过网络并实现共享存储。

2.1 rpc服务的原理

RPC 远程过程调用程序---中介服务

rpc服务原理

实际上用租房子来理解 租客找房子要找中介,中介那有房源信息。相当于客户端挂载必须要找RPC服务。


2.2 nfs服务的工作原理

nfs多进程服务

一旦服务一启动,会出现多个网络进程。每个进程会产生相应的端口,并且是随机端口,为了减少客户连接的复杂度,出现了一个RPC服务。客户端连接存储,只需要访问RPC服务。


图片.png

2.3 nfs服务的部署流程

第一个历程:安装软件程序
    yum install -y nfs-utils rpcbind
    rpm -qa nfs-utils 
    rpm -qa rpcbind
    第二个历程:编写配置文件
    vim /etc/exports
    01                              02 
    可以进行共享存储目录     允许存储数据网段信息(存储目录权限配置 存储数据方式配置)
    /data                    172.16.1.0/24(rw,sync-同步方式存储数据)
    同步方式存储数据:用户有数据存储  ----  存储服务器(磁盘中) 存储安全性高 安全
    异步方式存储数据:用户有数据存储  ----  内存 --- 存储服务器(磁盘中)  存储效率高
    /data 172.16.1.0/24(rw,sync) 英文小括号 多个参数用,分割
    第三个历程:创建备份目录 对存储目录进行授权
    mkdir /data
    chown nfsnobody.nfsnobody /data
    第四个历程:启动服务程序
    systemctl start rpcbind
    systemctl enable rpcbind
    systemctl start nfs
    systemctl enable nfs

2.4客户端部署的流程

第一个历程:安装相关软件
    yum install -y nfs-utils
第二个历程:进行存储目录挂载
mount -t nfs  172.16.1.31:/data  /mnt
第三个历程:进行测试
客户端web01   在挂载点创建数据   存储服务是否有创建好的数据
                                     检查其它客户端挂载点是否有创建的数据

客户端一定要安装nfs-utils这个软件,否则会出现报错!



报错提示:文件类型使用错了


第三部分 nfs服务用户映射原理

三种服务用户映射原理图

当客户端的用户通过网络向存储服务器进行存储,无认证项目,白名单通过,最终会把用户变成nfsnobody(安装好服务以后,会默认有这个用户)。


当软件包无法安装时该如何解决

 异常下载软件问题:
    01. 更新yum源 更改后 yum clean all
    02. 利用rpm安装软件 获得rpcbind软件包
        vim /etc/yum.conf 
        cachedir=/var/cache/yum/$basearch/$releasever   --- 下载软件保存路径
        keepcache=1                                     --- 下载软件保留下来,不要被删除,0代表删除。
yum reinstall rpcbind
        rpm -ivh  rpcbindxxx.rpm
  [root@nfs01 ~]#   rpm -ivh /tmp/rpcbind-0.2.0-47.el7.x86_64.rpm 
    Preparing...                          ################################# [100%]
    error: %pre(rpcbind-0.2.0-47.el7.x86_64) scriptlet failed, exit status 1   --- 创建用户动作 nfsnobody
    rpm -e rpcbind --nodeps
    error: rpcbind-0.2.0-47.el7.x86_64: install failed
    说明:发现还不行的时候看报错信息 脚本创建失败
    1. nfs服务安装好之后,会自动创建nfsnobody虚拟用户
    2. 需要确认4个和用户相关的文件不能上锁
    lsattr 
   chartr -i 是解锁

第四部分 存储服务配置文件编写格式

man exports

  • ro 只读配置 使存储目录权限位只读
    应用场景:使开发人员(线下)可以查看线上服务器数据(线上的服务器只能运维操作)
    一是 让他查看自己的电脑
    二是 给他挂载只读目录
  • rw 读写权限
    sync 同步存储数据
    async 异步存储数据

注:以上四个为常用


all_squash     将所有普通用户映射为指定nfsnobody用户
 no_all_squash  将所有普通用户都不做映射
root_squash    将root用户映射为指定nfsnobody用户
no_root_squash 将root用户不做映射

  • all_squash映射实践:
    第一步: 服务端(修改配置文件)
    /data 172.16.1.0/24(ro,sync,all_squash)

systemctl reload nfs
restart:将所有连接会话都会直接断开
reload: 只会将没有数据传输链接断开, 重新建立连接 让用户访问感受更好 让传输的数据继续传,传完再断开再重新传.

第二步:上传数据测试
[oldboy@web01 mnt] touch oldboy.txt
[oldboy@web01 mnt]$ ll
total 4
-rw-r--r-- 1 nfsnobody nfsnobody 19 Jul 16 12:03 oldboy.txt --- 所有普通用户都会做映射

  • no_all_squash映射实践:
    第一步: 服务端(修改配置文件)
    /data 172.16.1.0/24(ro,sync,no_all_squash)
    systemctl reload nfs
    第二步:上传数据测试 服务端查看
    [root@nfs01 data]# ll
    total 4
    -rw-rw-r-- 1 1017 1017 0 Jul 16 12:08 oldboy02.txt
    -rw-rw-r-- 1 1017 1017 0 Jul 16 12:10 oldboy_1017.txt --- 用户传输数据身份没有变化,看用户uid信息

注:当服务端也有普通用户并且uid也和客户端相同时,则可以存储,如果不相同 会将属主组变为客户端文件uid信息
如果服务端已经有了用户并且uid和服务端相同,备份的时候虽然会显示备份的文件属组 属组会显示服务端用户的名字。但UID是跟客户端相同的。

  • root_squash映射实践:
    第一步:服务端编写配置文件
    /data 172.16.1.0/24(rw,sync,root_squash)
    第二步:客户端检查存储信息
    [root@web01 mnt]# touch root_01.txt
    [root@web01 mnt]# ll
    -rw-r--r-- 1 nfsnobody nfsnobody 0 Jul 16 12:19 root_01.txt --- root用户会映射为指定的nfsnobody用户

  • no_root_squash映射实践:
    第一步:服务端配置文件修改
    /data 172.16.1.0/24(rw,sync,no_root_squash)
    第二步:客户端检查存储信息
    [root@web01 mnt]# touch root_02.txt
    [root@web01 mnt]# ll
    -rw-r--r-- 1 root root 0 Jul 16 12:22 root_02.txt

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。