FastDfs介绍
分布式文件系统
静态资源服务器
图片服务器(在分布式环境中,部署多个同样的系统可以共享。多个不一样的系统也可以共
享资源)。
介绍
什么是FastDFS
FastDFS是用c语言编写的一款开源的分布式文件系统。FastDFS为互
联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并
注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文
件服务器集群提供文件上传、下载等服务。
FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存
储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问
题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
https://baike.baidu.com/item/fastdfs
和之前对比,把上传的位置做了变化。这次把图片上传到远程的图片服务器。分布式共享。
流程
文件上传时序图:(按照时间的请求顺序)
在存储服务器上存储了具体的内容,返回给客户端的只是存储的地
址, 以后就拿这个远程的地址就可以访问到文件了。
下载文件时序图
下载案例:
http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.13/bin/apachetomcat-
9.0.13.zip
有地址,部署在web服务器,就支持直接下载。
开源地址:
https://github.com/happyfish100
FastDfs安装
安装
一台虚拟机来模拟,一个Tracker、一个Storage服务。配和nginx访问
图片。
(因为需要对外访问,最后可以通过域名访问到图片。)
https://www.baidu.com/img/bd_logo1.png
下载:https://github.com/happyfish100
初始环境
所需软件: 链接 https://pan.baidu.com/s/1DcUH0TngCiR2LAsLxHWZIg 提取码 mfdp
软件上传:
在线安装libevent工具包:
确认是否安装:
1 | rpm -qa | grep libevent |
(已安装不需要装,没有安装需要装)
1 | yum -y install libevent |
安装libfastcommon工具包
解压缩:
1 | unzip libfastcommon-master.zip |
若unzip命令没找到:
1 | yum install -y unzip zip |
若32位目录中没有libfastcommon.so文件,就
把/usr/lib64/libfastcommon.so文件向/usr/lib/下复制一份
(新版红色框部分标示32位、64位目录都已安装。)
解压:
编译与安装:
观察:可以兼容32,64位系统
Tracker服务安装
安装Tracker服务,这只是一个监听服务。
1)解压缩:
1 | unzip fastdfs-master.zip |
2)
1 | ./make.sh |
3)
1 | ./make.sh install |
:安装后在/usr/bin/目录下有以fdfs开头的文件
都是编译出来的。配置文件都放到/etc/fdfs文件夹
4)把/opt/qf/fastdfs/fastdfs-master/conf目录下的所有的配置文件
都复制到/etc/fdfs下(从源码的配置文件/opt/qf/fastdfs-soft/fastdfsmaster/
conf/*中复制)。
1 | cp /opt/qf/fastdfs/fastdfs-master/conf/* /etc/fdfs/ |
5)配置tracker服务。修改/ etc/fdfs /tracker.conf文件。
base_path=/home/shuju/fastdfs[手动创建目录]
http.server_port=85
6)启动tracker。
1 | /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf |
重启使用命令:
1 | /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf |
1 | restart |
Storage服务安装
安装storage服务,这个就是真正的存储服务。
如果是在不同的服务器安装,第三步的1~4需要重新执行。这里我们在
同样一台服务器,不再需要对源码进行重复的编译和安装,仅仅只需要
配置storage服务。修改/ etc/fdfs /storage.conf文件
Storage存储和日志存放路径:
base_path=/home/shuju/fastdfs
图片保持路径: store_path0=/home/shuju/fastdfs
指定Tracker服务器: tracker_server=101.21.26.229
:22122(阿里云使用外网IP,正常公司内部的正式服务器也只有内网IP)
http.server_port=85 # 此处需要和后面 nginx 监听端口保
持一致
启动storage服务
启动:
1 | /usr/bin/fdfs_storaged /etc/fdfs/storage.conf |
日志/home/shuju/fdfs/logs/storaged.log 外网若链接不成功
改内网IP
重启:
1 | /usr/bin/fdfs_storaged /etc/fdfs/storage.conf |
1 | restart |
链接成功,测试服务
测试需要使用客户端的配置文件,所以需要修改配置文
件/etc/fdfs/client.conf
客户端日志保持base_path=/home/shuju/fastdfs
指定Tracker服务器: tracker_server= 101.21.26.229
:22122(外网IP)
http.tracker_server_port=85 (配置nginx)
测试指令一:
指令的位置:/usr/bin
上传图片:
1 | ./fdfs_upload_file /etc/fdfs/client.conf /etc/fdfs/anti-steal.jpg |
存储地址:
group1/M00/00/00/rBGMA1q4VqqATqNmAABdrZgsqUU938.jpg
真实地址:
服务器存储地址:/home/shuju/fastdfs/data/00/00
测试指令二:
上传图片:
1 | ./fdfs_test /etc/fdfs/client.conf upload /etc/fdfs/anti-steal.jpg |
显示有完整url :
http://192.168.132.134:85/group1/M00/00/00/wKiEhlvUNWWAAjA5AAFl0YAhvnQ243.jpg
这个路径是后来可以通过域名的方式直接访问
注意:防火墙放行:22122 23000 两个端口
通过java程序实现上传下载具体代码: