一、概述
为什么咱们须要它?
家喻户晓,在微服务架构中,从网关进来的申请会通过 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 配置文件的超时工夫,设置长一些再进行测试
四、总结
对于刚接触这个的小白来说,如果遇到了问题,首先要做的不是自觉的去百度搜解决办法,而应该第一工夫想到查看日志文件,并且要晓得查看哪一个日志文件,如果说你不晓得日志文件在那个目录下,没关系,别着急,这个网上一艘便是,查看日志文件而后再依据日志文件提醒的谬误锁定问题,而后再针对性的去找解决办法。
平时遇到的很多问题往往都是比拟宽泛的,你可能会搜寻到各式各样的解决方案,因为一个外表的问题,往往有很多中深层次的问题导致的,是否能靠网上搜到的解决你遇到的问题齐全是在靠运气。
重要的事说三遍:
呈现问题肯定要看日志文件!!!呈现问题肯定要看日志文件!!!呈现问题肯定要看日志文件