engineer feng的实验报告(redis集群性能测试)

目录

  • 测试环境描述/简介
  • 宕机测试
  • 性能测试/压力测试

环境

redis版本:4.0.10

节点信息:172.30.0.[91 - 99] ,9个节点,三个作为主节点,每个主有两个从。看图:

宕机测试

测试1 :停止两个主节点。

目的:从节点,是否会自动选取出主节点,查看数据能否正常读取,是否能够读取宕机槽点中的数据,测试我们所说的高可用。

从图中看出我们 Master 为91 ,92, 93。95跟96为91的从节点,97跟98为92的从节点,94跟99为93的从节点。我们设置了几个数据,分别是test -> test , test2 -> test , abcd -> test , key -> test ,其中key为 "test" ,"test2" ,"abcd"在92节点,key为 "key"的在93节点。

现在我们停止93节点,然后获取"key",看下效果。

很明显,获取成功,93节点断掉并没有影响我们获取数据。从从节点中推举出99来做我们的主节点。有了这个选举特性,我们假设我们每个主从节点中只保留一个节点,是不影响我们的正常业务的。我们只剩下94,98,96 测试如下:

集群状态不对了,所以我们结论是错误的,我们继续测试,这时我们一个一个关闭。重启集群,查看cluster info 发现 95有3个从,但是不影响我们测试,先关闭95,等待同步,同步成功:

选举成功。我们现在关闭93,等待同步,同步成功:

到这里我们选举还是成功的,现在是 96master -> 91salve , 99master -> 94slave ,97 master-> 92slave->98slave. 陆续关闭97,现在为止都没有异常,现在所有主都只有一个从节点

关闭96

关闭92

92出现选举失败,重启92节点,然后关闭98,92节点还是成功选举了。

我们关闭最后一个99,继续重启99,关闭94

跟我们预想的一样,最后是可以剩下三个主的,槽点数据还是能正常访问。

最后我们挂掉,主节点,看下效果并获取数据。

集群挂掉了,并不能成功获取数据,重启99

结论:集群中,我们主节点宕机,redis集群会从从节点中选出一个做为我们的master,虽然选举过程并不那么完美,当然这种集群方案可以再进行调优。另外实验证明,集群必须保证当初分配的所有槽点(slot)必须完整存在,不然一样无法正常获取数据,当无法选举成功的时候,集群是无法正常访问的。

性能测试

我笔记本是i5 + 8G + 256G mac pro 2018。我没有限制redis节点的资源限制,数据仅供参考,实际还是自己的环境中测试为准。我们测试使用redis自带的测试工具——redis-benchmark

新建测试环境

测试结果如下:

语句

docker exec redis91 /data/redis-4.0.10/src/redis-benchmark -h 172.30.0.91 -n 100000 -c 20

====== PING_INLINE ======
  100000 requests completed in 1.48 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

99.82% <= 1 milliseconds
99.98% <= 2 milliseconds
100.00% <= 2 milliseconds
67796.61 requests per second

====== PING_BULK ======
  100000 requests completed in 1.53 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

99.89% <= 1 milliseconds
99.99% <= 6 milliseconds
100.00% <= 6 milliseconds
65530.80 requests per second

====== SET ======
  100000 requests completed in 1.52 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

99.85% <= 1 milliseconds
99.98% <= 3 milliseconds
100.00% <= 6 milliseconds
100.00% <= 6 milliseconds
65616.80 requests per second

====== GET ======
  100000 requests completed in 1.50 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

99.96% <= 1 milliseconds
100.00% <= 1 milliseconds
66666.66 requests per second

====== INCR ======
  100000 requests completed in 1.54 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

99.97% <= 1 milliseconds
100.00% <= 1 milliseconds
64724.92 requests per second

====== LPUSH ======
  100000 requests completed in 2.85 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

99.17% <= 1 milliseconds
99.97% <= 2 milliseconds
99.98% <= 3 milliseconds
100.00% <= 3 milliseconds
35075.41 requests per second

====== RPUSH ======
  100000 requests completed in 2.68 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

99.60% <= 1 milliseconds
100.00% <= 2 milliseconds
37355.25 requests per second

====== LPOP ======
  100000 requests completed in 2.84 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

99.49% <= 1 milliseconds
99.98% <= 2 milliseconds
99.99% <= 6 milliseconds
100.00% <= 6 milliseconds
35248.50 requests per second

====== RPOP ======
  100000 requests completed in 3.08 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

98.94% <= 1 milliseconds
99.95% <= 2 milliseconds
99.95% <= 3 milliseconds
99.96% <= 9 milliseconds
99.98% <= 10 milliseconds
100.00% <= 10 milliseconds
32499.19 requests per second

====== SADD ======
  100000 requests completed in 1.52 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

99.91% <= 1 milliseconds
100.00% <= 1 milliseconds
65789.48 requests per second

====== HSET ======
  100000 requests completed in 1.51 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

99.94% <= 1 milliseconds
100.00% <= 1 milliseconds
66181.34 requests per second

====== SPOP ======
  100000 requests completed in 1.57 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

99.88% <= 1 milliseconds
100.00% <= 2 milliseconds
100.00% <= 2 milliseconds
63816.21 requests per second

====== LPUSH (needed to benchmark LRANGE) ======
  100000 requests completed in 3.15 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

98.90% <= 1 milliseconds
99.97% <= 2 milliseconds
99.99% <= 3 milliseconds
99.99% <= 11 milliseconds
100.00% <= 11 milliseconds
31695.72 requests per second

====== LRANGE_100 (first 100 elements) ======
  100000 requests completed in 2.09 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

99.61% <= 1 milliseconds
100.00% <= 1 milliseconds
47938.64 requests per second

====== LRANGE_300 (first 300 elements) ======
  100000 requests completed in 4.18 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

98.07% <= 1 milliseconds
99.97% <= 2 milliseconds
100.00% <= 3 milliseconds
23894.86 requests per second

====== LRANGE_500 (first 450 elements) ======
  100000 requests completed in 5.24 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

97.92% <= 1 milliseconds
99.97% <= 2 milliseconds
100.00% <= 2 milliseconds
19083.97 requests per second

====== LRANGE_600 (first 600 elements) ======
  100000 requests completed in 6.51 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

93.52% <= 1 milliseconds
99.90% <= 2 milliseconds
100.00% <= 3 milliseconds
100.00% <= 3 milliseconds
15349.19 requests per second

====== MSET (10 keys) ======
  100000 requests completed in 1.56 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

99.95% <= 1 milliseconds
100.00% <= 1 milliseconds
63979.53 requests per second

可以看出 set 6w+/1s, get 6w+/s.速度还是蛮快的。

测试下单点性能:

====== PING_INLINE ======
  100000 requests completed in 1.52 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

99.93% <= 1 milliseconds
100.00% <= 2 milliseconds
100.00% <= 2 milliseconds
65789.48 requests per second

^CNG_BULK: 66812.63
fengzepeideMacBook-Pro:redis fengzepei$ docker exec redis100 /data/redis-4.0.10/src/redis-benchmark -h 127.0.0.1 -n 100000 -c 20
====== PING_INLINE ======
  100000 requests completed in 3.53 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

81.25% <= 1 milliseconds
98.64% <= 2 milliseconds
99.49% <= 3 milliseconds
99.53% <= 5 milliseconds
99.55% <= 7 milliseconds
99.58% <= 8 milliseconds
99.63% <= 9 milliseconds
99.71% <= 10 milliseconds
99.82% <= 11 milliseconds
99.88% <= 12 milliseconds
99.91% <= 13 milliseconds
99.92% <= 16 milliseconds
99.95% <= 18 milliseconds
99.96% <= 19 milliseconds
99.98% <= 20 milliseconds
100.00% <= 20 milliseconds
28368.79 requests per second

====== PING_BULK ======
  100000 requests completed in 3.50 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

83.11% <= 1 milliseconds
98.88% <= 2 milliseconds
99.30% <= 3 milliseconds
99.38% <= 4 milliseconds
99.43% <= 5 milliseconds
99.47% <= 6 milliseconds
99.48% <= 7 milliseconds
99.53% <= 8 milliseconds
99.59% <= 9 milliseconds
99.70% <= 10 milliseconds
99.86% <= 11 milliseconds
99.88% <= 12 milliseconds
99.92% <= 13 milliseconds
99.96% <= 17 milliseconds
99.98% <= 18 milliseconds
99.99% <= 20 milliseconds
100.00% <= 20 milliseconds
28604.12 requests per second

====== SET ======
  100000 requests completed in 2.58 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

98.59% <= 1 milliseconds
99.69% <= 2 milliseconds
99.91% <= 3 milliseconds
99.93% <= 10 milliseconds
99.97% <= 12 milliseconds
99.99% <= 13 milliseconds
100.00% <= 13 milliseconds
38789.76 requests per second

====== GET ======
  100000 requests completed in 2.69 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

98.15% <= 1 milliseconds
99.59% <= 2 milliseconds
99.90% <= 3 milliseconds
99.91% <= 5 milliseconds
99.93% <= 9 milliseconds
99.96% <= 10 milliseconds
99.97% <= 11 milliseconds
99.99% <= 19 milliseconds
100.00% <= 19 milliseconds
37160.91 requests per second

====== INCR ======
  100000 requests completed in 2.82 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

98.21% <= 1 milliseconds
99.35% <= 2 milliseconds
99.68% <= 3 milliseconds
99.76% <= 4 milliseconds
99.78% <= 5 milliseconds
99.80% <= 6 milliseconds
99.80% <= 8 milliseconds
99.82% <= 9 milliseconds
99.85% <= 10 milliseconds
99.92% <= 11 milliseconds
99.95% <= 12 milliseconds
99.96% <= 18 milliseconds
99.99% <= 22 milliseconds
100.00% <= 22 milliseconds
35511.36 requests per second

====== LPUSH ======
  100000 requests completed in 2.83 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

98.04% <= 1 milliseconds
99.59% <= 2 milliseconds
99.88% <= 3 milliseconds
99.92% <= 4 milliseconds
99.94% <= 9 milliseconds
99.95% <= 10 milliseconds
99.99% <= 17 milliseconds
99.99% <= 19 milliseconds
100.00% <= 20 milliseconds
100.00% <= 20 milliseconds
35348.18 requests per second

====== RPUSH ======
  100000 requests completed in 2.86 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

97.70% <= 1 milliseconds
99.46% <= 2 milliseconds
99.87% <= 3 milliseconds
99.94% <= 4 milliseconds
99.96% <= 5 milliseconds
99.96% <= 7 milliseconds
99.97% <= 9 milliseconds
99.97% <= 10 milliseconds
99.99% <= 19 milliseconds
100.00% <= 19 milliseconds
34916.20 requests per second

====== LPOP ======
  100000 requests completed in 2.80 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

98.06% <= 1 milliseconds
99.49% <= 2 milliseconds
99.84% <= 3 milliseconds
99.90% <= 4 milliseconds
99.93% <= 5 milliseconds
99.94% <= 6 milliseconds
99.96% <= 8 milliseconds
99.97% <= 10 milliseconds
99.99% <= 14 milliseconds
100.00% <= 14 milliseconds
35739.81 requests per second

====== RPOP ======
  100000 requests completed in 2.74 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

98.24% <= 1 milliseconds
99.75% <= 2 milliseconds
99.89% <= 3 milliseconds
99.96% <= 9 milliseconds
99.97% <= 10 milliseconds
99.98% <= 20 milliseconds
100.00% <= 20 milliseconds
36523.01 requests per second

====== SADD ======
  100000 requests completed in 2.91 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

97.41% <= 1 milliseconds
99.24% <= 2 milliseconds
99.68% <= 3 milliseconds
99.76% <= 4 milliseconds
99.77% <= 5 milliseconds
99.77% <= 6 milliseconds
99.80% <= 8 milliseconds
99.82% <= 9 milliseconds
99.86% <= 10 milliseconds
99.95% <= 11 milliseconds
99.97% <= 12 milliseconds
99.99% <= 13 milliseconds
99.99% <= 20 milliseconds
100.00% <= 20 milliseconds
34340.66 requests per second

====== HSET ======
  100000 requests completed in 2.77 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

98.69% <= 1 milliseconds
99.67% <= 2 milliseconds
99.82% <= 3 milliseconds
99.82% <= 5 milliseconds
99.83% <= 6 milliseconds
99.84% <= 8 milliseconds
99.86% <= 9 milliseconds
99.91% <= 10 milliseconds
99.94% <= 11 milliseconds
99.97% <= 12 milliseconds
99.98% <= 18 milliseconds
100.00% <= 18 milliseconds
36088.05 requests per second

====== SPOP ======
  100000 requests completed in 2.74 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

98.55% <= 1 milliseconds
99.59% <= 2 milliseconds
99.81% <= 3 milliseconds
99.88% <= 8 milliseconds
99.90% <= 9 milliseconds
99.90% <= 10 milliseconds
99.97% <= 12 milliseconds
99.99% <= 15 milliseconds
100.00% <= 16 milliseconds
100.00% <= 16 milliseconds
36496.35 requests per second

====== LPUSH (needed to benchmark LRANGE) ======
  100000 requests completed in 2.67 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

98.30% <= 1 milliseconds
99.59% <= 2 milliseconds
99.92% <= 3 milliseconds
100.00% <= 3 milliseconds
37495.31 requests per second

====== LRANGE_100 (first 100 elements) ======
  100000 requests completed in 2.61 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

98.90% <= 1 milliseconds
99.69% <= 2 milliseconds
99.84% <= 3 milliseconds
99.88% <= 4 milliseconds
99.90% <= 9 milliseconds
99.91% <= 10 milliseconds
99.95% <= 11 milliseconds
99.99% <= 18 milliseconds
100.00% <= 18 milliseconds
38284.84 requests per second

====== LRANGE_300 (first 300 elements) ======
  100000 requests completed in 2.60 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

98.86% <= 1 milliseconds
99.61% <= 2 milliseconds
99.88% <= 3 milliseconds
99.95% <= 4 milliseconds
99.99% <= 5 milliseconds
100.00% <= 22 milliseconds
100.00% <= 22 milliseconds
38476.34 requests per second

====== LRANGE_500 (first 450 elements) ======
  100000 requests completed in 1.53 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

99.94% <= 1 milliseconds
100.00% <= 1 milliseconds
65402.22 requests per second

====== LRANGE_600 (first 600 elements) ======
  100000 requests completed in 1.50 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

99.98% <= 1 milliseconds
100.00% <= 1 milliseconds
66711.14 requests per second

====== MSET (10 keys) ======
  100000 requests completed in 1.44 seconds
  20 parallel clients
  3 bytes payload
  keep alive: 1

99.95% <= 1 milliseconds
100.00% <= 1 milliseconds
69589.42 requests per second

总结:看得出单点的性能远远没有集群性能高,而且没有集群的高可用,所以集群方案在生产环境是必不可少的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值