分布式文件系统之FastDFS

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称为存储服务器。

image.png

2. FastDFS服务器搭建

FastDFS服务器搭建主要分为Tracker搭建和Storage搭建,而这两个部分的搭建都需要安装相应的库和运行环境,具体配置步骤如下:

第一步:安装gcc环境,在Linux系统中输入命令:

yum -y install gcc-c++

第二步:安装libevent依赖库,输入命令:

yum -y install libevent

第三步:下载libfastcommon依赖库压缩包,并解压,进入目录,依次执行./make.sh和./make.sh install命令进行安装。

image.png

第四步:下载FastDFS压缩包,并解压,进入目录,依次执行./make.sh和./make.sh install命令进行安装。安装成功后,会自动在/etc/目录下面创建一个fdfs文件夹,里面存放的是关于FastDFS的相关配置文件。

image.png

第五步:关闭防火墙,或者添加端口访问配置。

至此,搭建的准备工作已经全部完成,接下来进行Tracker和Storage的相关配置。

2.1. 跟踪器Tracker配置

第一步:创建一个Tracker自己的文件夹,路径自己选择,如:/usr/local/fastdfs/tracker

第二步:进入/etc/fdfs目录,复制Tracker配置文件tracker.conf.sample,并重命名为 tracker.conf。

image.png

第三步:修改tracker.conf配置文件,修改base_path为第一步创建的文件夹路径,为了端口不被占用,相关端口可自行修改。

image.png

第四步:启动Tracker,初次启动成功会在base_path配置的路径下创建data和logs两个目录。

Tracker启动命令:service fdfs_trackerd start
Tracker关闭命令:service fdfs_trackerd stop
image.png

注:如果出现启动失败,依次执行下列语句,重新设置软链接

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

image.png

第二步:进入/etc/fdfs目录,复制Storage配置文件storage.conf.sample,并重命名为 storage.conf。

image.png

第三步:修改tracker.conf配置文件,修改base_path为第一步创建的文件夹base全路径,修改store_path0为第一步创建的夹path0全路径,修改tracker_server为本机地址和2.1章节中设置的端口,如果有多个Tracker,可自行添加,为了端口不被占用,相关端口可自行修改。

image.png
image.png
image.png

第四步:启动Storage,初次启动成功会在base_path配置的路径下创建data和logs两个目录。

Storage启动命令:service fdfs_storaged start
Storage关闭命令:service fdfs_storaged stop
image.png

第五步:设置Storage开机自启(可以不设置,进行手动启动),输入命令:

chkconfig fdfs_ storaged on

2.3. 检测Tracker与Storage配置

第一步:输入netstat -ntpl指令,查看Tracker和Storage是否启动成功。

image.png

第二步:使用fdfs_monitor工具,检测Storage和Tracker是否在通信。输入命令/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

image.png

第三步:查看2.2章节中创建的path0目录下的data目录下,是否为下图所示:

image.png

若以上三步,均没有问题,则表示Tracker和Storage配置成功。

2.4. 测试上传图片

第一步:创建一个Client自己的文件夹,路径可自己选择,如:/usr/local/fastdfs/client

第二步:进入/etc/fdfs目录,复制Client配置文件client.conf.sample,并重命名为 client.conf。

image.png

第三步:修改client.conf配置文件,将base_path指定为第一步创建的文件夹路径,将tracker_server设置为2.1章节设置的ip和端口。

image.png

第四步:使用命令:/usr/bin/fdfs_upload_file /etc/fdfs/client.conf上传指定路径下的图片或者其他文件,上传成功后,将返回文件ID号。返回的文件ID由group、存储目录、两级子目录、fileid、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成。

image.png

至此,只能上传文件,但还不能下载或访问文件。

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目录下。

image.png

第六步:配置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

image.png

第八步:查看Nginx版本及模块,出现下图所示,表示安装成功。

image.png

3.2. 配置http访问文件

第一步:修改Nginx配置文件/usr/local/nginx/conf/nginx.conf,注意alias对应路径为2.2.章节中设置的store_path0路径,参考如下:

image.png

第二步:输入地址,进行访问。地址格式如下:

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两项参数如下:

2222.png

第三步:配置第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出现如下图所示,表示成功。

2222.png

第五步:复制fastdfs-nginx-module-1.22/src/ mod_fastdfs.conf文件到/etc/fdfs/目录下,并修改配置。如果有多个Tracker,请添加多个tracker_server服务器地址,如果有多个Storage,请合理化分组,并修改相关配置。

image.png
image.png
image.png

第六步:复制FastDFS安装包下的三个文件复制到/etc/fdfs/目录下

2222.png

第七步:修改目录/usr/local/nginx/conf/nginx.conf文件,更改Server配置,注意listen端口要与storage.conf配置文件中http.server_port端口一致。

image.png

第八步:配置完成,重启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

你可能感兴趣的:(分布式文件系统之FastDFS)