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
2.讀寫操作:
-
寫入資料
-
寫操作的時候,storage會將他所掛載的所有資料儲存目錄的底下都建立2級子目錄,每一級256個總共65536個,新寫的檔案會以hash的方式被路由到其中某個子目錄下,然後將檔案資料作為本地檔案儲存到該目錄中。
下載檔案:
當客戶端向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模組
- 確保電腦上已經裝了Nginx。
- 下載fastdfs-nginx-module壓縮包,並解壓
- 進入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則成功