美文网首页
10分钟,教你快速搭建一套属于自己的分布式文件系统

10分钟,教你快速搭建一套属于自己的分布式文件系统

作者: Java码农 | 来源:发表于2022-08-31 10:09 被阅读0次

    一、概述

    为什么我们需要它?

    众所周知,在微服务架构中,从网关进来的请求会通过Ribbon进行负载均衡,可能造成你每次请求都有可能是不同的服务器处理的,因为,为了提高系统的吞吐量,某些服务被集群化,在这种情况下,当用户需要进行文件存储的时候,如果说把文件存储在当前处理请求的服务器中,那么下次当你想要获得这个文件的时候可能就获取不到了,因为你的这次请求可能交由另一个服务器处理了。为了解决在分布式系统中文的件存储这一问题,FastDFS应运而生

    FastDFS是什么?

    这是一款开源的分布式文件系统,负责对文件进行存储,主要功能包括:文件存储、文件同步、文件访问等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

    FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等、并且注重高可用、高性能,使用FastDFS可以很容易的搭建一套高性能的文件服务器集群提供上传、下载文件等服务

    FastDFS的结构图:

    FastDFS服务端有两个角色 :跟踪器(tracker)和存储节点(storage)。在Storage集群中,每一个Volume也称作一个组(group)

    FastDFS是怎么存储文件的?

    存储过程

    Tracker主要负责对请求进行调度,起到负载均衡的作用,类似于微服务中的注册中心(有心跳机制等等),它有每一个存储点的信息,在收到客户端发来的存储文件的请求时,会通过负载均衡算法来选择某一个Storage来存储该文件。

    为什么是都是集群?

    之前提到过高可用、负载均衡等名词,都是通过跟踪器(tracker)的集群化来保证的。当某一个Tracker宕机后,其他的Tracker可以继续对存储请求进行处理,这就保证了高可用。在决定文件要存到哪一个Storage的时候会使用随机或轮询等负载均衡的算法,来保证每个Storage所存储的数据比较均匀

    之前也提到过冗余备份、线性扩容,是通过组(group)来保证的。首先,想想为什么会出现组这个概念呢?因为,当我们进行文件存储的时候,不是说把文件存储到某个Storage后就万事大吉了,万一某台机器故障了怎么办?

    那里面的数据可能就都要丢失了,这是一件非常严重的情况,为了解决这种情况,FastDFS中可以采用多个Storage来存储相同的文件,这样做的目的是进行数据备份,即冗余备份,解决了某个Storage出现故障时文件丢失的问题。这些存储相同文件的Storage就属于同一个组(group)。还有一种情况,当存储的文件逐渐增多时,如何进行扩容呢?根据FastDFS的结构,我们可以通过增加组(group)的方式来扩容

    二、安装

    这里推荐使用Docker安装,因为简单快捷,步骤简单,适合第一次接触FastDfs并且对Linux命令不是很熟悉的小白,话不多说直接进入正题。

    大体的流程:安装Docker——拉取FastDFS镜像——使用镜像创建容器并修改配置文件——重启后即可使用

    安装Docker

    安装
    # 1、yum 包更新到最新
    yum update
    # 2、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
    yum install -y yum-utils device-mapper-persistent-data lvm2
    # 3、 设置yum源,(如果提示说没有yum-config-manager这个命令:yum -y install yum-utils)
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    # 4、 安装docker,出现输入的界面都按
    y yum install -y docker-ce
    # 5、 查看docker版本,验证是否验证成功
    docker -v
    # 6、出现docker的版本信息说明成功了
    
    配置镜像加速

    登录阿里云,在左侧菜单选中镜像加速器获取自己的专属镜像加地址

    阿里云镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

    /etc/docker/daemon.json文件末尾增加你自己的镜像加速地址(如果没有这个文件,就创建一个)

    { "registry-mirrors": ["https://你的ID.mirror.aliyuncs.com"]}
    
    常用命令:
    systemctl start docker    #启动
    systemctl stop docker     #停止
    systemctl restart docker  #重启
    
    docker ps  #查看运行的容器
    docker images #查看下载的镜像
    

    拉取FastDFS镜像

    这一步下载镜像需要一点点时间,耐心等待即可

    docker pull morunchang/fastdfs
    

    运行Tracker和Storage

    运行tracker
    • –name 后面的是容器名
    • –net=host 表示设置为host网络模式,容器使用主机的ip,并且不用做端口映射
    • sh后面是执行的是sh文件,如果运行的是storage容器,就是storage.sh
    docker run -d --name tracker --net=host morunchang/fastdfs sh tracker.sh
    
    运行storage

    为了方便后面测试是否成功,还需要提前创建一个文件夹,用来关联storage存储的文件,我们可以通过更改此文件来更改storage容器里的文件,你可以把这两个文件夹理解为同一个

    #创建文件夹用于后面做文件的映射
    mkdir -p /apps/storage/data
    
    • -v 后面是设置的虚拟机文件和容器里的文件的映射关系
    • TRACKER_IP改成自己Linux系统的ip地址(可通过ifconfig查看),如果是云服务器,则改成公网IP
    • -e 后面跟的是容器的参数,GROUP_NAME是组名,可以根据自己的需求进行设置
    docker run -d --name storage -v /apps/storage/data:/data/fast_data/data --net=host -e TRACKER_IP=192.168.220.100:22122 -e GROUP_NAME=group1 morunchang/fastdfs sh storage.sh
    

    修改Nginx的配置(storage容器内的)

    进入storage容器内部
    docker exec -it storage /bin/bash
    

    打开nginx的配置文件nginx.conf

    vi /etc/nginx/conf/nginx.conf
    

    添加如下内容(已存在的,不用改),这一步的目的是将ip:port/组名/M00/*的请求映射到ngx_fastdfs_module模块下,并且存储在当前容器的/data/fast_data/data目录下

    location ~ /M00 {
     root /data/fast_data/data;
        ngx_fastdfs_module;
        add_header Cache-Control no-store;
    }
    

    设置好后就可以退出容器了

    exit
    

    容器storage容器

    docker restart storage
    

    除了上面的之外,如果你有其他的需求,比如修改配置文件的其他信息,可以按照如下步骤来进行修改

    docker exec -it storage /bin/bash
    cd /etc/fdfs
    vi tracker.conf
    vi storage.conf
    

    三、测试

    第一步:

    测试Nginx是否启动正常,如果上面的步骤中你没有修改nginx的配置文件,默认是8080端口打开

    打开浏览器,输入:Linux的ip:8080,如果看到Welcom to Nginx则表示Nginx启动没有问题

    不成功的解决办法:

    如果访问被秒拒绝,则说明是防火墙的原因,如果等待了一段时间后提示错误,则可能是其他原因,这个时候需要进入storage容器查看nginx的error日志,在容器/etc/nginx/下的日志目录下

    第二步:

    如果第一步没有问题,则可以往Linux下的/apps/storage/data/data/00/00目录下传入一个图片,

    例如:命名为rBCY81_Rh2eAcZAgAA7o7y_7EUQ049.png(因为文件名太短是访问不到的),

    或者自己创建一个文件

    vi /apps/storage/data/data/00/00/rBCY81_Rh2eAcZAgAA7o7y_7EUQ049.txt随便写的内容
    

    然后尝试用浏览器进行访问这个文件,输入如下格式的URL

    ip:8080/组名(默认group1)/M00/00/00/文件(例如:rBCY81_Rh2eAcZAgAA7o7y_7EUQ049.txt)
    

    不成功的解决办法:

    如果无法访问,可以进入容器,通过查看容器后查看配置文件来锁定错误原因

    步骤:

    进入容器

    docker exec -it storage /bin/bash
    

    查看storage日志文件信息

    cat /data/fast_data/logs/storaged.log
    

    在使用SpringBoot或者SpringCloud的FdfsClient进行上传图片时,如果没有get到tracker或者storage,去打开防火墙的22122,23000端口,云服务器的话需要去管理页面开启这些端口(具体百度,根据操作系统) 如果是报的错是超时,可以查看以下application.yml配置文件的超时时间,设置长一些再进行测试

    四、总结

    对于刚接触这个的小白来说,如果遇到了问题,首先要做的不是盲目的去百度搜解决办法,而应该第一时间想到查看日志文件,并且要知道查看哪一个日志文件,如果说你不知道日志文件在那个目录下,没关系,别着急,这个网上一艘便是,查看日志文件然后再根据日志文件提示的错误锁定问题,然后再针对性的去找解决办法。

    平时遇到的很多问题往往都是比较宽泛的,你可能会搜索到各式各样的解决方案,因为一个表面的问题,往往有很多中深层次的问题导致的,是否能靠网上搜到的解决你遇到的问题完全是在靠运气。

    重要的事说三遍:

    出现问题一定要看日志文件!!!出现问题一定要看日志文件!!!出现问题一定要看日志文件

    相关文章

      网友评论

          本文标题:10分钟,教你快速搭建一套属于自己的分布式文件系统

          本文链接:https://www.haomeiwen.com/subject/dkqdnrtx.html