美文网首页数客联盟我爱编程
codis/redis集群性能分析

codis/redis集群性能分析

作者: raindaywhu | 来源:发表于2018-01-25 00:07 被阅读72次

本文以codis集群为例,介绍redis集群的性能分析方法,其他的redis 集群版本比如redis cluster分析方法也类似, 希望对大家工程实践有帮助。

1 redis 单节点基准性能

redis本身自带了一个性能测试工具 redis-benchmark
该工具可以模拟多客户端同时向某个redis节点发送大量的请求,以测试该redis节点的性能。
典型的使用方式为:

$ redis-benchmark -n 1000 -t set,get -P 16 -q -c 1 -d  10
SET: 403063.28 requests per second
GET: 508388.41 requests per second

其中-n指定了请求总数, -P指定了pipeline模式的请求数, c指定了客户端个数 t指定了请求类型,-d指定了请求中value以字节为单位的大小(可以使用-h 获取该工具的帮助说明)
有了该工具后,我们就可以测试出单个redis节点的实际性能。
影响redis节点性能的因素包括:

  1. 网络的吞吐和延迟 千兆、万兆网络
  2. cpu 比如是否打开cpu节能
  3. 磁盘 如果是虚拟化的磁盘可能会影响性能
  4. redis节点的连接数 30000个连接的redis节点性能只有100个连接的一半

一些更深入的性能因素包括:

  1. 网卡的中断配置 使得cpu的多个core都可以响应网络中断 提高系统的网络性能
  2. redis 内存分配器

根据官方的说明,一个redis节点能够提供的ops峰值在10w左右。和具体的请求、硬件配置、网络有关。在我自己的测试环境中,未进行任何特殊 优化的redis节点的ops在1w左右。
值得注意的是redis节点是单线程的,并不能充分利用多核cpu的性能,只有当超过redis性能时,我们可以考虑一台主机上启动多个实例。

2 codis 集群性能分析

codis集群中,通过代理节点proxy去访问后端的redis节点。proxy根据zookeeper中存储全局数据的slot分区信息,选择该key对应的redis节点,redis读写完成后数据又再次回到proxy,返回给客户端。
proxy ==> redis ==> proxy
根据codis的官方解释,理论上proxy只会降低redis-server一半的性能。另外,proxy会连接所有的redis server以读写所有slot的数据。
在开始分析集群性能之前,我们可以对单台proxy/redis-server 进行性能测试,这样集群的整体性能我们已经可以估算出来。我们需要确认整个系统中,每分钟/秒钟向codis集群中写入的数据量,是否理论上能够满足。 理论值都无法满足时,我们就需要从硬件升级、横向扩容上考虑codis集群的升级。
为了进一步分析codis集群的性能问题,我们可以按照下述方法去分析集群:

  1. 检查proxy、redis server的连接数。 注意系统配置中ulimit -n的值是否设置的太小。
  2. proxy默认是WARN日志,打开INFO日志,分析日志中是否有异常。
    打开方法:./codis-admin --proxy=10.1.236.65:11080 --log-level=INFO
  3. 使用上面提到的redis-benchmark工具分别去测试proxy 、codis-server的性能。
    如果直接访问redis server性能正常,proxy的性能比redis-server下降了太多,比如只有十分之一,那么proxy到redis-server之间应该是出现了异常。很大的可能是网络的异常,由于通过proxy测试时,会向多台redis-server之间发起读写请求,那么可以测试从该proxy节点向其他的redis-server执行redis-benchmark性能是否有异常,以进一步分析问题。
    注意,如果是线上集群,redis-benchmark不要指定太大的数据量,以避免写入过多的垃圾数据。
  4. redis 性能分析 可以通过redis的slowlog 来分析是否有响应缓慢的请求, 通过命令CONFIG GET slowlog-log-slower-than 来配置记录的slowlog的阈值,注意单位是毫秒,默认为0。
redis 127.0.0.1:6379> slowlog get 2
1) 1) (integer) 14
   2) (integer) 1309448221
   3) (integer) 15
   4) 1) "ping"
2) 1) (integer) 13
   2) (integer) 1309448128
   3) (integer) 30
   4) 1) "slowlog"
      2) "get"
      3) "100"

参考:
redis benchmark https://redis.io/topics/benchmarks
redis slowlog https://redis.io/topics/latency

相关文章

  • codis/redis集群性能分析

    本文以codis集群为例,介绍redis集群的性能分析方法,其他的redis 集群版本比如redis cluste...

  • Ansible Role 数据库 之【codis】

    Ansible Role: Codis 安装Codis集群 介绍 Codis 是一个分布式 Redis 解决方案,...

  • macos 10.12配置redis3.2.10伪集群

    redis的集群方案现在主要有三种(不考虑云集群),一种是豌豆荚的codis,codis是豌豆荚的团队在redis...

  • Codis 集群

    一、codis介绍codis是一个分布式redis集群解决方案,对于上层的应用来说, 连接到codis-proxy...

  • redis集群搭建

    前言: 昨天公司要求搭建一个redis原生集群,之前一直用的codis集群(go语言 redis集群工具),想看看...

  • 基于Codis的Redis集群部署

    Codis是基于代理的高性能Redis集群方案,使用Go语言进行开发,现在在在豌豆荚及其它公司内已经广泛使用,当然...

  • 基于Redis集群方案的调研及思考

    Redis集群方案 官方主从模式哨兵模式Redis Cluster 社区Codis(豌豆荚团队开源)Twempro...

  • Redis集群性能问题深度分析

    Redis集群性能问题深度分析 参考 Redis开发与运维https://redis.io/http://www....

  • codis安装部署

    codis架构 Codis组件 Codis 3.x 由以下组件组成: Codis FE:集群管理界面多个集群实例共...

  • 玩转Redis集群之Cluster

    前面我们介绍了国人自己开发的Redis集群方案——Codis,Codis友好的管理界面以及强大的自动平衡槽位的功能...

网友评论

    本文标题:codis/redis集群性能分析

    本文链接:https://www.haomeiwen.com/subject/ojdpaxtx.html