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