美文网首页
FastDFS简单配置应用

FastDFS简单配置应用

作者: 天马行空_9f6e | 来源:发表于2021-03-10 15:17 被阅读0次

    ## 单机安装

    准备linux服务器或虚拟机

    Tracker 和 Storage 安装在一台机器上

    ### 版本

    FastDFS 5.08版本

    ### 安装FastDFS依赖

    FastDFS是C语言开发的应用。安装必须使用make、cmake和gcc编译器。

    yum install -y make cmake gcc gcc-c++

    ### 安装FastDFS核心库

    libfastcommon是从FastDFS 和FastDHT 中提取出来的公共C函数库

    下载地址:https://download.csdn.net/download/dante1987/15683639

    #### 上传文件后解压缩

    unzip libfastcommon-master.zip -d /usr/local/fastdfs

    #### 编译安装

    libfastmon没有提供make命令安装文件。使用的是shell脚本执行编译和安装。

    shell脚本为make.sh

    编译

    ./make.sh

    安装

    ./make.sh install

    有固定的默认安装位置。在/usr/lib64和/usr/include/fastcommon两个目录中。

    #### 创建软连接

    因为 FastDFS 主程序设置的 lib 目录是/usr/local/lib,所以需要创建软链接

    ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so

    ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so

    ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so

    ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so

    ### FastDFS主程序安装

    #### 上传并解压缩

    tar -zxf FastDFS_v5.08.tar.gz -C /usr/local/fastdfs

    下载地址:https://download.csdn.net/download/dante1987/15683639

    #### 编译安装

    ./make.sh

    ./make.sh install

    安装后,FastDFS主程序所在位置:

    /usr/bin - 可执行文件所在位置。

    /etc/fdfs - 配置文件所在位置。

    /usr/lib64 - 主程序代码所在位置

    /usr/include/fastdfs - 包含的一些插件组所在位置

    ### 服务配置

    #### 程序脚本

    在/etc/init.d/目录中,脚本文件是 **fdfs-storaged**和**fdfs-trackerd**

    #### 配置文件

    配置文件在```/etc/fdfs/```目录中

    - tracker.conf.sample - 跟踪器服务配置文件模板

    - storage.conf.sample - 存储服务器配置文件模板

    - client.conf.sample - FastDFS提供的命令行客户端配置文件模板。可以通过命令行测试FastDFS有效性。

    ### Tracker 服务

    #### 修改配置文件

    复制一份模板配置文件

    cd /etc/fdfs

    cp tracker.conf.sample tracker.conf

    打开 tracker.conf

    修改 base_path 路径,base_path FastDFSTracker启动后使用的根目录,用来存放Tracker data和logs。

    base_path=/home/yuqing/fastdfs -> base_path=/var/data/fastdfs-tracker(自定义目录)

    配置中的路径需要先创建好才能启动服务

    mkdir -p /var/data/fastdfs-tracker

    #### 启动Tracker

    /etc/init.d/fdfs_trackerd start

    启动成功后,配置文件中base_path指向的目录中出现FastDFS服务相关数据目录(data目录、logs目录)

    ####  查看服务状态

    ps -ef | grep fdfs

    #### 停止服务

    /etc/init.d/fdfs_trackerd stop

    #### 重启服务

    /etc/init.d/fdfs_trackerd restart

    ### 启动 Storage

    #### 配置文件

    cd /etc/fdfs

    cp storage.conf.sample storage.conf

    mkdir -p /var/data/fastdfs-storage/base

    mkdir -p /var/data/fastdfs-storage/store

    base_path=/home/yuqing/fastdfs -> base_path=/var/data/fastdfs-storage/base(自定义目录)

    store_path0=/home/yuqing/fastdfs -> store_path0=/var/data/fastdfs-storage/store(自定义目录)

    tracker_server=192.168.150.11:22122 -> tracker_server=tracker服务IP:22122

    - base_path - 基础路径。用于保存storage server基础数据内容和日志内容的目录。

    - store_path0 - 存储路径。是用于保存FastDFS中存储文件的目录,就是要创建256*256个子目录的位置。base_path和store_path0可以使用同一个目录。

    - tracker_server - 跟踪服务器位置。就是跟踪服务器的ip和端口。

    #### 启动服务

    要求tracker服务必须已启动

    /etc/init.d/fdfs_storaged start

    启动成功后,配置文件中base_path指向的目录中出现FastDFS服务相关数据目录(data目录、logs目录)

    配置文件中的store_path0指向的目录中同样出现FastDFS存储相关数据录(data目录)

    其中$store_path0/data/目录中默认创建若干子孙目录(两级目录层级总计256*256个目录),是用于存储具体文件数据的。

    Storage服务器启动比较慢,因为第一次启动的时候,需要创建256*256个目录。

    #### 查看服务状态

    /etc/init.d/fdfs_storaged status

    #### 停止服务

    /etc/init.d/fdfs_storaged stop

    #### 重启服务

    /etc/init.d/fdfs_storaged restart

    ### Client

    #### 修改配置文件

    cd /etc/fdfs

    cp client.conf.sample client.conf

    client.conf配置文件中主要描述客户端的行为,需要进行下述修改:

    vi /etc/fdfs/client.conf

    base_path=/home/yuqing/fastdfs -> base_path=/fastdfs/client (自定义目录)

    tracker_server=192.168.150.11:22122 -> tracker_server=tracker服务IP:22122

    base_path - 就是客户端命令行执行过程时临时数据存储位置。

    创建自定义目录

    mkdir -p /fastdfs/client

    #### 上传文件功能测试

    /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/install.log(这个命令是把install.log文件进行上传)

    除了用fdfs_upload_file也可以用fdfs_test,client.conf后面要跟上操作命令upload

    /usr/bin/fdfs_test  /etc/fdfs/client.conf  upload  /root/install.log

    上传结束后,返回group1/M00/00/00/xxxxxxxxxx.xxx,检查storage服务结点中的$store_path0/data/00/00/目录中是否有上传的文件(一般情况上传的文件按顺序保存在$store_path0/data/00/00/目录中,不能完全保证)。

    上传文件结果:group1/M00/00/00/wKiWDV0xfqWAFe1OAAAib-i5DLU637.log

    - 组名:**group1**文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保存。

    -  虚拟磁盘路径:**M00**  storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。

    - 数据两级目录:**/00/00** storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。

    - 文件名:**wKiWDV0xfqWAFe1OAAAib-i5DLU637.log**

    #### 删除文件

    /usr/bin/fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/wKiWDV0xfqWAFe1OAAAib-i5DLU637.log

    ### Nginx组件

    如果FastDFS中保存的是图片信息。希望在WEB应用中可以直接访问FastDFS中的图片进行显示。如果操作?

    安装Nginx是为了WEB应用中可以使用HTTP协议直接访问Storage服务中存储的文件。在storage结点所在服务器安装Nginx组件。

    需要安装两部分内容。

    Nginx应用,在安装nginx应用的时候,同时要在nginx中增加一个FastDFS的组件。

    #### fastdfs-nginx-module模块

    上传并解压

    tar -zxf fastdfs-nginx-module_v1.16.tar.gz

    下载地址:https://download.csdn.net/download/dante1987/15683639

    #### 修改配置

    vi /usr/local/fastdfs/fastdfs-nginx-module/src/config

    修改下面内容

    CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

    #### 编译安装Nginx

    ./configure --prefix=/usr/local/tengine --add-module=/usr/local/fastdfs/fastdfs-nginx-module/src/

    make && make install

    #### 配置fastdfs-nginx-module

    ##### 拷贝配置文件

    cp /usr/local/fastdfs/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/

    ##### 修改配置文件 mod_fastdfs.conf

    tracker_server=192.168.0.116:22122

    url_have_group_name = true

    store_path0=/var/data/fastdfs-storage/store

    ##### 拷贝http服务需要的配置

    复制FastDFS安装包中的两个配置文件(http.conf和mime.types)到/etc/fdfs目录中

    #### 创建网络访问存储服务的软连接

    在上传文件到FastDFS后,FastDFS会返回group1/M00/00/00/xxxxxxxxxx.xxx。其中group1是卷名,在mod_fastdfs.conf配置文件中已配置了url_have_group_name,以保证URL解析正确。

    而其中的M00是FastDFS保存数据时使用的虚拟目录,需要将这个虚拟目录定位到真实数据目录上。

    ln -s /var/data/fastdfs-storage/store/data/  /var/data/fastdfs-storage/store/data/M00

    #### 修改nginx配置文件

        location ~ /group([0-9])/M00 {

            add_header Content-Disposition "attachment;filename=$arg_attname";

            ngx_fastdfs_module;

        }

    ## JavaApi   https://github.com/tobato/FastDFS_Client

    配置yaml

    fdfs:

      so-timeout: 1501

      connect-timeout: 601

      thumb-image:            #缩略图生成参数

        width: 150

        height: 150

      tracker-list:            #TrackerList参数,支持多个

        - 192.168.0.116:22122

    Maven配置导入

    <dependency>

    <groupId>com.github.tobato</groupId>

    <artifactId>fastdfs-client</artifactId>

    <version>1.27.2</version>

    </dependency>

    // 文件上传写法

    @Autowired

    private FastFileStorageClient fc;

    @RequestMapping("/simpleFile/upload")

    public RespStat SingleFileUpLoad(@RequestParam("files") MultipartFile files, Model model,

    HttpServletRequest request) {

    // 元数据

    Set<MetaData> metaDataSet = new HashSet<MetaData>();

    metaDataSet.add(new MetaData("Author", "BruceWong"));

    metaDataSet.add(new MetaData("CreateDate", "2021-03-12"));

    RespStat rs = new RespStat();

    try {

    //通用文件上传写法

    // StorePath uploadFile = fc.uploadFile(files.getInputStream(), files.getSize(), FilenameUtils.getExtension(files.getOriginalFilename()), metaDataSet);

    //如果是图片建议用下面方法上传,可以生成缩略图

    StorePath uploadFile = fc.uploadImageAndCrtThumbImage(files.getInputStream(),files.getSize(),FilenameUtils.getExtension(files.getOriginalFilename()), metaDataSet);

    rs.setCode(200);

    rs.setMsg("上传成功");

    rs.setData(File.separator + uploadFile.getFullPath());

    } catch (FileNotFoundException e) {

    e.printStackTrace();

    } catch (IOException e) {

    e.printStackTrace();

    }

    return rs;

    }

    **返回结果带group**

    uploadFile.getFullPath() : group1/M00/00/00/wKgAdGBMa4KAHQ2iAAWZtElgaoA513.jpg

    **不带group**

    uploadFile.getPath() : M00/00/00/wKgAdGBMa4KAHQ2iAAWZtElgaoA513.jpg

    ### 下载文件

    @RequestMapping("/down")

    @ResponseBody

    public ResponseEntity<byte[]> down(HttpServletResponse resp) {

    DownloadByteArray cb = new DownloadByteArray();

    HttpHeaders headers = new HttpHeaders();

    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);

    headers.setContentDispositionFormData("attachment", "wonderwoman.jpg");

    byte[] bs = fc.downloadFile("group1", "M00/00/00/wKgAdGBMa4KAHQ2iAAWZtElgaoA513.jpg", cb);

    return new ResponseEntity<>(bs,headers,HttpStatus.OK);

    }


    ==============================异常处理============================

    centos安装fastDFS时,有如下错误,导致etc/fdfs/没有storage.conf.sample 文件:

    在函数‘main’中:

    /home/fastdfs/fastdfs-master/storage/fdfs_storaged.c:130:对‘g_exe_name’未定义的引用

    storage_dump.o:在函数‘fdfs_dump_global_vars’中:

    /home/fastdfs/fastdfs-master/storage/storage_dump.c:36:对‘g_exe_name’未定义的引用

    collect2: 错误:ld 返回 1

    在这里插入图片描述

    解决办法:

    由于两个文件都是C语言编写,需要先编译在安装。这就需要系统中需要提前安装很多运行环境,代码如下:

    yum -y install zlib zlib-devel pcre pcre-devel gcc gcc-c++ openssl openssl-devel libevent libevent-devel perl unzip net-tools wget

    若未安装以上运行环境,就运行./make.sh。需要清除编译,安装好以上运行环境,重新运行即可。

    清楚编译代码: ./make.sh clean

    相关文章

      网友评论

          本文标题:FastDFS简单配置应用

          本文链接:https://www.haomeiwen.com/subject/rkuwqltx.html