1. 什么是FastDFS
1.1. 介绍
FastDFS是用c语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
1.2. 系统构架
FastDFS架构包括 Tracker server和Storage server。客户端请求Tracker server进行文件上传、下载,通过Tracker server调度最终由Storage server完成文件上传和下载。
Tracker server作用是负载均衡和调度,通过Tracker server在文件上传时可以根据一些策略找到Storage server提供文件上传服务。可以将tracker称为追踪服务器或调度服务器。
Storage server作用是文件存储,客户端上传的文件最终存储在Storage服务器上,Storage server没有实现自己的文件系统而是利用操作系统 的文件系统来管理文件。可以将storage称为存储服务器。
2. FastDFS服务器搭建
FastDFS服务器搭建主要分为Tracker搭建和Storage搭建,而这两个部分的搭建都需要安装相应的库和运行环境,具体配置步骤如下:
第一步:安装gcc环境,在Linux系统中输入命令:
yum -y install gcc-c++
第二步:安装libevent依赖库,输入命令:
yum -y install libevent
第三步:下载libfastcommon依赖库压缩包,并解压,进入目录,依次执行./make.sh和./make.sh install命令进行安装。
第四步:下载FastDFS压缩包,并解压,进入目录,依次执行./make.sh和./make.sh install命令进行安装。安装成功后,会自动在/etc/目录下面创建一个fdfs文件夹,里面存放的是关于FastDFS的相关配置文件。
第五步:关闭防火墙,或者添加端口访问配置。
至此,搭建的准备工作已经全部完成,接下来进行Tracker和Storage的相关配置。
2.1. 跟踪器Tracker配置
第一步:创建一个Tracker自己的文件夹,路径自己选择,如:/usr/local/fastdfs/tracker
第二步:进入/etc/fdfs目录,复制Tracker配置文件tracker.conf.sample,并重命名为 tracker.conf。
第三步:修改tracker.conf配置文件,修改base_path为第一步创建的文件夹路径,为了端口不被占用,相关端口可自行修改。
第四步:启动Tracker,初次启动成功会在base_path配置的路径下创建data和logs两个目录。
Tracker启动命令:service fdfs_trackerd start
Tracker关闭命令:service fdfs_trackerd stop
注:如果出现启动失败,依次执行下列语句,重新设置软链接
ldd /usr/bin/fdfs_trackerd (ldd查看当前依赖项)
ll /usr/local/lib/libfastcommon.so
ll /usr/lib/libfastcommon.so
rm -rf /usr/lib/libfastcommon.so(删除之前的链接)
ldd /usr/bin/fdfs_trackerd
/sbin/ldconfig(使链接生效)
第五步:设置Tracker开机自启(可以不设置,进行手动启动),输入命令:
chkconfig fdfs_trackerd on
2.2. 储存器Storage配置
第一步:创建一个Storage自己的文件夹,并在此文件夹下创建两个文件夹base和path0,路径可自己选择,如:/usr/local/fastdfs/storage
第二步:进入/etc/fdfs目录,复制Storage配置文件storage.conf.sample,并重命名为 storage.conf。
第三步:修改tracker.conf配置文件,修改base_path为第一步创建的文件夹base全路径,修改store_path0为第一步创建的夹path0全路径,修改tracker_server为本机地址和2.1章节中设置的端口,如果有多个Tracker,可自行添加,为了端口不被占用,相关端口可自行修改。
第四步:启动Storage,初次启动成功会在base_path配置的路径下创建data和logs两个目录。
Storage启动命令:service fdfs_storaged start
Storage关闭命令:service fdfs_storaged stop
第五步:设置Storage开机自启(可以不设置,进行手动启动),输入命令:
chkconfig fdfs_ storaged on
2.3. 检测Tracker与Storage配置
第一步:输入netstat -ntpl指令,查看Tracker和Storage是否启动成功。
第二步:使用fdfs_monitor工具,检测Storage和Tracker是否在通信。输入命令/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
第三步:查看2.2章节中创建的path0目录下的data目录下,是否为下图所示:
若以上三步,均没有问题,则表示Tracker和Storage配置成功。
2.4. 测试上传图片
第一步:创建一个Client自己的文件夹,路径可自己选择,如:/usr/local/fastdfs/client
第二步:进入/etc/fdfs目录,复制Client配置文件client.conf.sample,并重命名为 client.conf。
第三步:修改client.conf配置文件,将base_path指定为第一步创建的文件夹路径,将tracker_server设置为2.1章节设置的ip和端口。
第四步:使用命令:/usr/bin/fdfs_upload_file /etc/fdfs/client.conf上传指定路径下的图片或者其他文件,上传成功后,将返回文件ID号。返回的文件ID由group、存储目录、两级子目录、fileid、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成。
至此,只能上传文件,但还不能下载或访问文件。
3. 安装配置Nginx提供Http访问
通过第二章节的所有步骤,已完成FastDFS服务器的搭建,但是只能成功上传文件,不能下载,因此需要安装Nginx作为服务器以支持Http方式访问文件,安装Nginx有两种方案,第一种通过Yum安装,操作简单,不易出错;第二种通过源码包安装,操作繁琐,但服务性能较好。
3.1. 安装Nginx
3.1.1 通过Yum安装
第一步:输入指令yum -y install nginx 进行安装(其他指令yum remove nginx进行卸载),安装完成后Nginx的配置文件在/etc/nginx目录下。
第二步:配置Nginx服务,相关配置项指令如下:
service nginx start # 启动nginx服务
service nginx stop # 停止nginx服务
service nginx restart # 重启nginx服务
service nginx reload # 重新加载配置,一般是在修改过nginx配置
chkconfig nginx on # 设置开机启动
3.1.2 通过源码包安装
通过源码包安装Nginx需要相关编译环境,具体操作如下:
第一步:输入命令:yum install -y pcre pcre-devel,安装pcre pcre-devel。
第二步:输入命令:yum install -y zlib zlib-devel,安装zlib
第三步:输入命令:yum install -y openssl openssl-devel,安装openssl
第四步:下载Nginx源码包,并解压到自己创建目录。
第五步:进入到解压目录,依次输入指令./configure、make、make install,进行安装,安装完成后Nginx的相关文件在/usr/local/nginx目录下。
第六步:配置Nginx服务,通过绝对路径的方式相关配置项指令如下:
/usr/local/nginx/sbin/nginx # 启动服务
/usr/local/nginx/sbin/nginx -s reload # 重新加载服务
/usr/local/nginx/sbin/nginx -s stop # 停止服务
第七步:设置开机启动,修改/etc/rc.local文件,添加一行/usr/local/nginx/sbin/nginx,保持退出,执行命令:chmod 755 rc.local
第八步:查看Nginx版本及模块,出现下图所示,表示安装成功。
3.2. 配置http访问文件
第一步:修改Nginx配置文件/usr/local/nginx/conf/nginx.conf,注意alias对应路径为2.2.章节中设置的store_path0路径,参考如下:
第二步:输入地址,进行访问。地址格式如下:
IP+8081(上面设置的端口)+/group1/M00/00/00/wKgZgl5pEK2APKitAACfRfNcjZ0906.jpg
4. FastDFS集群配置Nginx模块
此章节主要是为了FastDFS集群做配置。FastDFS 通过 Tracker 服务器,将文件放在 Storage 服务器存储,但是同组存储服务器之间需要进行文件复制,有同步延迟的问题。如果用户上传成功后,用集群内其他的ip进行访问,有可能出现访问出错的情况。
为解决此问题,需要安装配置fastdfs-nginx-module模块,而 fastdfs-nginx-module 可以重定向文件链接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。具体步骤参考如下:
第一步:下载fastdfs-nginx-module压缩包,并解压
第二步:修改解压包目录/fastdfs-nginx-module-1.22/src/config文件,修改ngx_module_incs和CORE_INCS两项参数如下:
第三步:配置第3章节安装的Nginx,添加fastdfs-nginx-module 模块,依次执行命令:./configure --add-module=/usr/local/src/fastdfs-nginx-module-1.22/src、make、make install
第四步:验证模块是否添加成功。输入指令:/usr/local/nginx/sbin/nginx -V出现如下图所示,表示成功。
第五步:复制fastdfs-nginx-module-1.22/src/ mod_fastdfs.conf文件到/etc/fdfs/目录下,并修改配置。如果有多个Tracker,请添加多个tracker_server服务器地址,如果有多个Storage,请合理化分组,并修改相关配置。
第六步:复制FastDFS安装包下的三个文件复制到/etc/fdfs/目录下
第七步:修改目录/usr/local/nginx/conf/nginx.conf文件,更改Server配置,注意listen端口要与storage.conf配置文件中http.server_port端口一致。
第八步:配置完成,重启Nginx,进行访问。
5. Java配置FastDFS客户端
5.1. Maven工程中添加依赖
在Maven工程的pom.xml文件中添加FastDFS客户端依赖:
net.oschina.zcx7878
fastdfs-client-java
1.27.0.0
5.2. 上传文件测试
第一步:创建一个配置文件,名字路径自拟,内容为连接tracker的服务器地址,如:
tracker_server=192.168.25.130:22122
第二步: 初始化加载配置文件
第三步:创建trackerClient对象
第四步:通过trackerClient获取trackerServer对象
第五步:创建storageServer 赋值为null
第六步:创建storageClient1 需要两个参数:trackserver storageServer
第七步:调用上传的方法
第八步:打印文件的地址 ,测试访问
@Test
public void testupload()throws Exception{
//1.创建一个配置文件 配置连接tracker的服务器地址
//2.初始化加载配置文件
ClientGlobal.init("D:\\JavaProjects\\MavenTest\\src\\main\\resources\\resource\\fastdfs.properties");
//3.创建trackerClient对象
TrackerClient client = new TrackerClient();
//4.通过trackerClient获取trackerServer对象
TrackerServer trackerServer = client.getConnection();
//5.创建storegeServer 赋值为null
StorageServer storageServer = null;
//6.创建storgeClient 需要两个参数:trackserver storageServer
StorageClient1 storageClient1 = new StorageClient1(trackerServer, storageServer);
//7.调用上传的方法
//第一个参数:本地文件的路径
//第二个参数:文件的扩展名 不带"."
//第三个参数:元数据
String upload_file = storageClient1.upload_file1("E:/facePhoto.jpg", "jpg", null);
//8.打印图片的地址 ,测试访问
System.out.println(upload_file);
}
5.3. 删除文件测试
前六步与上传文件步骤一致。
第七步:调用删除文件的方法,返回为int类型
第八步:判断返回的值,如果等于0,则表示删除成功,否在删除失败。
@Test
public void testdelete()throws Exception{
//1.创建一个配置文件 配置连接tracker的服务器地址
//2.初始化加载配置文件
ClientGlobal.init("D:\\JavaProjects\\MavenTest\\src\\main\\resources\\resource\\fastdfs.properties");
//3.创建trackerClient对象
TrackerClient client = new TrackerClient();
//4.通过trackerClient获取trackerServer对象
TrackerServer trackerServer = client.getConnection();
//5.创建storegeServer 赋值为null
StorageServer storageServer = null;
//6.创建storgeClient1 需要两个参数:trackserver storageServer
StorageClient1 storageClient1 = new StorageClient1(trackerServer, storageServer);
//7.调用删除图片的方法
int i = storageClient1.delete_file("group1", "M00/00/00/wKgZgl5qUMiADYNmAACfRfNcjZ0402.jpg");
System.out.println( i==0 ? "删除成功" : "删除失败:"+i);
}
文档下载地址:
https://wenku.baidu.com/view/9490503d4631b90d6c85ec3a87c24028915f85e6