1. 程式人生 > 實用技巧 >fastDFS輕量級分散式檔案系統

fastDFS輕量級分散式檔案系統

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),然後解壓。

2.配置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配置檔案

mkdir –p /home/python/fastdfs/tracker

修改 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

4.編輯/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

5.啟動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

7.上傳檔案測試:

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
4.
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

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

6.

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

7.

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;
            }
        }

8.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則成功