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版本;

github

细说分布式Redis架构设计和那些踩过的坑

posted @ 2019-04-11 06:34 banananana 阅读(...) 评论(...) 编辑 收藏