016-docker-fastdfs


0、docker安裝fastdfs

1、搜索鏡像

docker search fastdfs

 

2、拉取合適鏡像

選擇合適tag:https://hub.docker.com/

docker pull delron/fastdfs

這個鏡像包含了fastdfs以及nginx,降低自我安裝學習時間

docker images

3、使用鏡像

  3.1、使用docker鏡像構建tracker容器(跟蹤服務器,起到調度的作用):

docker run -d -p 22122:22122 --name tracker -v /Users/lihongxu6/docker/myfastdfs/tracker:/var/fdfs delron/fastdfs tracker

 

  使用docker鏡像構建storage容器(存儲服務器,提供容量和備份服務):

docker run -d -p 8888:8888 -p 23000:23000 --name storage -e TRACKER_SERVER=ip:22122 -v /Users/lihongxu6/docker/myfastdfs/storage:/var/fdfs -e GROUP_NAME=group1 delron/fastdfs storage

 

  上面需要填寫你的tracker服務的ip地址,端口默認是22122

  3.2、進行服務的配置。

    進入storage容器,到storage的配置文件中配置http訪問的端口,配置文件在/etc/fdfs目錄下的storage.conf

docker exec -it storage /bin/bash
cd /etc/fdfs/
ls
vi storage.conf

 

    查看默認端口: http.server_port=8888 ,也可以不用哪個修改

  配置nginx,在/usr/local/nginx目錄下,修改nginx.conf文件

cd /usr/local/nginx/conf
vi nginx.conf

  修改http配置

    server {
        listen       8888;
        server_name  localhost;
        location ~/group[0-9]/ {
            ngx_fastdfs_module;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root html;
        }
    }

  或者針對性修改

location /group1/M00 {
        alias  /var/fdfs;
    }

此時文件系統以搭建完畢,使用web模塊進行文件的上傳,將文件上傳至FastDFS文件系統

4、測試

監控狀態
fdfs_monitor /etc/fdfs/storage.conf
上傳
fdfs_test /etc/fdfs/client.conf upload /etc/fdfs/tracker.conf.sample
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /etc/fdfs/tracker.conf.sample

 

  url訪問http://ip:8888/group1/M00/00/00/rBEAA14wRpCAcZfHAAAc3T8QekU.sample,即可

5、服務重啟

pkill -9 fdfs
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf

一、概述

  FastDFS是一個開源的輕量級分布式文件系統,它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件為載體的在線服務,如相冊網站、視頻網站等等。

  FastDFS為互聯網量身定制,充分考慮了冗余備份、負載均衡、線性擴容等機制,並注重高可用、高性能等指標,使用FastDFS很容易搭建一套高性能的文件服務器集群提供文件上傳、下載等服務。

1.1、簡介

  FastDFS服務端有兩個角色:跟蹤器(tracker)和存儲節點(storage)。跟蹤器主要做調度工作,在訪問上起負載均衡的作用。

  存儲節點存儲文件,完成文件管理的所有功能:就是這樣的存儲、同步和提供存取接口,FastDFS同時對文件的metadata進行管理。所謂文件的meta data就是文件的相關屬性,以鍵值對(key valuepair)方式表示,如:width=1024,其中的key為width,value為1024。文件metadata是文件屬性列表,可以包含多個鍵值對。

  tracker:跟蹤服務器, 主要做調度工作, 起負載均衡的作用。 在內存中記錄集群中所有存儲組和存儲服務器的狀態信息, 是客戶端和數據服務器交互的樞紐。 相比GFS中的master更為精簡, 不記錄文件索引信息, 占用的內存量很少。

  storage:存儲服務器( 又稱:存儲節點或數據服務器) , 文件和文件屬性( metadata) 都保存到存儲服務器上。 Storage server直接利用OS的文件系統調用管理文件。
  group:組, 也可稱為卷。 同組內服務器上的文件是完全相同的 ,同一組內的storage server之間是對等的, 文件上傳、 刪除等操作可以在任意一台storage server上進行 。

1.2、存儲策略

  為了支持大容量,存儲節點(服務器)采用了分卷(或分組)的組織方式。存儲系統由一個或多個卷組成,卷與卷之間的文件是相互獨立的,所有卷的文件容量累加就是整個存儲系統中的文件容量。一個卷可以由一台或多台存儲服務器組成,一個卷下的存儲服務器中的文件都是相同的,卷中的多台存儲服務器起到了冗余備份和負載均衡的作用。

  在卷中增加服務器時,同步已有的文件由系統自動完成,同步完成后,系統自動將新增服務器切換到線上提供服務。當存儲空間不足或即將耗盡時,可以動態添加卷。只需要增加一台或多台服務器,並將它們配置為一個新的卷,這樣就擴大了存儲系統的容量。

1.2.1、上傳交互過程

  FastDFS向使用者提供基本文件訪問接口,比如upload、download、append、delete等,以客戶端庫的方式提供給用戶使用。

  Storage Server會定期的向Tracker Server發送自己的存儲信息。當Tracker Server Cluster中的Tracker Server不止一個時,各個Tracker之間的關系是對等的,所以客戶端上傳時可以選擇任意一個Tracker。

  當Tracker收到客戶端上傳文件的請求時,會為該文件分配一個可以存儲文件的group,當選定了group后就要決定給客戶端分配group中的哪一個storage server。當分配好storage server后,客戶端向storage發送寫文件請求,storage將會為文件分配一個數據存儲目錄。然后為文件分配一個fileid,最后根據以上的信息生成文件名存儲文件。

   

1.2.2、下載交互過程

  客戶端uploadfile成功后,會拿到一個storage生成的文件名,接下來客戶端根據這個文件名即可訪問到該文件。

   

  跟upload file一樣,在downloadfile時客戶端可以選擇任意tracker server。tracker發送download請求給某個tracker,必須帶上文件名信息,tracke從文件名中解析出文件的group、大小、創建時間等信息,然后為該請求選擇一個storage用來服務讀請求。

1.3、文件同步

  寫文件時,客戶端將文件寫至group內一個storage server即認為寫文件成功,storage server寫完文件后,會由后台線程將文件同步至同group內其他的storage server。

  每個storage寫文件后,同時會寫一份binlog,binlog里不包含文件數據,只包含文件名等元信息,這份binlog用於后台同步,storage會記錄向group內其他storage同步的進度,以便重啟后能接上次的進度繼續同步;進度以時間戳的方式進行記錄,所以最好能保證集群內所有server的時鍾保持同步。

  storage的同步進度會作為元數據的一部分匯報到tracker上,tracke在選擇讀storage的時候會以同步進度作為參考。

1.4、結合nginx

  在使用 FastDFS 部署一個分布式文件系統的時候,通過 FastDFS 的客戶端 API 來進行文件的上傳、下載、刪除等操作。同時通過 FastDFS 的 HTTP 服務器來提供 HTTP 服務。但是 FastDFS 的 HTTP 服務較為簡單,無法提供負載均衡等高性能的服務,我們使用 FastDFS 的 Nginx 模塊來彌補這一缺陷。

  FastDFS 通過 Tracker 服務器,將文件放在 Storage 服務器存儲,但是同組之間的服務器需要復制文件,有延遲的問題.假設 Tracker 服務器將文件上傳到了 192.168.1.80,文件ID已經返回客戶端,這時,后台會將這個文件復制到 192.168.1.30,如果復制沒有完成,客戶端就用這個 ID 在 192.168.1.30 取文件,肯定會出現錯誤。這個 fastdfs-nginx-module 可以重定向連接到源服務器取文件,避免客戶端由於復制延遲的問題,出現錯誤。

主要解決的問題及場景

    1 解決海量存儲,同時存儲容量擴展方便。
    2 解決文件內容重復,如果用戶上傳的文件重復(文件指紋一樣),那么系統只有存儲一份數據,值得一提的是,這項技術目前被廣泛應用在網盤中。
    3 結合Nginx提高網站讀取圖片的效率。

特別適合以中小文件( 建議范圍: 4KB 到 500MB ) 為載體的在線服務, 如相冊網站、 視頻網站等等。

  

1.5、其他資源

1.6、對比

指標 適合類型 文件分布 系統性能 復雜度 FUSE POSIX 備份機制 通訊協議接口 社區支持 開發語言
FastDFS 4KB~500MB 小文件合並存儲不分片處理 很高 簡單 不支持 不支持 組內冗余備份 Api HTTP 國內用戶群 C語言
TFS 所有文件 小文件合並,以block組織分片   復雜 不支持   Block存儲多份,主輔災備 API http C++
MFS 大於64K 分片存儲 Master占內存多   支持 支持 多點備份動態冗余 使用fuse掛在 較多 Perl
HDFS 大文件 大文件分片分塊存儲   簡單 支持 支持 多副本 原生api 較多 Java
Ceph 對象文件塊 OSD一主多從   復雜 支持 支持 多副本 原生api 較少 C++
MogileFS 海量小圖片   復雜 可以支持 不支持 動態冗余 原生api 文檔少 Perl
ClusterFS 大文件     簡單 支持 支持     C

1.7、部署結構

    

二、springboot結合

 

 

 

 

 


免責聲明!

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



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