FastDFS自己支持文件的排重處理機制。但須要FastDHT做爲文件hash的索引存儲。FastDHT是同一個做者的開源key-value數據庫。數據庫
排重原理服務器
FastDFS的storage server每次上傳均計算文件的hash值,而後從FastDHT服務器上進行查找比對,若是沒有返回,則寫入hash,並將文件保存oracle
若是有返回,則創建一個新的文件連接(軟鏈),不保存文件。測試
服務器結構ui
在2臺服務器上安裝FastDHT,避免單點問題this
192.168.110.5google
192.168.110.6spa
配置2臺FastDFS storage服務器排重處理上傳資源unix
192.168.110.3rest
192.168.110.4
1.安裝hash數據庫FastDHT的依賴庫
berkeleydb 4.7.25以上
wget -c http://download.oracle.com/berkeley-db/db-5.2.28.tar.gz
tar zxf db-5.2.28.tar.gz
cd db-5.2.28/build-unix
../dist/configure --prefix=/usr
make && make install
ldconfig
libevent 1.4.8以上
yum install libevent libvent-devel
2.安裝FastDHT
wget -c http://fastdht.googlecode.com/files/FastDHT_v1.17.tar.gz
tar zxf FastDHT_v1.17.tar.gz
cd FastDHT
修改make.sh和conf文件,以便複製和安裝
-----------------------------見附件的patch文件----------------------------
nano make.sh
WITH_LINUX_SERVICE=1
TARGET_PREFIX=/usr/local/fastdht
mkdir -p $TARGET_PREFIX/etc
cp -f conf/fdhtd.conf $TARGET_PREFIX/etc/
cp -f conf/fdht_servers.conf $TARGET_PREFIX/etc/
cp -f conf/fdht_client.conf $TARGET_PREFIX/etc/
cp -f init.d/fdhtd /etc/rc.d/init.d/
---------------------------------見附件的patch文件----------------------------
./make.sh
./make.sh install
3.配置FastDHT
nano /usr/local/fastdht/etc/fdhtd.conf
base_path=/www/fastdht
nano /usr/local/fastdht/etc/fdht_server.conf
group_count = 1
group0 = 192.168.110.5:11411
group0 = 192.168.110.6:11411
mkdir -p /www/fastdht
4.啓動FastDHT
/etc/init.d/fdhtd start
5.配置FastDFS的storage服務器
將FastDHT服務器110.5上的server配置文件複製到FastDFS的storage服務器110.3和110.4上
scp /usr/local/fastdht/etc/fdht_server.conf 192.168.110.3:/usr/local/fastdfs/etc/
修改storage服務器的配置文件
--------------------------------------------------------------------
nano /usr/local/fdfs/etc/storage_pic1.conf
# if check file duplicate, when set to true, use FastDHT to store file indexes
# 1 or yes: need check
# 0 or no: do not check
check_file_duplicate=1
# namespace for storing file indexes (key-value pairs)
# this item must be set when check_file_duplicate is true / on
key_namespace=juxiang_pic
# set keep_alive to 1 to enable persistent connection with FastDHT servers
# default value is 0 (short connection)
keep_alive=1
#注意是一個井號
#include /usr/local/fastdfs/etc/fdht_servers.conf
-------------------------------------------------------------------
nano /usr/local/fdfs/etc/storage_portrait1.conf
check_file_duplicate=1
key_namespace=juxiang_portrait
keep_alive=1
#include /usr/local/fastdfs/etc/fdht_servers.conf
6.重啓stoage服務器
/etc/init.d/fdfs_storage restart
7.排重的原理和測試
storage server每次上傳均計算文件的hash值,而後從FastDHT服務器上進行查找比對,若是沒有返回,則寫入hash,並將文件保存
若是有返回,則創建一個新的文件連接(軟鏈),不保存文件。
測試結果以下
lrwxrwxrwx 1 www www 68 06-27 18:13 wKhuA04IV8KBy7ZYAANZGGz6LoM768.jpg -> /www/fastdfs/portrait1/data/00/00/wKhuA04IVxKO4CTHAANZGDC_k8I758.jpg
-rw-r--r-- 1 www www 219416 06-27 18:10 wKhuA04IVxKO4CTHAANZGDC_k8I758.jpg
lrwxrwxrwx 1 www www 68 06-27 18:10 wKhuA04IVxKUQebiAANZGC_dTZs510.jpg -> /www/fastdfs/portrait1/data/00/00/wKhuA04IVxKO4CTHAANZGDC_k8I758.jpg
lrwxrwxrwx 1 www www 68 06-27 18:14 wKhuA04IWA2uCmr3AANZGFJ41wo808.jpg -> /www/fastdfs/portrait1/data/00/00/wKhuA04IVxKO4CTHAANZGDC_k8I758.jpg