FastDHT配合FastDFS进行文件上传去重

为什么写这个

最近因为工作需要,使用了FastDFS,这是一款国产的开源DFS软件,但是这个软件本身不能对重复上传的文件进行去重,需要我们自己去处理,一种可行的方案是,在文件上传之前进行md5校验,把每个文件保存在数据库中,然后进行对比,这个md5值如果在数据库中已经存在的话,就不上传。不过这个效率可能不怎么高。FastDFS作者余庆也开源了一个解决的资源,就是FastDHT了,使用这个也可以做到去重。

关于FastDHT

FastDHT is a high-performance distributed hash system (DHT) which based key value pairs. It can store mass key value pairs such as filename mapping, session data and user related data. 
FastDHT implements data replication by it’s binlog file, so it only uses the basic storage function of the Berkeley DB. 
从这段话中可以看出,FastDHT是一个高性能的分布式哈希系统,它是基于键值对存储的,而且它需要依赖于Berkeley DB作为数据存储的媒介,同时需要依赖于libfastcommon。 
FastDHT集群由一个或者多个组 group组成,同组服务器上存储的数据是相同的,数据同步只在组的服务器之间进行;组内各个服务是对等的,对数据进行存取时,可以根据 key的hash值来决定使用哪台机器。

安装

下载FastDHT,建议在GitHub上下载:https://github.com/happyfish100/fastdht, 
libfastcommon下载地址:https://github.com/happyfish100/libfastcommon, 
Berkeley DB的下载地址: 
http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html 
下载完毕后,就可以开始安装了。

先安装libfastcommon

将源码解压到/usr/local/src/目录下,

[root@tracker src]# unzip libfastcommon-master.zip 
[root@tracker src]# cd libfastcommon-master
[root@tracker libfastcommon-master]# ls
HISTORY  INSTALL  libfastcommon.spec  make.sh  README  src
[root@tracker libfastcommon-master]# ./make.sh 
[root@tracker libfastcommon-master]# ./make.sh install
mkdir -p /usr/lib64
install -m 755 libfastcommon.so /usr/lib64
mkdir -p /usr/include/fastcommon
install -m 644 common_define.h hash.h chain.h logger.h base64.h shared_func.h pthread_func.h ini_file_reader.h _os_bits.h sockopt.h sched_thread.h http_func.h md5.h local_ip_func.h avl_tree.h ioevent.h ioevent_loop.h fast_task_queue.h fast_timer.h process_ctrl.h fast_mblock.h connection_pool.h /usr/include/fastcommon
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

安装Berkeley DB

其实libfastcommon在安装FastDFS的时候就会安装了,接下来安装db。这里我下载的是db-6.1.19版本。

①将db-6.1.19源码拷贝到 /usr/local/src下
②进入db-6.1.19\build_unix,
③执行../dist/configure --prefix=/usr/local/db-6.1.19
④make
⑤make install
安装完db,会在/usr/local目录下生成db-6.1.19/
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

安装FastDHT

①将fastdht-master源码解压到 /usr/local/src下,编译之前需要先修改make.sh文件。 
在CFLAGS=’-Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/local/db-6.1.19/include/ -L/usr/local/db-6.1.19/lib/’ 
这行里面加上斜体字部分。 
②然后,进入/usr/local/src/fastdht-master源码目录下,执行./make.mk 
然后执行./make.sh install。 
③最后会在/usr/local/bin生成安装后的文件,在/etc/fdht下生成文件

root@jz-server:/usr/local/bin# cd /etc/fdht/
root@jz-server:/etc/fdht# ll
total 24
drwxr-xr-x   2 root root 4096 Apr 22 12:45 ./
drwxr-xr-x 102 root root 4096 Apr 22 12:45 ../
-rwxr-xr-x   1 root root  910 Apr 22 12:45 fdht_client.conf*
-rwxr-xr-x   1 root root 5374 Apr 22 12:45 fdhtd.conf*
-rwxr-xr-x   1 root root   76 Apr 22 12:45 fdht_servers.conf*
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

配置FastDHT

配置fdht_client.conf文件

base_path=/data/fastdht
keep_alive=1
#include /etc/fdhtd/fdht_servers.conf
 
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

配置fdht_servers.conf文件

vim /etc/fdhtd/fdht_servers.conf
group_count = 1
group0 = 10.10.10.81:11411
group0 = 10.10.10.82:11411
 
 
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

配置fdhtd.conf文件

vim /etc/fdht/fdhtd.conf/
port=11411
bash_path=/data/fastdht (该目录必须是已经存在的)
cache_size = 32MB
#include /etc/fdhtd/fdht_servers.conf  -> (本行前有#表示打开,如果想关闭此选项,则应该为##开头)
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

配置storaged.conf文件

vim /etc/fdfs/storaged.conf
#是否检测上传文件已经存在。如果已经存在,则建立一个索引链接以节省磁盘空间 
check_file_duplicate=1 
#当上个参数设定为1时 , 在FastDHT中的命名空间
key_namespace=FastDFS 
#长连接配置选项,如果为0则为短连接 1为长连接 
keep_alive=1 
#此处特别需要注意配置
#include /etc/fdht/fdht_servers.conf
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

启动

或fdhtd /etc/fdht/fdhtd.conf 
fdhtd /etc/fdht/fdhtd.conf restart

可能遇到问题:

fdhtd /etc/fdht/fdhtd.conf 
error while loading shared libraries: libdb-6.1.so: cannot open shared object file: No such file or directory

解决办法:

# cp /usr/local/db-6.1.19/lib/libdb-6.1.so /usr/lib/
 
 
  • 1
  • 1

然后再重新启动就可以了。 
测试一下: 
这里写图片描述 
可以看到,第一次上传的文件为:

-rw-r--r--   1 root root 3706 Apr 22 15:24 CgoKUlcZ0cWAUpQ4AAAOepbSnR0875.png
 
 
  • 1
  • 1

第一次上传返回的结果为一个软链接:CgoKUlcZ0cWAYmiNAAAOejexS3k075.png,之后每次重复上传的话都是返回一个指向第一次上传的文件的软链接。也就保证了文件只保存了一份。需要说明的是,FastDFS不会返回原始文件的索引,比如这里的CgoKUlcZ0cWAUpQ4AAAOepbSnR0875.png,即返回的全部是软链接,当所有的软链接都被删除的时候,原始文件也会从FastDFS中被删除

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值