【问题标题】:Redis-cluster benchmarkingRedis 集群基准测试
【发布时间】:2014-11-25 11:07:13
【问题描述】:

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

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

SETUP 1: 8 核机器运行 3 个主机 + 3 个从机的集群(都在同一台机器上) 我还在同一台机器上运行 3 个基准测试实用程序。每个主节点的吞吐量下降到 25k。

这让我觉得我可能在我的机器上运行了太多的进程。

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

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

我们将不胜感激。

【问题讨论】:

  • 您好,您说的是“Redis 集群”,还是只是一个实例集群?
  • @antirez,我不确定有什么区别,但我正在使用 redis 2.9.101 并使用此 redis.io/topics/cluster-tutorial 设置。
  • @Raul-你看过 Redis Lab 的 Redis Cluster 基准测试吗:highscalability.com/blog/2014/8/27/…
  • @Maziyar- 是的。但是,他们使用流水线,这在我的情况下不适用。此外,正如我在下面的答案中提到的,从不同机器上的多个客户端运行基准测试有很大帮助,我可以在单台机器上轻松实现 400K QPS(当然有多个 redis 节点)。我确信 QPS 可以增加到更高的值。希望对您有所帮助。

标签: redis cluster-computing benchmarking


【解决方案1】:

正如 Josiah 所说,您遇到了 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 只是您在正在测试的节点中发现的键名。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 您仍然只有 1/3 的命令执行正确和完整,2/3 将由于在错误的分片上操作而返回错误。
    • 但是当我运行相同的设置并仅在一个端口上运行基准测试时,我得到了 90 k 的吞吐量,这与运行单个实例相同。这是怎么发生的?
    • 如果 2/3 的操作转到错误的分片会降低效率,那么当我只在集群的一个节点上运行基准测试时,它也会降低吞吐量。然而,这没有被观察到。
    • 可能你有 N 个内核,并且在 redis-server 和 redis-benchmark 实例之间总共产生 N+M 个进程。因此,您开始看到 ops/sec 下降,因为您使用 N 手进行 N+M 工作。
    • 为了大家的利益更新这个帖子。刚刚通过不同的设置确认,击中集群节点的 2/3 键错误实际上并没有降低性能。 antirez 的评论离家更近了。我的设置没有按要求使用所有内核。然而,我将设置转移到另一台机器上并从另一组机器上运行基准测试,我的吞吐量几乎呈线性增长。 vm 上的单个节点:吞吐量(无集群)= 55k qps。在单个 vm 上运行的 7 个节点的集群(所有主节点)= 42k qps *7
    【解决方案3】:

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

    【讨论】:

    • 很好,您使用其他人的答案回答了自己的问题,然后接受了您自己的答案。糟糕的形式...
    猜你喜欢
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 2016-06-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    相关资源
    最近更新 更多