用memtier-benchmark测试Redis集群版性能

一、memtier-benchmark安装步骤

法一

CentOS8.2 64bit环境 安装memtier-benchmark 【2021.04.19测试可用】

法二

memtier_benchmark:一种用于Redis和Memcached的工具环境配置和安装

二、memtier-benchmark测试命令说明及常用测试选项

[root@redis memtier_benchmark]# memtier_benchmark --help
Usage: memtier_benchmark [options]
A memcache/redis NoSQL traffic generator and performance benchmarking tool.

Connection and General Options:
  -s, --server=ADDR              Server address (default: localhost)
  -p, --port=PORT                Server port (default: 6379)
  -S, --unix-socket=SOCKET       UNIX Domain socket name (default: none)
  -P, --protocol=PROTOCOL        Protocol to use (default: redis).  Other
                                 supported protocols are memcache_text,
                                 memcache_binary.
  -a, --authenticate=CREDENTIALS Authenticate using specified credentials.
                                 A simple password is used for memcache_text
                                 and Redis <= 5.x. <USER>:<PASSWORD> can be
                                 specified for memcache_binary or Redis 6.x
                                 or newer with ACL user support.
      --tls                      Enable SSL/TLS transport security
      --cert=FILE                Use specified client certificate for TLS
      --key=FILE                 Use specified private key for TLS
      --cacert=FILE              Use specified CA certs bundle for TLS
      --tls-skip-verify          Skip verification of server certificate
      --sni=STRING               Add an SNI header
  -x, --run-count=NUMBER         Number of full-test iterations to perform
  -D, --debug                    Print debug output
      --client-stats=FILE        Produce per-client stats file
  -o, --out-file=FILE            Name of output file (default: stdout)
      --json-out-file=FILE       Name of JSON output file, if not set, will not print to json
      --hdr-file-prefix=FILE     Prefix of HDR Latency Histogram output files, if not set, will not save latency histogram files
      --show-config              Print detailed configuration before running
      --hide-histogram           Don't print detailed latency histogram
      --print-percentiles        Specify which percentiles info to print on the results table (by default prints percentiles: 50,99,99.9)
      --cluster-mode             Run client in cluster mode
  -h, --help                     Display this help
  -v, --version                  Display version information

Test Options:
  -n, --requests=NUMBER          Number of total requests per client (default: 10000)
                                 use 'allkeys' to run on the entire key-range
  -c, --clients=NUMBER           Number of clients per thread (default: 50)
  -t, --threads=NUMBER           Number of threads (default: 4)
      --test-time=SECS           Number of seconds to run the test
      --ratio=RATIO              Set:Get ratio (default: 1:10)
      --pipeline=NUMBER          Number of concurrent pipelined requests (default: 1)
      --reconnect-interval=NUM   Number of requests after which re-connection is performed
      --multi-key-get=NUM        Enable multi-key get commands, up to NUM keys (default: 0)
      --select-db=DB             DB number to select, when testing a redis server
      --distinct-client-seed     Use a different random seed for each client
      --randomize                random seed based on timestamp (default is constant value)

Arbitrary command:
      --command=COMMAND          Specify a command to send in quotes.
                                 Each command that you specify is run with its ratio and key-pattern options.
                                 For example: --command="set __key__ 5" --command-ratio=2 --command-key-pattern=G
                                 To use a generated key or object, enter:
                                   __key__: Use key generated from Key Options.
                                   __data__: Use data generated from Object Options.
      --command-ratio            The number of times the command is sent in sequence.(default: 1)
      --command-key-pattern      Key pattern for the command (default: R):
                                 G for Gaussian distribution.
                                 R for uniform Random.
                                 S for Sequential.
                                 P for Parallel (Sequential were each client has a subset of the key-range).

Object Options:
  -d  --data-size=SIZE           Object data size (default: 32)
      --data-offset=OFFSET       Actual size of value will be data-size + data-offset
                                 Will use SETRANGE / GETRANGE (default: 0)
  -R  --random-data              Indicate that data should be randomized
      --data-size-range=RANGE    Use random-sized items in the specified range (min-max)
      --data-size-list=LIST      Use sizes from weight list (size1:weight1,..sizeN:weightN)
      --data-size-pattern=R|S    Use together with data-size-range
                                 when set to R, a random size from the defined data sizes will be used,
                                 when set to S, the defined data sizes will be evenly distributed across
                                 the key range, see --key-maximum (default R)
      --expiry-range=RANGE       Use random expiry values from the specified range

Imported Data Options:
      --data-import=FILE         Read object data from file
      --data-verify              Enable data verification when test is complete
      --verify-only              Only perform --data-verify, without any other test
      --generate-keys            Generate keys for imported objects
      --no-expiry                Ignore expiry information in imported data

Key Options:
      --key-prefix=PREFIX        Prefix for keys (default: "memtier-")
      --key-minimum=NUMBER       Key ID minimum value (default: 0)
      --key-maximum=NUMBER       Key ID maximum value (default: 10000000)
      --key-pattern=PATTERN      Set:Get pattern (default: R:R)
                                 G for Gaussian distribution.
                                 R for uniform Random.
                                 S for Sequential.
                                 P for Parallel (Sequential were each client has a subset of the key-range).
      --key-stddev               The standard deviation used in the Gaussian distribution
                                 (default is key range / 6)
      --key-median               The median point used in the Gaussian distribution
                                 (default is the center of the key range)

WAIT Options:
      --wait-ratio=RATIO         Set:Wait ratio (default is no WAIT commands - 1:0)
      --num-slaves=RANGE         WAIT for a random number of slaves in the specified range
      --wait-timeout=RANGE       WAIT for a random number of milliseconds in the specified range (normal 
                                 distribution with the center in the middle of the range)

2.1 连接和通用选项

  • -s或–server=ADDR
    服务器地址(默认值为localhost: 127.0.0.1)
  • -p或–port=PORT
    服务器端口(默认值为6379)。
  • -S或–unix-socket=SOCKET
    UNIX域套接字的名称(默认值为none)。
  • -P或–protocol=PROTOCOL
    使用的协议(默认值为redis)。其他受支持的协议:memcache_text和memcache_binary.
  • -x或–run-count=NUMBER
    完整测试的迭代执行次数。
  • -D或–debug
    输出调试信息。
  • –client-stats=FILE
    生成每个客户端的统计文件。
  • –out-file=FILE
    输出结果文件的名称(默认值为stdout)。
  • –show-config
    运行基准测试之前,输出详细的配置信息。
  • –hide-histogram
    不输出详细的延迟柱状图。
  • –help
    输出帮助信息。
  • –version
    输出版本信息。

2.2 测试选项

  • -n或–requests=NUMBER
    每个客户端发出的请求总数(默认值为10000)。若使用“allkeys”,则基准测试会使用整个测试键的范围。

  • -c或–clients=NUMBER
    每个线程驱动的客户端的数量(默认值为50)。

  • -t或–threads=NUMBER
    基准测试使用的线程数量(默认值为4)。

  • –test-time=SECS
    基准测试的持续时间,以秒为单位。

  • –ratio=RATIO
    SET和GET操作的比率(默认值为1:10)。

  • –pipeline=NUMBER
    管道请求的并发数量(默认值为1)。

  • –reconnect-interval=NUM
    执行重新连接之后的请求数量。

  • –multi-key-get=NUM
    使用Redis的MGET命令,这个命令最多可以一次获取NUM个键的值(默认值为0)。

  • -a或–authenticate=CREDENTIALS
    登录Redis服务器时使用的凭证。根据使用的协议,可以是PASSWORD或USER:PASSWORD。

  • –select-db=DB
    当测试一台Redis服务器时,选择它的DB编号。

  • –distinct-client-seed
    每个客户端都使用一个不同的随机数种子。

  • –randomize
    基于时间戳的随机数种子(默认为常数值)。

2.3 对象选项

  • -d或–data-size=SIZE
    对象数据的大小(默认值为32字节)
  • –data-offset=OFFSET
    值的真实大小等于data-size + data-offset。基准测试将会使用Redis的SETRANGE和GETRANGE命令(默认值为0)。
  • -R或–random-data
    基准测试将会使用随机化的测试数据。
  • –data-size-range=RANGE
    基准测试使用的测试数据的大小是随机的,数据大小在指定的范围之内(min-max)。
  • –data-size-list=LIST
    根据权重列表设置测试数据的大小(size1:weight1,…sizeN:weightN)。
  • –data-size-pattern=R|S
    当这个选项设置为R时,就需要和–data-size-range选项一起使用,测试数据的大小将会在指定的范围之内随机取值。当这个选项设置为S时,定义的测试数据大小将会在测试键的范围之内均匀分布,请参考–key-maximum选项。默认值为R。
  • –expiry-range=RANGE
    测试键的过期时间是一个随机值,这个随机值在指定的范围之内。

2.4 导入数据选项

  • –data-import=FILE
    从文件中读取对象数据。
  • –data-verify
    当基准测试结束时,执行数据验证过程。
  • –verify-only
    只执行–data-verify选项的数据验证过程,而不会执行其他测试。
  • –generate-keys
    为导入的对象生成测试键。
  • –no-expiry
    忽略导入数据中的过期信息。

2.5 测试键选项

  • –key-prefix=PREFIX
    测试键的前缀(默认值为“memtier-”)。

  • –key-minimum=NUMBER
    测试键ID的最小值(默认值为0)。

  • –key-maximum=NUMBER
    测试键ID的最大值(默认值为10000000)。

  • SET和GET操作的访问模式(默认值为R:R)。可以取以下值:

G:高斯分布;
R:均匀随机;
S:连续访问;
P:并行访问(在连续访问模式中,每个客户端都具有测试键范围的一个子集)。

  • –key-stddev
    高斯分布使用的标准偏差(默认值为测试键范围的1/6)。
  • –key-median
    高斯分布使用的期望值(默认值为测试键范围的中心值)。

2.6 等待选项

  • –wait-ratio=RATIO
    SET和WAIT操作的比率(默认不使用WAIT命令,默认值为1:0)。
  • –num-slaves=RANGE
    等待指定范围之内的随机数量的从机作出应答。
  • –wait-timeout=RANGE
    等待指定范围之内的时间,单位为毫秒(正太分布的中心值在这个范围的中间)。

三、伪随机数据、高斯访问模式和范围操作

3.1 伪随机数据

  • memtier_benchmark基准测试工具能够生成随机化的测试数据,而数据大小则取决于已知的大小范围。
    ①首先,将–data-size-pattern选项设置为“S”(连续分配);
    ②然后,通过–data-size-range选项指定随机化的测试数据的大小范围。以下示例将会产生基准测试的键空间,其中的测试数据的大小将会在4字节至204字节之间均匀取值:
memtier-benchmark --random-data --data-size-range=4-204 --data-size-pattern=S --key-minimum=200 --key-maximum=400 <additional parameters>
  • 在上文的示例中:
    ①我们已经使用–random-data选项来生成随机数据了;
    ②除此之外,我们还使用–key-minimum和–key-maximum选项来控制测试键ID的取值范围,总共产生200个测试键。第一个测试键,memtier-200,将会持有4字节的数据;下一个测试键,将会持有5字节的数据;以此类推,直到最后一个测试键,memtier-400,将会持有204字节的数据。

3.2 高斯访问模式(也叫正态分布)

  • memtier_benchmark基准测试工具能够使用高斯分布(也叫做正态分布)来访问测试数据。在支持高斯访问模式之前,你可以将基准测试的访问模式设置为均匀随机分布或连续分布。但是,为了更好的模拟真实用例,你可以使用这个新的选项,确保memtier_benchmark的测试键访问模式符合常见的高斯分布的钟型曲线。当使用高斯分布时,你还可以控制和设置标准偏差和期望值,它们是高斯分布的关键参数。例如,你可以通过以下参数调用这个基准测试工具:
memtier-benchmark --random-data --data-size-range=4-204 --data-size-pattern=S --key-minimum=200 --key-maximum=400 --key-pattern=G:G --key-stddev=10 --key-median=300 <additional parameters>
  • 上述调用方式会将大部分的读/写访问集中在第100个(memtier-300)测试键上。

3.3 范围操作

  • memtier-benchmark基准测试工具支持Redis的SETRANGE和GETRANGE命令,可用于代替SET和GET命令。这个功能使得你在进行基准测试时,能够明显降低网络流量的消耗,同时你仍然可以使用较大的测试数据。例如,你可以将测试键的值的大小设置为1MB,但是只会读取和写入最后一个字节,你可以通过以下参数调用这个基准测试工具:
memtier-benchmark --data-offset=1048575 --data-size=1 <additional parameters>

四、测试用例展示

4.1 定制测试

./memtier_benchmark -s r-XXXX.redis.rds.aliyuncs.com -p 6379 -a XXX -c 20 -d 32 --threads=10 --ratio=1:1 --test-time=1800 --select-db=10
//memtier_benchmark -s {IP} -n {nreqs}  -c {connect_number}  -t 4 -d {datasize}
  • -s Redis数据库的连接地址
    –server=ADDR Server address (default: localhost)

  • -a Redis数据库的密码
    -authenticate=CREDENTIALS

  • -c 测试中模拟连接的客户端数量

  • -d 测试使用的对象数据的大小

  • –threads 测试中使用的线程数

  • –ratio 测试命令的读写比率(SET:GET Ratio)

  • –test-time 测试时长(单位:秒)

  • –select-db 测试使用的DB数量

4.2 快速测试

memtier_benchmark 

4.3 集群测试

memtier_benchmark --cluster-mode -s {IP} -n {nreqs} -c {connect_number} -t 4 -d {datasize}
  • QPS: 即Query Per Second,表示数据库每秒执行的命令数。

五、redis-benchmark和memtier_benchmark的差异

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值