Redis集群方案总结
Redis集群方案总结
目前,Redis中目前集群有以下几种方案:
主从复制
哨兵模式
redis cluster
代理
codis
客户端分片
因为目前使用大范围使用就是Codis方案,因此重点会放在理解Codis方案,其余方案只会简单介绍。
Codis
Codis是豌豆荚公司开发的一个分布式Redis服务,对于上层调用方来说是没有感知的,可以将它是无限内存的Redis服务,有动态扩容和缩容的能力,增减Redis实例对调用方完全透明,不需要重启服务,不需要担心内存的问题;
Codis是基于proxy-base,也就是会以一个代理的身份接收请求并且使用一致性哈希算法,将请求转发到具体的redis实例,并且一个codis-group采用主从方式,包含一个master节点和多个slave节点,如果master节点出现了问题,那么一个group中的slave节点会通过选举算法推选出新的master节点,并且通知到proxy。
Codis由几个部分组成:
Codis Proxy (codis-proxy),处理客户端请求,支持Redis协议,因此客户端访问Codis Proxy跟访问原生Redis没有什么区别;
Codis Dashboard (codis-config),Codis 的管理工具,支持添加/删除 Redis 节点、添加/删除 Proxy 节点,发起数据迁移等操作。codis-config 本身还自带了一个 http server,会启动一个 dashboard,用户可以直接在浏览器上观察 Codis 集群的运行状态;
Codis Redis (codis-server),Codis 项目维护的一个 Redis 分支,基于 2.8.21 开发,加入了 slot 的支持和原子的数据迁移指令;
ZooKeeper/Etcd,Codis 依赖 ZooKeeper 来存放数据路由表和 codis-proxy 节点的元信息,codis-config 发起的命令都会通过 ZooKeeper 同步到各个存活的 codis-proxy;
Codis FE,集群管理界面;
Storage,为集群状态提供外部存储;
其余方案
Redis cluster
这是Redis官方提供的分布式Redis解决方案,cluster使用一致性哈希算法,每个槽对应一个node节点,将请求转发到具体的redis实例,同样的,为了集群的可访问性,每个node节点配置成主从结构,同样会利用选举算法推出一个主节点;
cluster不足点在于:
没有提供图像管理工具,对于运维来说比较复杂;
命令支持不够完整,比如批量命令mget不完整,不支持事务,不支持数据库切换;
集群管理和数据存储耦合,也就是说如果集群有bug,需要升级整个Redis版本;
![](https://i.loli.net/2018/11/17/5beff4d639cbb.jpg)
关注公众号:数据结构与算法那些事儿,每天一篇数据结构与算法