一步步带你用 FastDFS 搭建文件管理系统 详细的不得鸟
FastDFS概述
-
余庆大佬用 c语言 编写的一款开源的分布式文件系统。
-
为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,注重高可用、高性能等指标
-
冗余备份: 纵向扩容
-
线性扩容: 横向扩容, 增加容量
-
可以很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
-
应用场景:
- 文件上传 -> 存储
- 文件下载
-
冗余备份(通过文件内容生成key值,在上传同一个文件时,不会重复存储,这就省了很大的空间)
-
负载均衡:
浏览器访问服务器(192.168.110.11:8080),如果全校都访问这个网站的时候,就会很卡,怎么办? 多开几个端口(一个端口的负载能力有限),再访问的时候,指向不忙的端口(8081、8082)和集群有点像,
负载就是请求的数量;均衡就是给你平均的分配,结合就是负载均衡。 -
线性扩容:直接加配置文件,就可以多一个服务器的存在,早期如果想加服务器,就需要重复写相关代码,扩容非常方便。
FastDFS 中的三个角色
- 追踪器 ( tracker ) -> 守护进程
- 管理者
- 第一个启动
- 存储节点 ( storage ) -> 守护进程
- 可以理解为网络环境中可以存储文件的主机
- 存储文件
- 第二个启动
- 客户端 - client
- 程序猿写的
- 发起上传请求, 完成上传操作
- 发起下载请求, 将服务器文件下载到本地
- 最后启动, 是一个普通的应用程序
FastDFS 三个角色的关系
- 先启动追踪器
- 启动存储节点
- 主动连接追踪器, 汇报当前存储节点的状态信息
- 后边定时汇报状态
- 客户端程序启动, 连接追踪器, 发给上传请求
- 客户端询问追踪, 看那个存储节点有足够的容量
- 追踪查询存储节点信息
- 将查到的节点信息发送给客户端
- 客户端通过得到的存储节点地址, 连接存储节点
- 将文件上传到存储节点上, 存储节点得到一个file_id, 并将其发送给客户端
- 客户端需要存储这个fileID, 下载的时候要用
- 先启动追踪器
- 启动存储节点
- 主动连接追踪器, 汇报当前存储节点的状态信息
- 后边定时汇报状态
- 客户端程序启动, 连接追踪器, 发送下载请求
- 客户端询问追踪, 看那个存储节点上有要下载的文件
- 追踪查询存储节点信息
- 将查到的节点地址发送给客户端
- 客户端通过得到的存储节点地址, 连接存储节点
- 将存储节点发送给客户端的文件, 保存到本地
FastDFS集群
- tracker集群
- 为了避免单点故障
- 工作方式: 轮询
- 集群方式: 修改配置文件
- 存储节点的集群
- 存储节点的管理:
- 是以组的方式来管理的
- 横向扩容 -> 添加新的分组, fastDFS容量增加了
- 不同组的主机之间不通信
- 各组的容量相加就是整体容量
- 纵向扩容 -> 在现有的组中添加新的主机, 和同组主机之间互为备份关系
- 同组主机中存储的内容相同
- 同组主机之间是通信的
- 当前组的容量按照最小的主机来算
- 存储节点的管理:
FastDFS 架构说明
举个例子:
小老板(客户端)想要存他的货,存货肯定是要把货存到仓库里面,但是不能让小老板自己去找仓库,因为那么多仓库,小老板不知道哪个可以用以及哪个有空闲可以存我的货。
所以,自己去找就很费时费力。况且,仓库是面向很多个小老板,这么多小老板如果每次都是自己去找仓库,就会很费时间。所以,安排一个仓库管理员,这个是干什么的呢? 小老板想存东西,找这个管理员,让管理员告诉小老板,哪个仓库可以用,然后小老板就去指定仓库存东西去了。
这个仓库管理员没事就去巡逻,挨个仓库走一遍看哪个仓库有空闲可以用,工作:定时的遍历去查询仓库,看这个仓库能用不能用(收集仓库的状态)。仓库才是真正存数据的地方。
小老板存完数据之后,仓库就会给他一个凭证,告诉他你的东西存在了哪个仓库,以后可以直接过来取。
线性扩容就是加仓库。
凭证:组名 虚拟磁盘路径(设置才有,不设置没有) 数据两级目录(文件路径) 文件名(通过加密防止文件名重复)
FastDFS 安装
安装 FastDFS 依赖包
1)下载 libfastcommon.zip
下载地址:https://github.com/happyfish100/libfastcommon/releases
2)解压缩 libfastcommon.zip
3)进入到 libfastcommon 的目录中
4)执行 ./make.sh
5)执行 sudo ./make.sh install
安装 FastDFS
1)下载 fastdfs.zip
下载地址:https://github.com/happyfish100/fastdfs/releases
2)解压缩 fastdfs.zip
3)进入到 fastdfs 的目录中
4)执行 ./make.sh
5)执行 sudo ./make.sh install
验证
ls -al /usr/bin/fdfs*
配置跟踪服务器 tracker
1)拷贝文件
sudo cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
2)在 /home/conan/
目录中创建目录 fastdfs/tracker
mkdir –p /home/conan/fastdfs/tracker
3)编辑 /etc/fdfs/tracker.conf
配置文件
sudo vim /etc/fdfs/tracker.conf
修改内容:
base_path=/home/conan/fastdfs/tracker
配置存储服务器storage
1)拷贝文件
sudo cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
2)在 /home/conan/fastdfs/
目录中创建目录 storage
mkdir –p /home/conan/fastdfs/storage
3)编辑 /etc/fdfs/storage.conf
配置文件
sudo vim /etc/fdfs/storage.conf
修改内容:
base_path=/home/conan/fastdfs/storage
store_path0=/home/conan/fastdfs/storage
tracker_server=自己ubuntu虚拟机的ip地址:22122
启动tracker和storage
执行以下两条指令
sudo fdfs_trackerd /etc/fdfs/tracker.conf
sudo fdfs_storaged /etc/fdfs/storage.conf
测试是否安装成功
1)
sudo cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
2)编辑 /etc/fdfs/client.conf
配置文件
sudo vim /etc/fdfs/client.conf
修改内容:
base_path=/home/conan/fastdfs/tracker
tracker_server=自己ubuntu虚拟机的ip地址:22122
3)上传文件测试
sudo fdfs_upload_file /etc/fdfs/client.conf 要上传的图片文件路径
例如:
sudo fdfs_upload_file /etc/fdfs/client.conf /home/conan/1.jpg
如果返回类似 group1/M00/00/00/rBIK6VcaP0aARXXvAAHrUgHEviQ394.jpg
的文件 id
则说明文件上传成功。
安装 fastdfs-nginx-module
1)下载 nginx.tar.gz:http://nginx.org/en/download.html
2)解压缩 nginx.tar.gz
3)下载 fastdfs-nginx-module.zip:https://github.com/happyfish100/fastdfs-nginx-module/releases
4)解压缩 fastdfs-nginx-module.zip
5)下载库(更换阿里源)
首先你需要去更换阿里源,因为ubuntu自带的源没有这个库
怎么更换?我在 安装ubuntu系统 这一文章中有讲到,没有更换的可以去这里看一下:
更换完成之后,执行以下命令
sudo apt update
sudo apt install libpcre3 libpcre3-dev
如果没有下载这个的话,执行下面的命令会报错:
6)进入解压的 nginx
目录中
执行
sudo ./configure --prefix=/usr/local/nginx/ --add-module=fastdfs-nginx-module解压后的目录的绝对路径/src
我这里是:
sudo ./configure --prefix=/usr/local/nginx/ --add-module=/home/conan/fastdfs/fastdfs-nginx-module-1.22/src
这时如果还报以下错误:
./configure: error: the HTTP gzip module requires the zlib library.
You can either disable the module by using --without-http_gzip_module
option, or install the zlib library into the system, or build the zlib library
statically from the source with nginx by using --with-zlib=<path> option.
解决方案
1)找一个临时目录,下载命令:wget http://www.zlib.net/zlib-1.2.11.tar.gz
2)解压:zlib-1.2.11.tar.gz
3)进入 zlib-1.2.11
文件夹
cd zlib-1.2.11
4)安装
./configure
make
make install
安装完成,回到 nginx
目录中,再次执行
sudo ./configure --prefix=/usr/local/nginx/ --add-module=/home/conan/fastdfs/fastdfs-nginx-module-1.22/src
安装完成:
如果安装过程中报以下错误:(错误原因是因为nginx编译的时候把警告当错误处理,事实上这个警告并不影响)
解决方案
找到 nginx
目录下的 objs
目录下的 Makefile
sudo vim Makefile
删掉里面的 -Werror
然后回到 nginx
目录中,再次执行:
sudo ./configure --prefix=/usr/local/nginx/ --add-module=/home/conan/fastdfs/fastdfs-nginx-module-1.22/src
执行完上述命令之后,
执行:
sudo make
然后执行:
sudo make install
5)拷贝
sudo cp fastdfs-nginx-module解压后的目录中src下mod_fastdfs.conf /etc/fdfs/mod_fastdfs.conf
6)修改内容
sudo vim /etc/fdfs/mod_fastdfs.conf
修改对应内容为:
connect_timeout=10
base_path=/home/conan/fastdfs/tracker
tracker_server=自己ubuntu虚拟机的ip地址:22122
url_have_group_name=true
store_path0=/home/conan/fastdfs/storage
7)拷贝文件
sudo cp 解压缩的fastdfs目录中的conf中的 http.conf /etc/fdfs/http.conf
也可以先进入到解压缩的 fastdfs
目录中的 conf
中
sudo cp http.conf /etc/fdfs/http.conf
8)拷贝文件
sudo cp 解压缩的fastdfs目录中的conf中的 mime.types /etc/fdfs/mime.types
也可以先进入到解压缩的 fastdfs
目录中的 conf
中
sudo cp mime.types /etc/fdfs/mime.types
nginx 配置
1)添加配置信息
sudo vim /usr/local/nginx/conf/nginx.conf
在 http 部分中添加配置信息如下:
server {
listen 8888; # nginx服务器端口
server_name localhost; # ip地址
location ~/group[0-9]/ { # 组名
ngx_fastdfs_module;
}
error_page 500 502 503 504 /50x.html; # 错误页面
location = /50x.html {
root html;
}
}
启动 nginx
sudo /usr/local/nginx/sbin/nginx
我们之前上传过文件得到的一个凭证,复制那个凭证
如果没有保存,重新上传一个即可(重启系统需要重新启动tracker和storage)
在浏览器中输入:
ip地址:8888/凭证
比如:
192.168.180.130:8888/group1/M00/00/00/wKi1gl7F7jmAJC73AAB66dOYt_o243.jpg
就可以看到图片啦
李培冠博客
欢迎访问我的个人网站:
李培冠博客:lpgit.com