Docker部署FastDFS(附示例代碼)


1. FastDFS簡介

  FastDFS是一個開源的分布式文件系統,它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件(建議:4KB ~ 500MB)為載體的在線服務,如相冊網站、視頻網站等等。
  FastDFS系統有三個角色:跟蹤服務器(Tracker Server)、存儲服務器(Storage Server)和客戶端(Client)。
  Tracker Server:跟蹤服務器,主要負責Group和Storage Server之間的負載均衡;每個Storage Server 在啟動后會連接Tracker Server,告知自己所屬Group 等信息,並保持周期性心跳。
  Storage Server:存儲服務器,主要負責容量和備份服務;以Group為單位,每個Group中可以有多個Storage Server,數據互為備份。
  Client:客戶端,即用於上傳和下載所在工程部署的服務器。

2. FastDFS存儲策略

  為了支持大容量,存儲節點(服務器)采用了分卷(或分組)的組織方式。存儲系統由一個或多個卷組成,卷與卷之間的文件是相互獨立的,所有卷 的文件容量累加就是整個存儲系統中的文件容量。一個卷可以由一台或多台存儲服務器組成,一個卷下的存儲服務器中的文件都是相同的,卷中的多台存儲服務器起到了冗余備份和負載均衡的作用。
  在卷中增加服務器時,同步已有的文件由系統自動完成,同步完成后,系統自動將新增服務器切換到線上提供服務。
  當存儲空間不足或即將耗盡時,可以動態添加卷。只需要增加一台或多台服務器,並將它們配置為一個新的卷,這樣就擴大了存儲系統的容量。
  FastDFS中的文件標識分為兩個部分:卷名和文件名,二者缺一不可。

3. FastDFS文件上傳和下載

3.1 上傳文件交互過程
  • Client詢問Tracker上傳到的Storage,不需要附加參數;
  • Tracker返回一台可用的Storage;
  • Client直接和Storage通訊完成文件上傳。
3.2 下載文件交互過程
  • Client詢問Tracker下載文件的Storage,參數為文件標識(卷名和文件名);
  • Tracker返回一台可用的Storage;
  • Client直接和Storage通訊完成文件下載。

4. FastDFS文件同步

  寫文件時,Client將文件寫至Group內一個Storage Server即為寫文件成功,Storage Server寫文件完成后,后台線程會將文件同步至同Group內其他Storage Server。
  每個Storage Server寫文件件完成后,同時會寫一份binlog,binlog里不包含文件數據,只包含文件名等元信息,用於后台同步,Storage會記錄同Group內其他Storage同步的進度,以便重啟后能繼續同步;進度以時間戳的方式進行記錄,所以最好能保證集群內所有服務器的時間保持同步。
  Storage的同步進度會作為元數據的一部分反饋給Tracker,Tracke在選擇讀Storage時會以同步進度作為參考。

5. Docker部署FastDFS

# 搜索鏡像
docker search fastdfs

# 拉取鏡像(已經內置Nginx)
docker pull delron/fastdfs

# 構建Tracker
# 22122 => Tracker默認端口
docker run --name=tracker-server --privileged=true -p 22122:22122 -v /var/fdfs/tracker:/var/fdfs -d delron/fastdfs tracker

# 構建Storage
# 23000 => Storage默認端口
# 8888 => 內置Nginx默認端口
# TRACKER_SERVER => 執行Tracker的ip和端口
# --net=host => 避免因為Docker網絡問題導致外網客戶端無法上傳文件,因此使用host網絡模式
docker run --name=storage-server --privileged=true -p 23000:23000 -p 8888:8888 -v /var/fdfs/storage:/var/fdfs -e TRACKER_SERVER=192.168.0.100:22122 -e GROUP_NAME=group1 --net=host -d delron/fastdfs storage

# 查看容器
docker ps

6. 測試上傳和訪問

  • 將突破上傳到服務器/var/fdfs/storage/
  • 進入storage-server
docker exec -it storage-server /bin/bash

cd /var/fdfs/

/usr/bin/fdfs_upload_file /etc/fdfs/client.conf test.jpg

# 記錄返回的文件名稱(卷名和文件名)信息

7. 示例代碼

  SpringBoot集成基於tobato的fastdfs-client實現文件上傳下載和刪除


免責聲明!

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



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