快速搭建FastDFS分布式文件系统

Linux系统部署FastDFS 分布式文件系统

一、概述

为什么我们需要它?

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

FastDFS是什么?

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

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

FastDFS的结构图

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

FastDFS是怎么存储文件的?

存储过程

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

为什么是都是集群?

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

扫描二维码关注公众号,回复: 12305315 查看本文章

​ 之前也提到过冗余备份、线性扩容,是通过组(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:/etc/fdfs_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配置文件的超时时间,设置长一些再进行测试

四、总结

对于刚接触这个的小白来说,如果遇到了问题,首先要做的不是盲目的去百度搜解决办法,而应该第一时间想到查看日志文件,并且要知道查看哪一个日志文件,如果说你不知道日志文件在那个目录下,没关系,别着急,这个网上一艘便是,查看日志文件然后再根据日志文件提示的错误锁定问题,然后再针对性的去找解决办法。平时遇到的很多问题往往都是比较宽泛的,你可能会搜索到各式各样的解决方案,因为一个表面的问题,往往有很多中深层次的问题导致的,是否能靠网上搜到的解决你遇到的问题完全是在靠运气。

重要的事说三遍:

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

猜你喜欢

转载自blog.csdn.net/weixin_44829930/article/details/110950355
今日推荐