概述
本文简单介绍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搭建及使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复