为REDIS启用带有群集启用选项的YCSB加载

时间:2014-11-07 04:19:37

标签: redis benchmarking ycsb nosql

我正在Redis集群上执行YCSB基准测试。我创建了redis集群,它的工作条件如下。

如果我指定在带有-c参数的redis客户端中启用集群模式。块正确移动。

./redis-cli -h -c "host ip" -p "port"

如果我没有指定-c参数,它会移动错误

的块
./redis-cli -h "host ip" -p "port"

在YCSB加载选项中,我不知道如何启用集群选项(-c参数)。

目前我正在使用以下conmmand而不使用-c选项

./bin/ycsb load redis -s -P workloads/workloada -p "redis.host=host ip" -p "redis.port=port" > outputLoad.txt

它返回错误。你能帮我解决一下这个问题吗?

2 个答案:

答案 0 :(得分:2)

不知道你是否想过这个问题。

但基本上如果要在Redis群集上使用YCSB,则需要为YCSB实施Redis群集客户端。它与YCSB为Redis提供的客户非常相似。您可以复制并粘贴Redis(单实例)并更改init()中的代码。使用maven配置和编译,然后您可以通过Redis Cluster Client运行YCSB。

更多细节:

因为YCSB使用java,所以我们需要使用jedis。在jedis中有一个名为JedisCluster的东西,我们需要使用它来在YCSB和Redis Cluster之间建立连接。更多细节可以在jedis github上找到。

对于maven部分,请记住更改客户端代码文件夹中的pom.xml,并在YCSB根文件夹(也是pom.xml,nosql下)中添加客户端模块。


值得一提的是:

我使用YCSB对Redis Cluster进行了实验。该设置是标准的,4个节点没有副本,8个核心机器,8 GB内存,从另一台机器运行YCSB,相同的设置有6个线程供工人使用。

Redis群集在所有方面都比Redis Single Instance慢3到4倍。 (主要用于阈值比较,通过调整-target参数不能提高吞吐量)

我真的不知道这是我的问题,还是jedis / jedisCluster / YCSB / Redis Cluster /等问题。

如果您在Redis群集上成功运行YCSB,请告诉我结果。我对你的结果非常好奇。

由于

答案 1 :(得分:1)

YCSB / redis / src / main / java / com / yahoo / ycsb / db / RedisClient.java 内部

public void init() throws DBException

添加以下行

Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
//Jedis Cluster will attempt to discover cluster nodes automatically
jedisClusterNodes.add(new HostAndPort(host, port));
jedis = new JedisCluster(jedisClusterNodes);

评论

jedis.connect(); 

jedis.disconnect();

另外,不要忘记在RedisClient.java中导入以下内容

import redis.clients.jedis.Protocol;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import java.util.HashSet;

使用与运行redis测试相同的命令运行测试,它应该可以工作。