前言
FastDHT是基于键值对的高性能分布式哈希表(DHT)。它可以存储大量键值对,例如文件名映射,会话数据和与用户相关数据。
FastDFS本身支持文件的排重处理机制,但需要FastDHT作为文件hash的索引存储。
其排重原理为:FastDFS的storage server每次上传均需要计算文件的hash值,然后从FastDHT服务器上进行查找比对,如果没有返回,则写入hash,并将文件保存;如果有返回,则建立一个新的文件链接(快捷方式的软连接),不保存文件,从而大大节省空间。
FastDFS详细单机版安装教程可以参考https://blog.youkuaiyun.com/weixin_39106990/article/details/103119117。
本文经过详细测试,完全可用,按步骤操作即可。
FastDHT环境搭建
一、安装 Berkeley DB
FastDHT使用Berkeley DB作为数据存储来支持海量数据和libevent
作为网络IO支持巨大的连接。
1、下载安装包
wget http://download.oracle.com/berkeley-db/db-6.2.32.tar.gz
2、解压缩tar包
3、编译并安装
[root@localhost ~]# cd /usr/local/
[root@localhost local]# cd db-6.2.32/build_unix/
[root@localhost build_unix]# ../dist/configure --prefix=/usr/local/db-6.2.32
[root@localhost build_unix]# make && make install
二、安装FastDHT
1、可以去github下载最新版。官网:https://github.com/happyfish100。
2、解压缩zip包
如果未安装zip,可以使用安装命令yum install -y unzip zip,进行安装。
[root@localhost ~]# unzip -o fastdht-master.zip -d /usr/local/
3、编译之前需要先修改make.sh文件
[root@localhost ~]# cd /usr/local/fastdht-master/
[root@localhost fastdht-master]# vim make.sh
将CFLAGS修改为以下内容
CFLAGS='-Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/local/db-6.2.32/include/ -L/usr/local/db-6.2.32/lib/'
4、编译并安装
[root@localhost fastdht-master]# ./make.sh && ./make.sh install
最后会在/usr/local/bin生成安装后的文件,在/etc/fdht下生成配置文件。如图所示。
三、环境配置
1、修改fdhtd.conf
[root@localhost fdht]# vim /etc/fdht/fdhtd.conf
修改以下内容:
port=11411
base_path=/data/fastfht(该目录必须是已经存在的)
#include /etc/fdht/fdht_servers.conf(本行前有#表示打开,如果想关闭此选项,则应该为##开头)
2、创建目录
[root@localhost fdht]# mkdir -p /data/fastdht
3、修改fdht_servers.conf (用来配置fastdht集群的,dht server也是通过组进行管理的,同组备份)
[root@localhost fdht]# vim fdht_servers.conf
修改以下内容:
group_count = 1(数字可自定义)
group0 = 192.168.159.147:11411(自己的ip)
4、修改/etc/fdfs/storage.conf配置文件
[root@localhost fdht]# 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之间没有空格)
5、启动服务
[root@localhost fdht]# /usr/local/bin/fdhtd /etc/fdht/fdhtd.conf start
[root@localhost fdht]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
[root@localhost fdht]# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
6、错误排查
如果出现以下错误
第一步:cp /usr/local/db-6.0.30/lib/libdb-6.0.so /usr/lib/
第二步:查看动态链接库是否全链接完毕
ldd /usr/local/bin/fdhtd
由图中可知缺少libdb-6.0.so
第三步:执行ldconfig命令
ldconfig
(ldconfig命令的用途, 主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下, 搜索出可共享的动态链接库(格式如lib*.so*), 进而创建出动态装入程序(ld.so)所需的连接和缓存文件. 缓存文件默认为/etc/ld.so.cache, 此文件保存已排好序的动态链接库名字列表)
第四步:再次执行ldd /usr/local/bin/fdhtd
由图中可知已经不缺少libdb-6.0so啦。
第五步:再次执行步骤5启动服务即可(先执行启动fdhtd命令再重启storaged和trackerd)。
7、设置开机启动
[root@localhost fdht]# vim /etc/rc.local
加入以下配置:
fdhtd /etc/fdht/fdhtd.conf
如果开启自启不生效,可能是centOS找不到fdhtd文件。建议把全路径写上:/usr/local/bin/fdhtd /etc/fdht/fdhtd.conf。
执行命令,使之生效:
chmod +x /etc/rc.local
8、测试上传图片
效果如图,通过生成软连接(快捷方式)的形式,实现了文件去重。