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

发表时间:2018-04-08 16:33:42 浏览量( 4 ) 留言数( 0 )

学习目标:

1、了解Java的历史

2、为什么要学习Java语言

3、端正学习态度


学习过程:

    重复文件的上传,会浪费文件服务器的空间,我们上传文件的时候,可以判断一下文件系统是否已经有这个文件了。这方面的功能大家在自己的应用程序里面完成,只需要对所有上传文件计算MD5或者CRC值,然后保存起来,每一次上传文件的时候都计算上传的文件,并查询匹配是否已有这个文件,如果已经有了这个文件,可以直接返回改文件的FastDFS的路径,不需要执行上传操作。

   当然如果你不想自己在程序里面完成重复文件检查的操作,也可以使用FastDFS作者余庆也开源了一个解决的资源,就是FastDHT了,使用这个也可以做到去重。

   FastDHT是一个高性能的分布式哈希系统,它是基于键值对存储的,而且它需要依赖于Berkeley DB作为数据存储的媒介,同时需要依赖于libfastcommon。 

一、安装

可以在前面的存储服务安装。

下载FastDHT,下载地址

     https://github.com/happyfish100/fastdht

libfastcommon下载地址:

   前面已经下载了。

Berkeley DB的下载地址: 

    http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html 


规划,我们也是用两台新的服务器作为FastDHT,之所以使用两台,当然也是为了保证高可用性。

192.168.3.107和192.168.3.108

再两台电脑都执行一下的安装

1、安装libfastcommon

   前面已经安装了,这里就不啰嗦了。


2、安装Berkeley DB

将db-6.1.19源码拷贝到 /usr/local/src下

进入

   cd  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/


3、安装FastDHT

(1)将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/’ 

(2)然后,进入/usr/local/src/fastdht-master源码目录下,执行命令

    ./make.mk 

然后执行

   ./make.sh install。 

(3)最后会在/usr/local/bin生成安装后的文件,在/etc/fdht下生成配置文件

 fdht_client.conf

fdhtd.conf

fdht_servers.conf


4、配置FastDHT

配置fdht_servers.conf文件

vim /etc/fdhtd/fdht_servers.conf

group_count = 1

group0 = 192.168.3.107:11411

group0 = 192.168.3.108:11411


配置fdht_client.conf文件

base_path=/data/fastdht

keep_alive=1

#include /etc/fdhtd/fdht_servers.conf


配置fdhtd.conf文件

vim /etc/fdht/fdhtd.conf/

port=11411

bash_path=/fastdht/data (该目录必须是已经存在的)

cache_size = 32MB

#include /etc/fdhtd/fdht_servers.conf  -> (本行前有#表示打开,如果想关闭此选项,则应该为##开头)



三、配置原来的fastDFS

将FastDHT服务器192.168.3.107上的server配置文件复制到FastDFS的storage服务器的各个存储服务器

scp /etc/fdht/fdht_server.conf 192.168.3.107:/etc/fdht/


配置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


启动

或fdhtd /etc/fdht/fdhtd.conf 

fdhtd /etc/fdht/fdhtd.conf restart



配置防火墙,放开11411端口


可能遇到问题:

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/

然后再重新启动就可以了。 


5、测试

测试一下: 

这里写图片描述 

可以看到,第一次上传的文件为:


后面再上传的返回的都是一样的。

storage server每次上传均计算文件的hash值,然后从FastDHT服务器上进行查找比对,如果没有返回,则写入hash,并将文件保存

如果有返回,则建立一个新的文件链接(软链),不保存文件。


http://blog.sina.com.cn/s/blog_5459f60d01012smb.html