码迷,mamicode.com
首页 > 其他好文 > 详细

redis集群方案总结

时间:2015-11-17 19:11:34      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:twitter   服务器   release   客户端   master   

一,公司现在正在使用的集群方案(redis+sentinel)

     通过多个Sentinel一起监控redis集群,检测到master不可用时,通过投票来决定master是否需要切换。 Sentinel 之间互相检测(通过在共同检测的master中写入信息来进行),Sentinel 只需要配置master节点,自动通过master来获取已经连接的slave列表。当其中的某一个Sentinel 检测到master宕机之后,标示master为SDOWN,向其他的Sentinel 发送SENTINEL is-master-down-by-addr命令来进行投票,投票确认之后标识为ODOWN,开始选择一个新的master,并且进行切换。

缺点:

      1. 没有合适的客户端,需要自己处理各种事件。

      2. 目前还没有release。

二,由Twitter开源的Twemproxy集群方案

      主要是由Twemproxy作为代理,来接受多个程序的访问,按照路由规则,转发给后台的各个Redis服务器,再原路返回,这个方案解决了单个Redis实例承载能力的问题。

      当然,Twemproxy本身也是单点,需要用keepalived做高可用方案。

缺点:

      无法平滑地扩容、缩容。这样就导致了在业务量突增,需增加Redis服务器;业务量萎缩,需要减少Redis服务器,对于Twemproxy而言,基本上都很难操作。

三,基于Go和C开发的codis redis(由豌豆荚开源)

    (1)体系架构

            Codis引入了Group的概念,每个Group包括1个Redis Master及至少一个Redis Slave,这是和Twemproxy的区别之一。这样做的好处是,如果当前Master有问题,则运维人员可以通过Dashboard"自助式"切换到Slave,而不需要小心翼翼地修改程序配置文件。

            Codis还支持数据热迁移(Auto Rebalance) ,出品方修改了Redis Server源码,并称之为Codis Server)。

             Codis采用预先分片(Pre_Sharding)机制,事先规定好了,分成1024个slots(也就是说,最多能支持后端1024个Codis Server),这些路由信息保存在zookeeper中,Zookeeper还维护Codis Server Group 信息,并提供分布式锁等服务。

    技术分享


 (2)使用技巧、注意事项

    1,无缝迁移Twemproxy

     使用Codis-port工具,可以实现同步的Twemproxy底下的Rdis数据到你的Codis集群,同步完成后,只需要修改一下程序配置文件,将Twemproxy的地址改成Codis的地址即可。

    2,支持Java程序的HA

     Codis提供一个Java客户端,并称之为Jodis,这样,如果单个Codis Proxy宕掉,Jodis自动发现,并自动规避之,使业务不受影响。

    3,支持Pipeline

     Pipeline使得客户端可以发出一批请求,并一次性获得这批请求的返回结果,这提升了Codis的想象空间。

    4,Codis 不负责主从同步

     Codis仅负责维护当前Redis Server列表,由运维人员自己去保证主从数据的一致性    

    5,要改进的地方

     加pipeline参数后,Value长度如果较大,性能反而比Twemproxy要低一些

源码地址:https://github.com/wandoulabs/codis

本文出自 “Henry” 博客,请务必保留此出处http://dihaifeng.blog.51cto.com/8814208/1713540

redis集群方案总结

标签:twitter   服务器   release   客户端   master   

原文地址:http://dihaifeng.blog.51cto.com/8814208/1713540

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!