FastDFS


FastDFS

   FastDFS是由國人余慶所開發:項目GitHub
    FastDFS是一個輕量級的開源分布式文件系統,主要解決了大容量的文件存儲和高並發訪問的問題,文件存取時實現了負載均衡。
    FastDFS是一款類Google FS的開源分布式文件系統,它用純C語言實現,支持Linux、FreeBSD、AIX等UNIX系統。
    FastDFS只能通過專有API對文件進行存取訪問,不支持POSIX接口方式,不能mount使用。
    准確地講,Google FS以及FastDFS、mogileFS、 HDFS、TFS等類Google FS都不是系統級的分布式文件系統,而是應用級的分布式文件存儲服務。

 

FastDFS的特性

    1》分組存儲,靈活簡潔、對等結構,不存在單點
    2》文件ID由FastDFS生成,作為文件訪問憑證,FastDFS不需要傳統的name server
    3》和流行的web server無縫銜接,FastDFS已提供apache和nginx擴展模塊
    4》大、中、小文件均可以很好支持,支持海量小文件存儲
    5》 支持多塊磁盤,支持單盤數據恢復
    6》 支持相同文件內容只保存一份,節省存儲空間
    7》 存儲服務器上可以保存文件附加屬性
    8》 下載文件支持多線程方式,支持斷點續傳

FastDFS架構圖

FastDFS架構解讀
        只有兩個角色,tracker server和storage server,不需要存儲文件索引信息
        所有服務器都是對等的,不存在Master-Slave關系
        存儲服務器采用分組方式,同組內存儲服務器上的文件完全相同(RAID 1)
        不同組的storage server之間不會相互通信
        由storage server主動向tracker server報告狀態信息,tracker server之間通常不會相互通信

 

系統架構-上傳文件流程圖

    1》client詢問tracker上傳到的storage;
    2》tracker返回一台可用的storage;
    3》client直接和storage通信完成文件上傳,storage返回文件ID。

系統架構-下載文件流程圖

    1》client詢問tracker下載文件的storage,參數為文件ID(組名和文件名);
    2》tracker返回一台可用的storage;
    3》client直接和storage通信完成文件下載。

Fast同步機制

    采用binlog文件記錄更新操作,根據binlog進行文件同步
    同一組內的storage server之間是對等的,文件上傳、刪除等操作可以在任意一台storage server上進行;
    文件同步只在同組內的storage server之間進行,采用push方式,即源服務器同步給目標服務器;
    源頭數據才需要同步,備份數據不需要再次同步,否則就構成環路了;
    上述第二條規則有個例外,就是新增加一台storage server時,由已有的一台storage server將已有的所有數據(包括源頭數據和備份數據)同步給該新增服務器。

 

FastDFS用戶請求過程

FastDFS核心組件

    Tracker:
        調度器,負責維持集群的信息,例如各group及其內部的storage node,這些信息也是storage node報告所生成,每個storagenode會周期性向tracker發心跳信息;
    storage server:
        以group為單位進行組織,任何一個storage server都應該屬於某個group,一個group應該包含多個storage server,在同一個group內部,各storage server的數據互相冗余;

 

FastDFS運行機制

    如何在組中挑選storage server:
        1》rr;
        2》以ip為次序,找第一個,即IP地址較小者;
        3》以優先級為序,找第一個;
    如何選擇磁盤(存儲路徑):
        1》rr;
        2》剩余可用空間大者優先;
    生成FID:
        由源頭storage server ip、創建時的時間戳、大小、文件的校驗碼和一個隨機數進行hash計算后生成;
        最后基於base64進行文本編碼,轉換為可打印字符;
        groupID/MID/H1ID/H2ID/file_name
        groupID:組編號
        MID:存儲路徑(存儲設備)編號
        H1ID/H2ID:目錄分層
        file_name:文件名,不同於用戶上傳時使用文件名,而是由服務器生成hash文件名;
        服務器IP、文件創建時的時間戳、文件大小、文件名和擴展名;
    文件同步:
        每個storage server在文件存儲完成后,會將其信息存於binlog, binlog不包含數據,僅包含文件名等元數據信息,binlog可用於同步;

 

FastDFS配置修改

    Tracker:
        編輯tracker server配置文件tracker.conf,需要修改內容如下:
        disabled=false(默認為false,表示是否無效)
        port=22122(默認為22122)
        base_path=/data/fastdfs/tracker
    storage server:
        disabled=false(默認為false,表示是否無效)
        port=23000(默認為23000)
        base_path=/data/fastdfs/storage
        tracker_server=172.18.10.232:22122
        store_path0=/data/fastdfs/storage
        http.server_port=8888(默認為8888,nginx中配置的監聽端口那之一致)

 

FastDFS常用命令

    1》查看存儲節點狀態
        # fdfs_monitor /etc/fdfs/client.conf
    2》上傳測試
        fdfs_test <config_file> upload <local_filename> [FILE | BUFF | CALLBACK]
    3》文件上傳
        fdfs_upload_file /etc/fdfs/client.conf /root/solo-2.2.0.war
    4》文件查看
        fdfs_file_info /etc/fdfs/client.conf group1/M00/00/00/rBH7vFoax3KANb_FAUlr7-L-yRM9.0.war
    5》文件下載
        fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/rBH7vFoax3KANb_FAUlr7-L-yRM9.0.war

 

FastDFS實現nginx代理

    1》安裝nginx以及對應模塊
    2》修改nginx的location配置,映射路徑和啟動模塊
        location /group1/M00 {
            root /data/fdfs/store/data;
            ngx_fastdfs_module;
        }
    3》修改對應fastdfs模塊
        url_have_group_name = true
        tracker_server=172.17.252.234:22122

轉自:https://www.cnblogs.com/shenxm/p/8459292.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM