Redis 存储分片之代理服务Twemproxy 测试
Redis 存储分片之代理服务Twemproxy 测试
转载自:http://blog.jpush.cn/redis-twemproxy-benchmark/
概述
实际业务场景中单点 Redis 容量、并发都是有限的,所以有 Redis Cluster 的需求。
但是官方的 Redis Cluster 一再跳票,还不可用。
只好先使用最简单的方式:Proxy。有很多可选,但在大范围生产使用的, Twitter 开源的 Twemproxy 看起来是个理想的选择 - https://github.com/twitter/twemproxy 。
我们期望的目标:
tag/alias 缓存集群(现在单点容量支持越来越不够)
数据统计时高并发缓存
下面的文章内容也是基于实际生产需要而进行的一系列测试.
测试环境说明
本次测试的机器都是虚拟机,对应的母机配置为 Dell R710 Intel(R) Xeon(R) CPU E5606 @ 2.13GHz 2CPU(单CPU 4核) 32G内存,上面安装了4台虚拟机,配置分别如下:
序号 | 机器IP | 配置 | 部署服务 | redis服务数量 |
1 | 192.168.2.65 | 4cpu,8GRam | redis,twemproxy | 4个端口分别为(10000,10002,10003,10004) |
2 | 192.168.2.66 | 4cpu,8GRam | redis | 2个端口分别为(10000,10002) |
3 | 192.168.2.67 | 4cpu,8GRam | redis | 2个端口分别为(10000,10002) |
4 | 192.168.2.68 | 4cpu,4GRam | redis,twemproxy | 2个端口分别为(10000,10002) |
虚拟机系统: CentOS release 6.3 (Final)
Redis版本:2.6.16
Twemproxy版本:nutcracker-0.2.4
部署示意图
下面的测试都是根据上面的配置不同组合来进行测试得出对应的结论。
测试工具:Redis Benchmark.
测试结论
功能
前端使用 Twemproxy 做代理,后端的 Redis 数据能基本上根据 key 来进行比较均衡的分布。
后端一台 Redis 挂掉后,Twemproxy 能够自动摘除。恢复后,Twemproxy 能够自动识别、恢复并重新加入到 Redis 组中重新使用。
Redis 挂掉后,后端数据是否丢失依据 Redis 本身的策略配置,与 Twemproxy 基本无关。
如果要新增加一台 Redis,Twemproxy 需要重启才能生效;并且数据不会自动重新 Reblance,需要人工单独写脚本来实现。
如同时部署多个 Twemproxy,配置文件一致(测试配置为distribution:ketama,modula),则可以从任意一个读取,都可以正确读取 key对应的值。
多台 Twemproxy 配置一样,客户端分别连接多台 Twemproxy可以在一定条件下提高性能。根据 Server 数量,提高比例在 110-150%之间。
如原来已经有 2 个节点 Redis,后续有增加 2 个 Redis,则数据分布计算与原来的 Redis 分布无关,现有数据如果需要分布均匀的话,需要人工单独处理。
如果 Twemproxy 的后端节点数量发生变化,Twemproxy 相同算法的前提下,原来的数据必须重新处理分布,否则会存在找不到key值的情况。
性能
不管 Twemproxy 后端有几台 Redis,前端的单个 Twemproxy 的性能最大也只能和单台 Redis 性能差不多。
Twemproxy介绍
Twemproxy 也叫 nutcraker。是 Twtter 开源的一个 Redis 和 Memcache 代理服务器,主要用于管理 Redis 和 Memcached 集群,减少与Cache 服务器直接连接的数量。
Twemproxy特性:
轻量级、快速
保持长连接
减少了直接与缓存服务器连接的连接数量
使用 pipelining 处理请求和响应
支持代理到多台服务器上
同时支持多个服务器池
自动分片数据到多个服务器上
实现完整的 memcached 的 ASCII 和再分配协议
通过 yaml 文件配置服务器池
支持多个哈希模式,包括一致性哈希和分布
能够配置删除故障节点
可以通过端口监控状态
支持 linux, *bsd,os x 和 solaris
Twemproxy安装配置参考官网:https://github.com/twitter/twemproxy 或 附后的 Reference。
启动命令:
[code=bash;toolbar:false">$/usr/local/twemproxy/sbin/nutcracker -d -c /usr/local/twemproxy/etc/test.yml -i 2000 -o logs/nutcracker.log或者修改源码的 scripts 中的 ini 代码以 service 方式启动。
运行中如果需要查看运行状态使用下面方式,结果为json格式,需要自己格式化。
1.web界面运行启动服务的http://ip:22222查看,如本次测试查看url:http://192.168.2.68:22222/
2.使用nc命令查看 Twemproxy 状态语句:$nc 192.168.2.68 22222|python -mjson.tool
[p]- Redis 存储分片之代理服务Twemproxy 测试
- Redis 存储分片之代理服务Twemproxy 测试
- Redis 存储分片之代理服务Twemproxy 测试
- Redis 存储分片之代理服务Twemproxy 测试
- Redis 代理服务Twemproxy(转)
- Redis 代理服务Twemproxy
- Redis 代理服务Twemproxy(转)
- Redis 代理服务Twemproxy(redis分布式中间件)
- Twemproxy,Twitter 发布的 Redis 代理服务
- Redis 代理服务Twemproxy
- 通过Python利用ADSL服务器和tinyproxy构建数据自己的动态代理IP池,用django+redis做web服务 (优化版)
- Redis 代理服务Twemproxy
- redis测试服务所在目录
- Twemproxy——针对MemCached与Redis的代理
- Redis3.0.3的安装、测试、服务启动、密码设置
- 建立一套MySQL及Redis搭建统一的KV存储服务
- 基于业务封装API进行Redis服务性能测试记录
- Redis 代理服务Twemproxy
- .Net程序测试阿里云OSS开放存储服务
- Redis 代理服务Twemproxy