我是靠谱客的博主 玩命八宝粥,最近开发中收集的这篇文章主要介绍FastDHT Ubuntu搭建及使用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本文简单介绍FastDHT结构与原理,重点介绍其安装配置及使用方法。

FastDHT是一个基于键值对(Key Value Pair)的高效的分布式Hash系统,她可以用来存储大量的Key Value Pair,比如可以用来存储文件名映射表、session数据、用户相关数据等等。


FastDHT服务器端底层存储采用Berkeley DB,支持大数据量;网络IO采用libevent,支持大并发连接。FastDHT只用到了BDB最基本的存储功能,数据同步是自己实现的,采用了binlog的复制方式。



安装:

下载链接: libevent-1.4.14-stable : http://www.monkey.org/~provos/libevent-1.4.14-stable.tar.gz
               db-4.7.25.tar.gz         : http://download.oracle.com/berkeley-db/db-4.7.25.tar.gz
               FastDHT V1.18.tar.gz : http://fastdht.googlecode.com/files/FastDHT_v1.18.tar.gz


一. 安装步骤: 
(请按照顺序进行安装)

1. install  libevent-1.4.14-stable.tar.gz

tar xzf libevent-1.4.14-stable.tar.gz
cd libevent-1.4.14-stable
./configure --prefix=/usr
make && make install

2. install Berkley DB-4.7.25

tar xzf db-4.7.25.tar.gz
cd db-4.7.25/build_unix
../dist/configure --prefix=/usr
make && make install

3. install FastDHT V1.18

tar xzf FastDHT_v1.18.tar.gz
cd FastDHT
./make.clean
./make.sh
./make.sh install
(确保存在 fdhtd.conf  fdht_servers.conf  fdht_client.conf 在服务器上)

二. 修改配置文件

创建目录: mkdir /etc/fdhtd (目录权限 : 755  所属者: root)

cp fdhtd.conf /etc/fdhtd/              (文件权限 : 644  所属者: root)
cp fdht_servers.conf /etc/fdhtd/    (文件权限 : 644  所属者: root)
cp fdht_client.conf /etc/fdhtd/       (文件权限 : 644  所属者: root)

vim /etc/fdhtd/fdhtd.conf
port=11411
bash_path=<自定义目录 例如: /fdht> (必须要已经创建的目录,这个目录在以后会被用来做错误日志的存储等)
cache_size = 32MB
#include /etc/fdhtd/fdht_servers.conf  -> (本行前有#表示打开,如果想关闭此选项,则应该为##开头)

vi /etc/fdhtd/fdht_server.conf
group_count = 2   (数字可自定义)
group0 = <ipaddress>:<port>
group0 = <ipaddress>:<port>
group1 = <ipaddress>:<port>
group1 = <ipaddress>:<port> 
依次类推

vi /etc/fdhtd/fdht_client.conf
keep_alive=1  --> (本选项关联 storaged.conf文件)
bash_path=<自定义目录 例如: /fdht>
# include /etc/fdhtd/fdht_servers.conf

三. 启动:

/usr/local/bin/fdhtd /etc/fdhtd/fdhtd.conf

四. 启动后,可以使用我在下面提供的代码来实现dht的基本功能


使用方法tips:

1. fdht_server.conf文件中配置的ip,必须包含本机ip,否则会有相应错误

2. 随文档附的test主要为批量的性能测试。不是实际的简单使用方法。实际的使用可以通过下列代码简单实现


#include "fdht_global.h"
#include "fdht_types.h"
#include "fdht_client.h"
#include "logger.h"
#include <string.h>
#include <time.h>
#include <errno.h>
#include <signal.h>
int main(int argc, const char *argv[])
{
int res, expire;
FDHTKeyInfo key;
struct sigaction act;
char buf[1024] = "initstr";
int len = 1024;
if(argc < 3)
{
printf("too few argumentsn");
exit(1);
}
memset(&act, 0, sizeof(act));
sigemptyset(&act.sa_mask);
act.sa_handler = SIG_IGN;
if(sigaction(SIGPIPE, &act, NULL) < 0)
{
printf("file: "__FILE__", line: %d, " 
"call sigaction fail, errno: %d, error info: %s", 
__LINE__, errno, strerror(errno));
return errno;
}
log_init();
res = fdht_client_init("/etc/fdhtd/fdht_client.conf");
if(res != 0)
{
printf("failed to load fdht_client.conf");
exit(1);
}
int succ_cnt, fail_cnt;
if ((res=fdht_connect_all_servers(&g_group_array, true, 
&succ_cnt, &fail_cnt)) != 0)
{
printf("fdht_connect_all_servers fail, " 
"error code: %d, error info: %sn", 
res, strerror(res));
return res;
}
memset(&key, 0, sizeof(FDHTKeyInfo));
if(strcmp(argv[1], "set") == 0)
{
strcpy(key.szKey, argv[2]);
key.key_len = strlen(argv[2]) + 1;
//strcpy(key.szKey, "kiikkkkkkkkkkkkkkkk15");
//key.key_len = strlen(key.szKey);
res = fdht_set(&key, FDHT_EXPIRES_NEVER, argv[3], strlen(argv[3]));
if(res != 0)
{
printf("fdht_set failedn");
goto CLEANUP;
}
}
else if(strcmp(argv[1], "get") == 0)
{
char *pbuf = buf;
strcpy(key.szKey, argv[2]);
key.key_len = strlen(argv[2]) + 1;
res = fdht_get(&key, &pbuf, &len);
if(res != 0)
{
printf("fdht_get failed, %sn", strerror(res));
goto CLEANUP;
}
else
{
buf[len] = 0;
printf("%sn", buf);
}
}
else if(strcmp(argv[1],"delete") ==0)
{
strcpy(key.szKey,argv[2]);
key.key_len = strlen(argv[2])+1;
res = fdht_delete(&key);
if(res !=0)
{
printf("fdht_delete failed,%sn",strerror(res));
goto CLEANUP;
}
}
else {
printf("unrecognized command %sn", argv[1]);
exit(1);
}
CLEANUP:
fdht_disconnect_all_servers(&g_group_array);
fdht_client_destroy();
return 0;
}

代码写的还是比较清楚的,各位一看便知。

具体调用就是

./mytest set key value

./mytest get key

./mytest delete key

最后

以上就是玩命八宝粥为你收集整理的FastDHT Ubuntu搭建及使用的全部内容,希望文章能够帮你解决FastDHT Ubuntu搭建及使用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部