【FastDFS】FastDFS+FastDHT完成文件上传去重

一、前言

      最近公司让我搞FastDFS分布式文件系统。整个集群环境已经搭建成功啦。但是有一个问题一直困扰着我,那就是重复文件的上传。即使是同一个文件,多次上传,返回的id也是不一样的。这样就造成了磁盘资源的极大浪费。但是呢FastDFS本身是不支持重复文件去重的。好在FastDFS的作者余庆提供了一种解决思路。那就是FastDHT。

      FastDHT是分布式哈希系统(DHT),使用BerkeleyDB做数据存储,使用libevent做网络IO处理。依赖于libfastcommon。

二、安装

1、基本环境:

       CentOS7、libfastcommon、Berkeley、FastDHT

2、安装前需要的环境gcc

yum install make cmake gcc gcc-c++

3、正式安装

进入下载目录:cd/usr/local/src

下载libfastcommon、Berkeley DB、FastDHT

资源下载链接

①安装libfastcommon   (安装FastDFS应该已经装了。无需重复安装)

解压、进入解压缩目录

unzip libfastcommon-master.zip
cd libfastcommon-master

编译、安装

./make.sh && ./make.sh install

②安装 Berkeley DB。我下载的版本是db-6.0.30版本

进入解压缩目录

cd /usr/local/src/db-6.0.30/ build_unix/

进行提权:

chmod 777 ../dist/configure
选择安装目录
../dist/configure --prefix=/usr/local/db-6.0.30
编译、安装
make && make install
(编译安装的时间有点长,请耐心等待)
安装完db,会在/usr/local目录下生成db-6.0.30目录

③安装fastDHT

cd /usr/local/src/
unzip fastdht-master.zip
cd fastdht-master 
vim make.sh
编译之前需要先修改make.sh文件。在大约27修改CFLAGS为:
CFLAGS='-Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/local/db-6.0.30/include/ -L/usr/local/db-6.0.30/lib/'
编译、安装
./make.sh && ./make.sh install

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

二、环境配置

1、创建目录

     mkdir/fastdht

2、修改fdhtd.conf文件

vim /etc/fdht/fdhtd.conf
port=11411
base_path=/fastdht(该目录必须是已经存在的)
#include /etc/fdht/fdht_servers.conf(本行前有#表示打开,如果想关闭此选项,则应该为##开头)

3、修改fdht_servers.conf文件

vim /etc/fdht/fdht_servers.conf
group_count = 2   (数字可自定义)
group0 = 192.168.224.223:11411
group0 = 192.168.224.224:11411
group1 = 192.168.224.223:11411
group1 = 192.168.224.224:11411

4、修改fdht_client.conf文件

vim /etc/fdht/fdht_client.conf
keep_alive=1  --> (本选项关联 storaged.conf文件)
base_path= /fastdht (该目录必须是已经存在的)
#include /etc/fdht/fdht_servers.conf
(注意: #和include之间没有空格)

5、修改storage.conf文件

vim /etc/fdfs/storage.conf

line 195:  check_file_duplicate=1
(本配置项解释: 是否检测上传文件已经存在。如果已经存在,则不存在文件内容,建立一个索引链接以节省磁盘空间)
line 206:  key_namespace=FastDFS
(本配置项解释: 当上个参数设定为1时 , 在FastDHT中的命名空间)
line 210  keep_alive=1 
(本配置项解释: 长连接配置选项,如果为0则为短连接 1为长连接)
line 217:  #include /etc/fdht/fdht_servers.conf
(本配置项解释: 可以通过 #include filename 方式来加载 FastDHT servers  的配置)
(注意: #和include之间没有空格)

三、启动FastDHT

1、启动命令:

fdhtd /etc/fdhtd/fdhtd.conf
2、重启命令:
fdhtd /etc/fdht/fdhtd.conf restart

3、出错排查

若出现如下错误


第一步:cp /usr/local/db-6.0.30/lib/libdb-6.0.so /usr/lib/

第二步:查看动态链接库是否全链接完毕

ldd /usr/local/bin/fdhtd

【FastDFS】FastDFS+FastDHT完成文件上传去重_第1张图片

由图中可知缺少libdb-6.0.so

4、执行ldconfig命令

ldconfig

(ldconfig命令的用途, 主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下, 搜索出可共享的动态链接库(格式如lib*.so*), 进而创建出动态装入程序(ld.so)所需的连接和缓存文件. 缓存文件默认为/etc/ld.so.cache, 此文件保存已排好序的动态链接库名字列表)

5、再次执行ldd /usr/local/bin/fdhtd

【FastDFS】FastDFS+FastDHT完成文件上传去重_第2张图片

有图中可知已经不缺少libdb-6.0so啦。

6、再次启动FastDHT

fdhtd /etc/fdht/fdhtd.conf

7、查看端口是否启动

netstat -an | grep 11411

(注意:要先启动FastDHT。在启动storage,才能使文件去重功能生效。)

8、设置FastDHT开机自启

vi /etc/rc.local  

加入以下配置:

fdhtd /etc/fdht/fdhtd.conf

如果开启自启不生效,可能是centOS找不到fdhtd文件。建议把全路径写上:/usr/local/bin/fdhtd /etc/fdht/fdhtd.conf。

执行命令,使之生效:

chmod +x /etc/rc.local 

9、效果展示图

       多次执行命令来上传同一个文件。如 /usr/bin/fdfs_upload_file /etc/fdfs/client.conf/usr/local/src/1234.jpeg    最终的效果图如下图所示。

       【FastDFS】FastDFS+FastDHT完成文件上传去重_第3张图片

       从图中可以看出,生成了许多类似快捷方式的图表。这说明FastDHT文件去重功能已经成功实现。



你可能感兴趣的:(FastDFS,FastDFS相关教程)