1

我正在 Redis 集群上执行 YCSB 基准测试。我已经创建了 redis 集群,并且它在以下条件下工作。

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

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

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

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

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

目前我正在使用以下不带 -c 选项的命令

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

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

4

2 回答 2

2

不知道你有没有想到这个问题。

但基本上如果你想在 Redis Cluster 上使用 YCSB,你需要为 YCSB 实现一个 Redis Cluster Client。它与 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 Cluster 在各方面都比 Redis Single Instance 慢 3 到 4 倍。(主要是阈值比较,不能通过调整-target参数来提高吞吐量)

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

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

谢谢

于 2015-04-01T04:43:53.507 回答
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 测试相同的命令运行测试,它应该可以工作。

于 2015-10-24T13:13:23.850 回答