设为首页 收藏本站
查看: 616|回复: 0

[经验分享] 用twemproxy搭建redis集群

[复制链接]

尚未签到

发表于 2016-12-18 10:01:07 | 显示全部楼层 |阅读模式
最近利用twitter的开源twemproxy做redis的代理,实现redis集群的功能。twemproxy利用一致性hash算法将key进行hash,使众多的key叫均匀的分布在后端各个redis中。值得注意的是这种hash粒度是key级别的,同一个key只会放在一个redis实例里,不同的key可能分布在不同的redis实例。
一、简介
引用
Twitter,世界最大的Redis集群之一部署在Twitter用于为用户提供时间轴数据。Twitter Open Source部门提供了Twemproxy。
     Twemproxy,也叫nutcraker。是一个twtter开源的一个redis和memcache代理服务器。 redis作为一个高效的缓存服务器,非常具有应用价值。但是当使用比较多的时候,就希望可以通过某种方式 统一进行管理。避免每个应用每个客户端管理连接的松散性。同时在一定程度上变得可以控制。
      Twemproxy是一个快速的单线程代理程序,支持Memcached ASCII协议和更新的Redis协议:
     它全部用C写成,使用Apache 2.0 License授权。项目在Linux上可以工作,而在OSX上无法编译,因为它依赖了epoll API.
      Twemproxy 通过引入一个代理层,可以将其后端的多台 Redis 或 Memcached 实例进行统一管理与分配,使应用程序只需要在 Twemproxy 上进行操作,而不用关心后面具体有多少个真实的 Redis 或 Memcached 存储。


二、twemproxy特性:
引用
支持失败节点自动删除
可以设置重新连接该节点的时间
可以设置连接多少次之后删除该节点
该方式适合作为cache存储
支持设置HashTag
通过HashTag可以自己设定将两个KEYhash到同一个实例上去。
减少与redis的直接连接数
保持与redis的长连接
可设置代理与后台每个redis连接的数目
自动分片到后端多个redis实例上
多种hash算法:能够使用不同的策略和散列函数支持一致性hash。
可以设置后端实例的权重
避免单点问题
可以平行部署多个代理层.client自动选择可用的一个
支持redis pipelining request
     支持请求的流式与批处理,降低来回的消耗
支持状态监控
可设置状态监控ip和端口,访问ip和端口可以得到一个json格式的状态信息串
可设置监控信息刷新间隔时间
高吞吐量
连接复用,内存复用。
将多个连接请求,组成reids pipelining统一向redis请求。

三、安装
安装前提条件是必须有libtool,没有的可以自行安装,很简单。另外必须有autoconf,而且版本稍高点更好,有时需要升级才能用,我的就是这种情况。有这两个条件之后就可以动手了。
1.从git上将最新的code clone下来。
Java代码  收藏代码
$ git clone https://github.com/twitter/twemproxy.git   

2.开始编译,安装
$ cd  twemproxy/  
$ CFLAGS="-ggdb3 -O0" autoreconf -fvi && ./configure --enable-debug=log && make && sudo make install   


3.上一步的,可能会有一些依赖包要先安装,安装后再执行下编译安装即可。 安装完了之后修改配置文件,配置文件目录软件目录/conf/nutcracker.yml.我本次安装采用两个twemproxy实例、3个redis实例,配置内容如下:
redis1:
listen: 192.168.30.106:6311 #使用哪个端口启动Twemproxy
redis: true #是否是Redis的proxy
hash: fnv1a_64 #指定具体的hash函数
distribution: ketama #具体的hash算法
auto_eject_hosts: true #是否在结点无法响应的时候临时摘除结点
timeout: 4000 #超时时间(毫秒)
server_retry_timeout: 2000 #重试的时间(毫秒)
server_failure_limit: 1 #结点故障多少次就算摘除掉
servers: #下面表示所有的Redis节点(IP:端口号:权重)
- 127.0.0.1:6379:1
- 127.0.0.1:6389:1
- 127.0.0.1:6369:1

redis2:
listen: 192.168.30.106:6321 #使用哪个端口启动Twemproxy
redis: true #是否是Redis的proxy
hash: fnv1a_64 #指定具体的hash函数
distribution: ketama #具体的hash算法
auto_eject_hosts: true #是否在结点无法响应的时候临时摘除结点
timeout: 4000 #超时时间(毫秒)
server_retry_timeout: 2000 #重试的时间(毫秒)
server_failure_limit: 1 #结点故障多少次就算摘除掉
servers: #下面表示所有的Redis节点(IP:端口号:权重)
- 127.0.0.1:6379:1
- 127.0.0.1:6389:1
- 127.0.0.1:6369:1


4.开启twemproxy
虽然,安装编译会在/usr/bin里有nutcracker的快捷,但是切记不能这样开启。需要:

$ cd twemproxy/  
$ /src/nutcracker  -t    ##先测试下配置文件是否正确  

配置文件是conf/nutcracker.yml ,如果 -t 测试通过,则可以进行启动,配置好自己的环境。

$  /src/nutcracker  


四、性能测试
利用redis的benchmark工具对采用代理方式和单台redis分别进行压力测试,可以比较出其性能。总的来说用twemproxy后性能有所下降,我的30%左右,其他有人测出20%,甚至有人测出无损性能。
直接测redis(红色部分尅换成其他命令如get,lpush,lpop等)
/usr/coolpad/redis6369/src/redis-benchmark -p 6379 -h 192.168.30.106 -c 100 -t set -d 100 -l -q

测twemproxy
/usr/coolpad/redis6369/src/redis-benchmark -p 6311 -h 192.168.30.106 -c 100 -t set -d 100 -l -q

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-315872-1-1.html 上篇帖子: Redis sorted set操作 下篇帖子: redis渐入佳境(08) 事务控制
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表