最近开发的项目中需要使用到 FastDFS,因此抽时间进行了学习,进行了总结
FastDFS
分布式文件系统
FastDFS是淘宝的余庆所开发的,是一款开源的轻量级分布式文件系统,采用纯C实现,目前提供了C,JAVA和PHP的API,主要用它来对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。同类的分布式文件系统有谷歌的GFS,HDFS,TFS等。
FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。
跟踪器主要做调度工作,在访问上起负载均衡的作用。
存储节点主要的工作:存储、同步和提供存取接口。
整体来说:FastDFS主要有以下两个特点:
- 高可靠性:无单点故障;
- 高吞吐量:只要Group足够多,数据流量是足够分散的。
搭建图片服务器
-
安装依赖的环境
FastDFS是C语言开发,安装FastDFS需要先从官网下载源码,然后进行编译,但编译依赖 gcc 环境,如果没有 gcc 环境,需要安装
- linux虚拟机安装 :https://blog.csdn.net/qq_38257022/article/details/108208233
- 解决linux系统连接不到网络 :https://jingyan.baidu.com/article/363872ec796dfc6e4ba16f09.html
- xshell安装及使用 :https://www.jianshu.com/p/4716cc35750f
- 注意:配置网络时,网段一点要相同!!! 最后一定不相同!!
语言环境安装,一般使用 yum 命令,因为该命令依赖安装的很完整
//安装 gcc 环境
yum -y install gcc-c++
- FastDFS 依赖 libevent 库,需要安装:
yum -y install libevent
- 用root用户登录,在 /usr/local 目录下 新建 文件夹 fastdfs,并把相应压缩包传入
FastDFS_v5.05.tar.gz (FastDFS安装包)
libfastcommonV1.0.7.tar.gz (FastDFS依赖程序)
nginx-1.8.0.tar.gz (nginx安装包,用于做文件请求http代理服务器)
fastdfs-nginx-module_v1.16.tar.gz (nginx和fastdfs的桥梁插件模块)
3) 安装libfastcommon
libfastcommon 是 FastDFS 官方提供的,linfastcommon包含了FastDFS运行所需要的一些基础库。
cd /usr/local/fastdfs/
tar -zxf libfastcommonV1.0.7.tar.gz
cd libfastcommon-1.0.7/
./make.sh
./make.sh install
需要将 /usr/lib64 下的库文件拷贝至 /usr/lib 下
cd /usr/lib64
cp libfastcommon.so /usr/lib/
4)安装FastDFS_v5.05 (tracker+storage)
注意,此处我们将两个东西配置在一台服务器,真实环境考虑高可用,应该是部署在多台服务器
rm -rf libfastcommonV1.0.7.tar.gz //可将解压过的压缩包删掉
tar -zxf FastDFS_v5.05.tar.gz
cd FastDFS
./make.sh
./make.sh install //安装
安装成功后将安装目录 conf 下的文件拷贝到 /etc/fdfs/ 下。(nginx)
cd /usr/local/fastdfs/FastDFS
cd conf/
cp * /etc/fdfs/
a. 安装 traker 服务。修改/etc/fdfs/tracker.conf文件
cd /usr/local/fastdfs/FastDFS/tracker/ //不一定放在该目录
vim /etc/fdfs/tracker.conf
在 tracker.conf 配置文件中 ,修改 base_path=/usr/local/fastdfs/FastDFS/tracker
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf //启动tracker
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart //重启使用命令
配置开机自启动
将以上命令加入到该配置文件中
vi /etc/rc.d/rc.local
注意:配置完毕之后要将ip设置为静态 IP
b. 安装 Storage(存储) 服务
- 如果是在不同的服务器安装,则前面的两步需要重新执行
- 配置 storage 服务。 修改/etc/fdfs/storage.conf文件
cd /usr/local/fastdfs/FastDFS/storage //安装目录,不一定必须是这个
vim /etc/fdfs/storage.conf
将 base_path 和 store_path0 路径修改为 /usr/local/fastdfs/FastDFS/storage
将tracker_server地址修改为 本机地址,端口号不变
//启动storage.conf服务
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf //若失败,仔细检查 tracker 和 storaged 的配置文件
//上传指定文件到服务器
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /root/hi.html
上传的文件不能直接访问: http://192.168.209.1/group1/M00/00/00/wKjRAWCZGm2AHT0fAAAADP8d-tA94_big.html
需要设置防火墙,将80端口添加访问
vim /etc/sysconfig/iptables
-
配置客户端
-
安装 nginx 以及 nginx 插件
// PCRE
yum install -y pcre pcre-devel
// zlib
yum install -y zlib zlib-devel
// openssl
yum install -y openssl openssl-devel
安装 nginx和nginx插件,两者结合
可以使用官方提供的nginx插件。要使用 nginx 插件需要重新编译。
fastdfs-nginx-module_v1.16.tar.gz
安装 nginx 插件,并关联 fastDFS
1.解压插件压缩包
tar -zxf fastdfs-nginx-module_v1.16.tar.gz
2. 修改fastdfs-nginx-module/src/config 文件,把其中 local 去掉
3.把 fastdfs-nginx-module/src/mod_fastdfs.conf文件复制到/etc/fafs目录下。并编辑该文件
cp mod_fastdfs.conf /etc/fdfs/
修改
vim /etc/fdfs/mod_fastdfs.conf
更改 tracker_server 为自己的地址
url_have_group_name = true
store_path0=/usr/local/fastdfs/FastDFS/storage // 可以自定义
安装 nginx,并关联插件
4. 解压并进入 nginx
cd /usr/local/fastdfs/
// 解压
tar -zxf nginx-1.8.1.tar.gz
5. 编译安装
//先回到 nginx-1.8.1 目录
//再执行
./configure --add-module=/usr/local/fastdfs/fastdfs-nginx-module/src
//编译
make
//安装
make install
cd /usr/local/nginx/
//配置
vim nginx.conf
// 在 server 中添加
#access_log logs/host.access.log main;
location /group1/M00 {
ngx_fastdfs_module;
}
// 在 /nginx/sbin/ 中启动 nginx
./nginx
// 查看 nginx 是否启动
ps -aux | grep nginx
// 当发现有 master process 和 worker process 线程时 说明可以工作了
完成以上步骤,则打开之前的地址:
http://192.168.209.1/group1/M00/00/00/wKjRAWCZGm2AHT0fAAAADP8d-tA94_big.html
就可以正常访问了!
SpringBoot 整合 FastDFS
-
添加依赖
<dependency> <groupId>com.github.tobato</groupId> <artifactId>fastdfs-client</artifactId> <Version>1.26.1-RELEASE</Version> </dependency>
-
导入配置
@Import(FdfsClientConfig.class)
-
配置application.yml
fdfs: so-timeout: 1500 # 读的超时时间 connect-timeout: 600 # 连接的超时时间 pool: jmx-enabled: false # 内部池 thumb-image: # 缩略图(非必须) width: 100 height: 100 tracker-list: 192.168.209.1:22122
-
使用客户端操作类
@RunWith(SpringRunner.class) @SpringBootTest public class FastdfsApplicationTests { @Autowired private DefaultFastFileStorageClient fastFileStorageClient; @Test public void fileUpload() throws FileNotFoundException { File file = new File("g://image2.png"); String fileName = file.getName(); String extName = fileName.substring(fileName.lastIndexOf(".") + 1); FileInputStream inputStream = new FileInputStream(file); StorePath storePath = fastFileStorageClient.uploadFile(inputStream, file.length(), extName, null); System.out.println(storePath.getGroup()); System.out.println(storePath.getPath()); System.out.println(storePath.getFullPath()); } } // 执行以后在idea控制台的输出 group1 M00/00/00/wKjRAWCZUfqAbDCiAAAnkAfXguA484.png group1/M00/00/00/wKjRAWCZUfqAbDCiAAAnkAfXguA484.png // 在浏览器中访问 http://192.168.209.1/group1/M00/00/00/wKjRAWCZUfqAbDCiAAAnkAfXguA484.png
搞定!