FastDFS详解

作者: hadoop_a9bb | 来源:发表于2020-05-08 14:45 被阅读0次

    FastDFS 是一个开源的高性能分布式文件系统(DFS) ,主要解决海量数据存储问题,特别适合中小文件(建议范围:400K~500M)为载体的在线服务。

    主要功能:

    • 文件存储
    • 文件同步和文件访问
    • 高容量和负载均衡。

    FastDFS 系统有三个角色
    - 跟踪服务器 (Tracker Server):跟踪服务器 主要做调度工作,起到均衡作用;负责管理所有的storage server和group,每个storage在启动后会连接Tracker,告知自己所属group等信息,并保持周期性心跳。(存储文件的索引)
    - 存储服务器(Storage Server):存储服务器,主要提供容量和备份服务;以group为单位,每个group内可以有多台storage server 数据互为备份。
    - 客户端 (Client): 客户端,上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。

    FastDFS架构

    存储策略

    为了支持大容量,存储节点采用分组得方式。存储系统由多个分组组成。组与组之间得文件时相互独立的。 所有组得文件容量累加就是整个存储系统中得文件容量。一个组可以由一台或多台服务器组成。一个组内各个存储服务器中的文件都是相同的。组中多台服务器起到了冗余、备份和负载的作用。在组中增加服务器时,同步已有的文件,由系统自动完成。同步完成后,系统自动将新增服务器切换到线上提供服务。

    FastDFS的文件上传

    Storage Server会定期向Tracker Server发送自己的存储信息。当Tracker Server不只一个时,各个Tracker之间的关系时对等的,所以客户端上传时可以选择任意一个Tracker。

    当Tracker收到客户端上传文件的请求时,会为该文件分配一个可以存储文件的group,当选定group后就要决定给客户端分配group中哪一个storage server。当分配好storage server后,客户端向storage发送写文件请求,storage将会为文件分配一个数据存储目录,最后根据以上信息生成文件名。

    上传文件流程: 客户端先请求追踪服务器,追踪服务器分配位置,返回位置信息。客户端直接存储到追中服务器返回的位置。存放好后客户端的任务结束。存储服务器之间再发起同步动作。服务器之间同步数据。

    FastDFS的文件同步

    写文件时,客户端将文件写至group内一个storage server 写完文件后,会由后台线程将文件同步至同group内其他storage server。每个storage写文件后,同时会写一份binlog,binlog里不包含文件数据,只包含文件名等源信息。binlog用于后台同步,storage会记录向group内其他storage同步的进度,以便重启时能接上次进度同步。进度以时间戳的方式进行记录,所以最好能保证集群内所有server时钟同步。

    FastDFS的文件下载

    在上传成功后,会拿到一个storage生成的文件名,接下来客户端根据这个文件名即可访问到文件。

    下载文件流程:不通过追踪服务器,直接进入到某一个存储服务器来读取。使用nginx来读取存储服务器的本地文件系统,直接就返回给浏览器了。nginx读静态文件的效率非常高。 FastDFS插件 解决读取的服务器上没有指定文件的问题。插件会到追踪服务器查找对应文件的源信息。通过源信息到原始服务器上读取指定文件。

    删除文件流程: 同上传


    安装部署

    编译源码需要gcc、gcc-c++、perl,软件包解压需要 unzip

     yum -y install gcc gcc-c++ perl unzip
    

    下载libfastcommon环境包、下载FastDFS包、下载nginx源码包、下载 fastdfs-nginx-module插件包

            
    wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz
    wget https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz   
    wget -c https://nginx.org/download/nginx-1.12.1.tar.gz
    wget  https://github.com/happyfish100/fastdfs-nginx-module/archive/5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip
    
    1.安装libfastcommon libfastcommonm是从FastDFS和FastDHT中提取出来的公共C函数库,基础环境,安装即可。
    tar -zxvf V1.0.7.tar.gz
    cd libfastcommon-1.0.7
    ./make.sh
    ./make.sh install
    

    libfastcommon.so默认安装到了/usr/lib64/libfastcommon.so但是后序我们安装的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
    
    2.下载安装FastDFS

    解压并进入

    tar -zxvf V5.05.tar.gz
    cd fastdfs-5.05
    

    编译并安装

    ./make.sh
    ./make.sh install
    

    fastdfs的服务脚本在/etc/init.d/fdfs_storaged/etc/init.d/fdfs_tracker
    fastdfs的配置文件在/etc/fdfs/client.conf.sample/etc/fdfs/storage.conf.sample/etc/fdfs/tracker.conf.sample
    fastdfs的命令工具在/usr/bin目录下

    fdfs_appender_test
    fdfs_appender_test1
    fdfs_append_file
    fdfs_crc32
    fdfs_delete_file
    fdfs_download_file
    fdfs_file_info
    fdfs_monitor
    fdfs_storaged
    fdfs_test
    fdfs_test1
    fdfs_trackerd
    fdfs_upload_appender
    fdfs_upload_file
    stop.sh
    restart.sh
    

    FastDFS服务脚本设置的bin目录是/usr/local/bin,但实际命令却安装在/usr/bin下,所以这里还需要创建软链接。

    ln -s /usr/bin/fdfs_trackerd /usr/local/bin
    ln -s /usr/bin/fdfs_storaged /usr/local/bin
    ln -s /usr/bin/stop.sh /usr/local/bin
    ln -s /usr/bin/restart.sh /usr/local/bin
    
    3.配置FastDFS跟踪服务器(Tracker)

    进入/etc/fdfs,复制FastDFS跟踪器样例配置文件tracker.conf.sample 并重命名为tracker.conf

    cd /etc/fdfs
    cp tracker.conf.sample tracker.conf
    vim tracker.conf
    

    编辑tracker.conf,修改主要配置。

    #提供服务的端口
    port = 22122
    
    #Tracker 数据和日志目录地址(根目录必须存在,子目录会自动创建)
    base_path=/home/fastDFS/tracker
    
    #HTTP 服务端口
    http.server_post=8080
    

    启动tracker

    #启动
    service fdfs_trackerd start
    #关闭
    service fdfs_tracker stop
    

    初次启动成功后,会在/home/fastdfs/tracker(配置的base_path)下创建data、log两个目录。

    查看FastDFS Tracker是否已启动成功,22122端口被监听,则算是Tracker服务安装成功。

    netstat -unltp |grep fdfs
    
    tracker启动结果

    tracker服务启动成功后,会在base_path下创建data、logs两个目录。
    data目录下storage_groups.dat 存储分组信息。storage_servers.dat 存储服务器列表。
    log目录下 tracker.log tracker server日志文件。

    4.配置FastDFS存储(Storage)

    进入/etc/fdfs目录,复制FastDFS 存储器样例配置文件storage.conf.sample,并重命名为storage.conf

    cd /etc/fdfs
    cp storage.conf.sample storage.conf
    vim storage.conf
    

    编辑storage.conf 修改主要配置

    #指定此storage server 所在组
    group_name=group1
    
    #storage server
    port=23000
    
    #心跳间隔时间,单位为秒(这里指主动向tracker server发送心跳)
    heart_beat_interval=30
    
    #Storage数据和日志目录地址(根目录必须存在,子目录自动生成)
    base_path=/home/fastDFS/storage
    
    #存放文件时,storage server支持多个路径。这里配置存放文件的基路径数据,通常只配一个目录。
    store_path_count=1
    
    #逐一配置store_path_count个路径。索引号基于0。
    #如果不配置store_path0,那它就和base_path对应路径一样,此处直接注释掉。
    #store_path0=/home/fastdfs/file
    
    #tracker_server 的列表,会主动连接tracker_server,有多个tracker_server时,每个tracker server写一行
    tracker_server=39.97.179.107:22122
    
    ###访问端口   nginx需要监听的端口
    http.server_port=80
    

    启动storage

    #启动
    service fdfs_storaged start
    #停止
    service fdfs_storaged stop
    

    查看是否启动成功

    netstat -unltp |grep fdfs
    
    storage 启动状态

    查看Storage和Tracker 是否在通信/usr/bin/fdfs_moitor /etc/fdfs/storage.conf

    通信状态

    storage和tracker一样,启动成功后,在base_path下创建data、log目录。

    5.文件上传测试

    修改客户端配置文件 client.conf

    cd /etc/fdfs
    cp client.conf.sample client.conf
    vim client.conf
    

    修改如下配置,其他默认

    #client 的数据和日志目录
    base_path=/home/fastDFS/client
    
    #Tracker端口
    tracker_server=39.97.179.107:22122
    
    #tracker http服务端口
    http.tracker_server_port=8080
    

    上传测试

    /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /home/fastFDS/image-upload-test.jpg
    

    上传成功后返回文件ID号group1/M00/00/00/rBHknF601ZCAJ_dvAA74ZYcH48k.jpg
    返回的文件ID由group、存储目录、两级子目录fileid、文件后缀名拼接而成。

    文件ID结构
    6.安装nginx

    上面讲文件上传成功了,但我们无法访问下载。因此安装Nginx作为服务器以支持Http方式访问文件。同时,后面安装FastDFS的Nginx插件也需要Nginx环境。

    安装nginx所需环境

    yum install -y pcre pcre-devel zlib zlib-devel openssl openssl-devel
    

    安装nginx

    cd /home/fastDFS
    tar -zxvf nginx-1.12.1.tar.gz
    cd nginx-1.12.1
    ./configure
    make && make install
    

    启动nginx

    cd /usr/local/nginx/sbin
    ./nginx
    
    #其他命令
    ./nginx -s stop
    ./nginx -s quit
    ./nginx -s reload
    ./nginx -V
    

    修改nginx 配置文件

    vim /usr/localnginx/conf/nginx.conf
    
    添加如下行,将/group1/M00 映射到/home/fastDFS/storage/data
    location /group1/M00 {
        alias /home/fastDFS/storage/data
    }
    
    重新加载配置
    /usr/local/nginx/sbin/nginx -s reload
    
    nginx配置

    在浏览器直接访问即可获取文件。

    7.配置nginx的fastdfs插件

    fastdfs-nginx-module模块说明:
    FastDFS通过Tracker服务器,将文件放在storage服务器存储,但是同组存储服务器之间需要进行文件复制,有同步延迟。
    假设通过nginx取文件,恰巧落在了未同步完成的服务器,就会出现文件无法访问的情况。
    而fastdfs-nginx-module可以重定向文件链接到源服务器取文件。避免复制延迟导致的文件无法访问。

    解压fastdfs-nginx-module

    unzip 5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip 
    
    #重命名
    mv fastdfs-nginx-module-5e5f3566bbfa57418b5506aaefbe107a42c9fcb1 fastdfs-nginx-module
    

    在nginx中添加插件

    #先停掉nginx服务
    /usr/local/nginx/sbin/nginx -s stop
    
    #进入nginx目录
    cd /home/fastDFS/nginx-1.12.1
    
    #添加模块
    ./configure --add-module=../fastdfs-nginx-module/src
    
    #重新编译安装
    make && make install
    
    

    查看nginx版本信息

    /usr/local/nginx/sbin/nginx -V
    
    添加模块成功提示

    复制fastdfs-nginx-module源码中的配置文件到/etc/fdfs目录,并修改

     cp mod_fastdfs.conf /etc/fdfs/
    

    修改配置文件

    #连接超时时间
    connect_timeout= 30
    
    #tracker server信息
    tracker_server=39.97.179.107:22122
    
    StorageServer默认端口
    storage_server_port=23000
    
    如果文件ID的uri中包含/group** ,则要设置为true
    url_have_group_name=true
    
    #storage 配置的store_path路径,必须要和storage.conf中一致,统一注释掉
    #store_path0 = /home/fastDFS/storage
    

    复制FastDFS的部分配置文件到/etc/fdfs 目录

    cd /home/fastDFS/fastdfs-5.05/conf
    cp http.conf mime.types /etc/fdfs/
    

    修改nginx配置,在之前加的group1/M00映射内,加入插件配置


    ngx_fastdfs_module

    注意:server的listen端口要与storage.conf中配置的http.server_port一致。

    启动nginx,打印出插件pid就已经成功


    操作结果

    集群搭建

    FastDFS集群搭建非常简单,只需要在storage端配置文件里,将tracker的信息对应配置即可。

    集群的配置

    首先要有两套刚刚搭建的单机环境。修改Storage.conf和mod_fastdfs.conf 将其中tracker_server参数配置成两台机器


    集群配置

    然后再client.conf中 tracker_server设置为两个tracker
    然后进一步修改不同storage的group信息,给storage分组。重启所有服务集群即搭建完毕。

    相关文章

      网友评论

        本文标题:FastDFS详解

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