文件存儲服務器: FastDFS


文件存儲方案FastDFS

1. FastDFS介紹

  • c語言編寫的一款開源的輕量級分布式文件系統。
  • 功能包括:文件存儲、文件訪問(文件上傳、文件下載)、文件同步等,解決了大容量存儲和負載均衡的問題。特別適合以文件為載體的在線服務,如相冊網站、視頻網站等等。
  • 為互聯網量身定制,充分考慮了冗余備份、負載均衡、線性擴容等機制,並注重高可用、高性能等指標。
  • 可以幫助我們搭建一套高性能的文件服務器集群,並提供文件上傳、下載等服務。

 

 

  • FastDFS架構 包括ClientTracker serverStorage server
    • Client請求Tracker進行文件上傳、下載,Tracker再調度Storage完成文件上傳和下載。
  • Client: 客戶端,業務請求的發起方,通過專有接口,使用TCP/IP協議與TrackerStorage進行數據交互。FastDFS提供了uploaddownloaddelete等接口供客戶端使用。
  • Tracker server:跟蹤服務器,主要做調度工作,起負載均衡的作用。在內存中記錄集群中所有存儲組和存儲服務器的狀態信息,是客戶端和數據服務器交互的樞紐。
  • Storage server:存儲服務器(存儲節點或數據服務器),文件和文件屬性都保存到存儲服務器上。Storage server直接利用OS的文件系統調用管理文件。
    • Storage群中的橫向可以擴容,縱向可以備份。

 

 

2. FastDFS上傳和下載流程

 

 

 

 

3. FastDFS文件索引

 

 

  • FastDFS上傳和下載流程 可以看出都涉及到一個數據叫文件索引(file_id)。
    • 文件索引(file_id)是客戶端上傳文件后Storage返回給客戶端的一個字符串,是以后訪問該文件的索引信息。
  • 文件索引(file_id)信息包括:組名、虛擬磁盤路徑、數據兩級目錄、文件名等信息。
    • 組名:文件上傳后所在的 Storage 組名稱。
    • 虛擬磁盤路徑:Storage 配置的虛擬路徑,與磁盤選項store_path*對應。如果配置了store_path0則是M00,如果配置了store_path1則是M01,以此類推。
    • 數據兩級目錄:Storage 服務器在每個虛擬磁盤路徑下創建的兩級目錄,用於存儲數據文件。
    • 文件名:由存儲服務器根據特定信息生成,文件名包含:源存儲服務器IP地址、文件創建時間戳、文件大小、隨機數和文件拓展名等信息。

 

 

 

二、FastDFS的安裝

1、使用docker安裝

1.獲取FastDFS鏡像

# 從倉庫拉取鏡像
$ sudo docker image pull delron/fastdfs
# 解壓教學資料中本地鏡像
$ sudo docker load -i 文件路徑/fastdfs_docker.tar

 

2.開啟tracker容器
  • 我們將 tracker 運行目錄映射到宿主機的 /var/fdfs/tracker目錄中。

 

$ sudo docker run -dit --name tracker --network=host -v /var/fdfs/tracker:/var/fdfs delron/fastdfs tracker

 

 

 

3.開啟storage容器

  • TRACKER_SERVER=Tracker的ip地址:22122(Tracker的ip地址不要使用127.0.0.1)
  • 我們將 storage 運行目錄映射到宿主機的 /var/fdfs/storage目錄中。
$ sudo docker run -dti --name storage --network=host -e TRACKER_SERVER=192.168.103.158:22122 -v /var/fdfs/storage:/var/fdfs delron/fastdfs storage

 


 

4.查看宿主機映射路徑

 

 

 

 

 

 

注意:如果無法重啟storage容器,可以刪除/var/fdfs/storage/data目錄下的fdfs_storaged.pid 文件,然后重新運行storage。

 

2. FastDFS客戶端上傳文件

1.安裝FastDFS客戶端擴展

  • 安裝准備好的fdfs_client-py-master.zip到虛擬環境中
$ pip install fdfs_client-py-master.zip
$ pip install mutagen
$ pip isntall requests

 

2.准備FastDFS客戶端擴展的配置文件

  • meiduo_mall.utils.fastdfs.client.conf

 

base_path=FastDFS客戶端存放日志文件的目錄
tracker_server=運行Tracker服務的機器ip:22122

3.FastDFS客戶端實現文件存儲

# 使用 shell 進入 Python交互環境
$ python manage.py shell

 

# 1. 導入FastDFS客戶端擴展
from fdfs_client.client import Fdfs_client
# 2. 創建FastDFS客戶端實例
client = Fdfs_client('meiduo_mall/utils/fastdfs/client.conf')
# 3. 調用FastDFS客戶端上傳文件方法
ret = client.upload_by_filename('/Users/zhangjie/Desktop/kk.jpeg')

 

ret = {
'Group name': 'group1',
'Remote file_id': 'group1/M00/00/00/wKhnnlxw_gmAcoWmAAEXU5wmjPs35.jpeg',
'Status': 'Upload successed.',
'Local file name': '/Users/zhangjie/Desktop/kk.jpeg',
'Uploaded size': '69.00KB',
'Storage IP': '192.168.103.158'
 }

 

ret = {
'Group name': 'Storage組名',
'Remote file_id': '文件索引,可用於下載',
'Status': '文件上傳結果反饋',
'Local file name': '上傳文件全路徑',
'Uploaded size': '文件大小',
'Storage IP': 'Storage地址'
 }

 

 

 

 

3. 瀏覽器下載並渲染圖片

思考:如何才能找到在Storage中存儲的圖片?

  • 協議:
    • http
  • IP地址:192.168.103.158
    • Nginx服務器的IP地址。
    • 因為 FastDFS 擅長存儲靜態文件,但是不擅長提供靜態文件的下載服務,所以我們一般會將 Nginx 服務器綁定到 Storage ,提升下載性能。
  • 端口:8888
    • Nginx服務器的端口。
  • 路徑:group1/M00/00/00/wKhnnlxw_gmAcoWmAAEXU5wmjPs35.jpeg
    • 文件在Storage上的文件索引。
  • 完整圖片下載地址
    • http://192.168.103.158:8888/group1/M00/00/00/wKhnnlxw_gmAcoWmAAEXU5wmjPs35.jpeg

編寫測試代碼:meiduo_mall.utils.fdfs_t.html

 

<img src="http://192.168.103.158:8888/group1/M00/00/00/wKhnnlxw_gmAcoWmAAEXU5wmjPs35.jpeg" width="320" height="480">

 

 





 


免責聲明!

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



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