首頁>技術>

FastDFS 簡介

FastDFS 服務端有兩個角色:跟蹤器tracker)和儲存節點storage)。跟蹤器主要做排程工作,在訪問上起負載均衡的作用;儲存節點儲存檔案,完成檔案管理的所有功能。

FastDFS 同時對檔案的 metadata 進行管理。所謂檔案的 metadata 就是檔案的相關屬性,以鍵值對方式表示,如:width=1024,其中的 key 為 width,value 為 1024。檔案 metadata 是檔案屬性列表,可以包含多個鍵值對。

跟蹤器和儲存節點都可以由一臺或多臺伺服器構成。跟蹤器和儲存節點中的伺服器均可以隨時增加或下線而不會影響線上服務。其中跟蹤器中的所有伺服器都是對等的,可以根據伺服器的壓力情況隨時增加或減少。

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

在卷中增加伺服器時,同步已有的檔案由系統自動完成,同步完成後,系統自動將新增伺服器切換到線上提供服務。

當儲存空間不足或即將耗盡時,可以動態添加捲。只需要增加一臺或多臺伺服器,並將它們配置為一個新的卷,這樣就擴大了儲存系統的容量。

FastDFS 中的檔案標識分為兩個部分:卷名檔名,二者缺一不可。

檔案互動過程上傳互動過程client 詢問 tracker 上傳到的 storage,不需要附加引數;tracker 返回一臺可用的 storage;client 直接和 storage 通訊完成檔案上傳。下載互動過程client 詢問 tracker 下載檔案的 storage,引數為檔案標識(卷名和檔名);tracker 返回一臺可用的 storage;client 直接和 storage 通訊完成檔案下載。FastDFS 為什麼要結合 Nginx

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

FastDFS 透過 tracker 伺服器,將檔案放在 Storage 伺服器儲存,但是同組之間的伺服器需要複製檔案,有延遲的問題。假設 tracker 伺服器將檔案上傳到了 192.168.1.100,檔案 ID 已經返回客戶端,這時後臺會將這個檔案複製到 192.168.1.100,如果複製沒有完成,客戶端就用這個 ID 在 192.168.1.100 取檔案,肯定會出現錯誤。而 fastdfs-nginx-module 可以重定向連線到源伺服器取檔案,避免客戶端由於複製延遲的問題出現錯誤。

基於 Docker 安裝 FastDFS

所需全部環境配置檔案已上傳至百度網盤。

在 Linux 伺服器上建立 /usr/local/docker/fastdfs 目錄和 /usr/local/docker/fastdfs/environment 目錄

目錄說明:

/usr/local/docker/fastdfs:用於存放 docker-compose.yml 檔案和 FastDFS 的資料卷。/usr/local/docker/fastdfs/environment:用於存放 Dockerfile 檔案和剛剛提取的環境檔案。

注意:因為 Shell 建立後是無法直接使用的,所以將 entrypoint.sh 檔案複製到伺服器目錄裡以後,需要賦予執行的許可權,執行以下命令:

$ chmod +x entrypoint.sh
各環境配置檔案說明tracker.conf

FastDFS 跟蹤器配置,容器中路徑為:/etc/fdfs,修改為:

base_path=/fastdfs/tracker
storage.conf

FastDFS 儲存配置,容器中路徑為:/etc/fdfs,修改為:

base_path=/fastdfs/storagestore_path0=/fastdfs/storagetracker_server=192.168.1.100:22122http.server_port=8888
client.conf

FastDFS 客戶端配置,容器中路徑為:/etc/fdfs,修改為:

base_path=/fastdfs/trackertracker_server=192.168.1.100:22122
config

fastdfs-nginx-module 配置檔案,容器中路徑為:/usr/local/src/fastdfs-nginx-module/src,修改為:

# 修改前CORE_INCS="$CORE_INCS /usr/local/include/fastdfs /usr/local/include/fastcommon/"CORE_LIBS="$CORE_LIBS -L/usr/local/lib -lfastcommon -lfdfsclient"# 修改後CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"CORE_LIBS="$CORE_LIBS -L/usr/lib -lfastcommon -lfdfsclient"
mod_fastdfs.conf

fastdfs-nginx-module 配置檔案,容器中路徑為:/usr/local/src/fastdfs-nginx-module/src,修改為:

connect_timeout=10tracker_server=192.168.1.100:22122url_have_group_name = truestore_path0=/fastdfs/storage
nginx.conf

Nginx 配置檔案,容器中路徑為:/usr/local/src/nginx-1.13.6/conf,修改為:

29
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • ASP.NET+MVC+使用+Log4net+記錄日誌筆記