Redis-cluster基准测试

时间:2014-11-11 05:12:25

标签: redis cluster-computing benchmarking

对redis-cluster进行基准测试的正确方法是什么(最近在3.0 RC中发布)。 AFAIK,redis-benchmark实用程序只能访问集群的一个节点。

编辑:(详细) 我没有任何聚类的单个redis实例提供了大约90 k的设置/获取操作的吞吐量,但群集设置失败了很长时间。

SETUP 1:8核心机器运行3个主站+ 3个从站的集群(全部在同一台机器上) 我还在同一台机器上运行3个基准测试工具。每个主节点的吞吐量降至25 k。

这让我觉得我可能会为我的机器上的核心数量运行太多的进程。

设置2:我将设置更新为3个主设备和0个从设备。有趣的是,这也无济于事,每台机器的吞吐量仍为25 k

我正在运行的基准测试命令是:redis-benchmark -p 7000 -n 10000000 -t set,get

对此方面的任何帮助都表示赞赏。

3 个答案:

答案 0 :(得分:7)

正如约西亚所说,你得到了2/3的错误。因此,要以正确的方式进行基准测试,请确定每个节点中肯定存在的密钥(只需连接redis-cli并使用GET / SET暴力强制名称)。然后使用redis-benchmark使用您发现的密钥(例如,在节点A中)作为哈希标记,以便仅生成将散列到该节点的密钥。所以你可以这样做:

redis-benchmark -r 100000 -n 1000000 set 'key{your_hash_tag}:__rand_int__' __rand_int__

通过这种方式,您将生成不同的100k随机密钥,其名称将散列到您正在测试的节点。在上面的示例中,your_hash_tag只是您在测试的节点中找到的密钥名称。

答案 1 :(得分:2)

首先,我不清楚您实际上是在使用您的描述对多个Redis群集主服务器进行基准测试。你说,“我正在运行的基准测试命令是:redis-benchmark-7000 -n 10000000 -t set,get”。这实际上只会对单个Redis集群主机进行基准测试,特别是端口7000的基准测试。如果要对其他服务器进行基准测试,则必须在多次运行redis-benchmark时使用不同的端口号(使用-p选项)。

现在,即使您运行不同的命令来命中群集的不同主服务器,您执行的大约2/3的命令也会导致错误而不是正常的命令执行,因为redis-benchmark命令正在发送命令到群集服务器,并且该群集服务器不一定保存正在操作的密钥的分片。

但你真正强调的是,似乎没有一个现成的解决方案来对Redis集群进行基准测试。一个适当的基准测试需要找出哪些分片在哪里,根据服务器和分片计算操作键,然后最后发送命令来执行基准测试,但如果分片在基准测试期间移动,也会引发错误。据我所知,执行此操作的软件尚不存在。

答案 2 :(得分:-11)

使用我自己的答案更新此帖子,以免将答案隐藏在评论之下。在对群集进行基准测试时,必须注意分发“redis-benchmark”。效用。从同一台机器运行它们,更糟糕的是从运行redis集群的同一台机器运行它们是降低吞吐量的好方法。从另一台机器运行“redis-benchmark”解决了我的吞吐量问题。 另外,正如antirez指出的那样,应该向每个节点发送正确的密钥,这样你就不会处理2/3错误。