我正在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
它返回错误。你能帮我解决一下这个问题吗?
答案 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测试相同的命令运行测试,它应该可以工作。