一、前言
最近公司让我搞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
(编译安装的时间有点长,请耐心等待)
③安装fastDHT
cd /usr/local/src/
unzip fastdht-master.zip
cd fastdht-master
vim make.sh
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
由图中可知缺少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
有图中可知已经不缺少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 最终的效果图如下图所示。
从图中可以看出,生成了许多类似快捷方式的图表。这说明FastDHT文件去重功能已经成功实现。