1.fastDFS介紹:
-
fastDFS 是以C語言開發(fā)的一項(xiàng)開源輕量級(jí)分布式文件系統(tǒng),他對文件進(jìn)行管理贫途,主要功能有:文件存儲(chǔ),文件同步,文件訪問(文件上傳/下載),特別適合以文件為載體的在線服務(wù)蚁廓,如圖片網(wǎng)站,視頻網(wǎng)站等
- 分布式文件系統(tǒng):
基于客戶端/服務(wù)器的文件存儲(chǔ)系統(tǒng)
對等特性允許一些系統(tǒng)扮演客戶端和服務(wù)器的雙重角色厨幻,可供多個(gè)用戶訪問的服務(wù)器相嵌,比如,用戶可以“發(fā)表”一個(gè)允許其他客戶機(jī)訪問的目錄况脆,一旦被訪問饭宾,這個(gè)目錄對客戶機(jī)來說就像使用本地驅(qū)動(dòng)器一樣
FastDFS由跟蹤服務(wù)器(Tracker Server)、存儲(chǔ)服務(wù)器(Storage Server)和客戶端(Client)構(gòu)成格了。
-
Tracker server 追蹤服務(wù)器
追蹤服務(wù)器負(fù)責(zé)接收客戶端的請求看铆,選擇合適的組合storage server ,tracker server 與 storage server之間也會(huì)用心跳機(jī)制來檢測對方是否活著盛末。
Tracker需要管理的信息也都放在內(nèi)存中弹惦,并且里面所有的Tracker都是對等的(每個(gè)節(jié)點(diǎn)地位相等),很容易擴(kuò)展
客戶端訪問集群的時(shí)候會(huì)隨機(jī)分配一個(gè)Tracker來和客戶端交互悄但。
-
Storage server 儲(chǔ)存服務(wù)器
實(shí)際存儲(chǔ)數(shù)據(jù)棠隐,分成若干個(gè)組(group),實(shí)際traker就是管理的storage中的組檐嚣,而組內(nèi)機(jī)器中則存儲(chǔ)數(shù)據(jù)助泽,group可以隔離不同應(yīng)用的數(shù)據(jù),不同的應(yīng)用的數(shù)據(jù)放在不同group里面,
優(yōu)點(diǎn):
海量的存儲(chǔ):主從型分布式存儲(chǔ)报咳,存儲(chǔ)空間方便拓展,
fastDFS對文件內(nèi)容做hash處理侠讯,避免出現(xiàn)重復(fù)文件
然后fastDFS結(jié)合Nginx集成, 提供網(wǎng)站效率-
客戶端Client
主要是上傳下載數(shù)據(jù)的服務(wù)器,也就是我們自己的項(xiàng)目所部署在的服務(wù)器暑刃。每個(gè)客戶端服務(wù)器都需要安裝Nginx
2.讀寫操作:
-
寫入數(shù)據(jù)
寫操作的時(shí)候厢漩,storage會(huì)將他所掛載的所有數(shù)據(jù)存儲(chǔ)目錄的底下都創(chuàng)建2級(jí)子目錄,每一級(jí)256個(gè)總共65536個(gè)岩臣,新寫的文件會(huì)以hash的方式被路由到其中某個(gè)子目錄下溜嗜,然后將文件數(shù)據(jù)作為本地文件存儲(chǔ)到該目錄中。
下載文件:
當(dāng)客戶端向Tracker發(fā)起下載請求時(shí)架谎,并不會(huì)直接下載炸宵,而是先查詢storage server(檢測同步狀態(tài)),返回storage server的ip和端口谷扣,
然后客戶端會(huì)帶著文件信息(組名土全,路徑,文件名)会涎,去訪問相關(guān)的storage裹匙,然后下載文件。
使用:
1.首先下載fastdfs安裝包和依賴包(sourceforge->fastdfs)末秃,然后解壓概页。
- 配置tracker
sudo cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
在/home/python/目錄中創(chuàng)建目錄 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/ 目錄中創(chuàng)建目錄 storage,這個(gè)目錄就是實(shí)際數(shù)據(jù)存儲(chǔ)的位置
mkdir –p /home/python/fastdfs/storage
- 編輯/etc/fdfs/storage.conf配置文件
sudo vim /etc/fdfs/storage.conf
修改內(nèi)容:
base_path=/home/python/fastdfs/storage
store_path0=/home/python/fastdfs/storage
tracker_server=tracker所在機(jī)器的ip:22122
- 啟動(dòng)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
修改內(nèi)容:
base_path=/home/python/fastdfs/tracker
tracker_server=tracker所在機(jī)器的ip:22122
- 上傳文件測試:
fdfs_upload_file /etc/fdfs/client.conf filename
如果返回類似group1/M00/00/00/rBIK6VcaP0aARXDSNFHrUgHEviQ394.jpg
的file_id則說明文件上傳成功
添加Nginx模塊
- 確保電腦上已經(jīng)裝了Nginx练慕。
- 下載fastdfs-nginx-module壓縮包惰匙,并解壓
- 進(jìn)入Nginx的安裝目錄
執(zhí)行
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
修改內(nèi)容:
connect_timeout=10
tracker_server=tracker所在機(jī)器的ip:22122
url_have_group_name=true //返回file_id中包含組號(hào)
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]/ { // 地址有組號(hào)的,就到下面的位置里找
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則成功