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,然后下載文件。
使用:
1.首先下載fastdfs安裝包和依賴包(sourceforge->fastdfs),然后解壓。
- 配置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
- 編輯/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
- 啟動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
- 上傳文件測試:
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
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;
}
}
- 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則成功