fastDFS

1.fastDFS介紹:

  • fastDFS 是以C語言開發的一項開源輕量級分布式文件系統,他對文件進行管理,主要功能有:文件存儲,文件同步,文件訪問(文件上傳/下載),特別適合以文件為載體的在線服務,如圖片網站,視頻網站等
  • 分布式文件系統:
    基于客戶端/服務器的文件存儲系統
    對等特性允許一些系統扮演客戶端和服務器的雙重角色,可供多個用戶訪問的服務器,比如,用戶可以“發表”一個允許其他客戶機訪問的目錄,一旦被訪問,這個目錄對客戶機來說就像使用本地驅動器一樣

FastDFS由跟蹤服務器(Tracker Server)、存儲服務器(Storage Server)和客戶端(Client)構成。

  • Tracker server 追蹤服務器

追蹤服務器負責接收客戶端的請求,選擇合適的組合storage server ,tracker server 與 storage server之間也會用心跳機制來檢測對方是否活著。
Tracker需要管理的信息也都放在內存中,并且里面所有的Tracker都是對等的(每個節點地位相等),很容易擴展
客戶端訪問集群的時候會隨機分配一個Tracker來和客戶端交互。

  • Storage server 儲存服務器

實際存儲數據,分成若干個組(group),實際traker就是管理的storage中的組,而組內機器中則存儲數據,group可以隔離不同應用的數據,不同的應用的數據放在不同group里面,

  • 優點:
    海量的存儲:主從型分布式存儲,存儲空間方便拓展,
    fastDFS對文件內容做hash處理,避免出現重復文件
    然后fastDFS結合Nginx集成, 提供網站效率

  • 客戶端Client
  • 主要是上傳下載數據的服務器,也就是我們自己的項目所部署在的服務器。每個客戶端服務器都需要安裝Nginx

fastDFS三方交互圖

2.讀寫操作:

  • 寫入數據

  • 寫操作的時候,storage會將他所掛載的所有數據存儲目錄的底下都創建2級子目錄,每一級256個總共65536個,新寫的文件會以hash的方式被路由到其中某個子目錄下,然后將文件數據作為本地文件存儲到該目錄中。

寫操作fastDFS流程圖
下載文件:

當客戶端向Tracker發起下載請求時,并不會直接下載,而是先查詢storage server(檢測同步狀態),返回storage server的ip和端口,
然后客戶端會帶著文件信息(組名,路徑,文件名),去訪問相關的storage,然后下載文件。


fastDFS下載文件

使用:

1.首先下載fastdfs安裝包和依賴包(sourceforge->fastdfs),然后解壓。

  1. 配置tracker
 sudo cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf

在/home/python/目錄中創建目錄 fastdfs/tracker

mkdir –p /home/python/fastdfs/tracker

編輯/etc/fdfs/tracker.conf配置文件

 sudo vim /etc/fdfs/tracker.conf

修改 base_path=/home/python/fastdfs/tracker

3.配置storage

sudo cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf

在/home/python/fastdfs/ 目錄中創建目錄 storage,這個目錄就是實際數據存儲的位置

mkdir –p /home/python/fastdfs/storage

  1. 編輯/etc/fdfs/storage.conf配置文件
 sudo vim /etc/fdfs/storage.conf

修改內容:

base_path=/home/python/fastdfs/storage
store_path0=/home/python/fastdfs/storage
tracker_server=tracker所在機器的ip:22122

  1. 啟動tracker和storage
sudo trackerd /etc/fastdfs/tracker.conf start
sudo storaged /etc/fastdfs/storage.conf start

6.測試安裝是否成功

sudo cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf

編輯/etc/fdfs/client.conf配置文件

 sudo vim /etc/fdfs/client.conf

修改內容:

base_path=/home/python/fastdfs/tracker
tracker_server=tracker所在機器的ip:22122

  1. 上傳文件測試:
fdfs_upload_file /etc/fdfs/client.conf filename 

如果返回類似group1/M00/00/00/rBIK6VcaP0aARXDSNFHrUgHEviQ394.jpg的file_id則說明文件上傳成功

添加Nginx模塊

  1. 確保電腦上已經裝了Nginx。
  2. 下載fastdfs-nginx-module壓縮包,并解壓
  3. 進入Nginx的安裝目錄
    執行
sudo ./configure --prefix=/usr/local/nginx/ --add-module=fastdfs-nginx-module解壓后目錄下src的絕對路徑
sudo ./make
sudo ./make install
sudo cp fastdfs-nginx-module解壓后目錄中src/mod_fastdfs.conf  /etc/fdfs/mod_fastdfs.conf

 sudo vim /etc/fdfs/mod_fastdfs.conf

修改內容:

connect_timeout=10
tracker_server=tracker所在機器的ip:22122
url_have_group_name=true //返回file_id中包含組號
store_path0=/home/python/fastdfs/storage

 sudo cp fastdfs-nginx-module目錄下http.conf  /etc/fdfs/http.conf

sudo cp 解壓縮的fastdfs-nginx-module目錄下的mime.types /etc/fdfs/mime.types

sudo vim /usr/local/nginx/conf/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;
            }
        }

  1. Python測試
pip3 install fdfs_client

from fdfs_client import Fdfs_client, get_tracker_conf

conf = get_tracker_conf('/etc/fastdfs/client.conf')
client = Fdfs_client(conf)
client.upload_by_filename('test.jpg')
// 返回file_id則成功
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容