codis架构学习

转自:https://jackeyzhe.github.io/2018/11/14/玩转Redis集群之Codis/

1.介绍

codis是一种redis 分布式集群解决方案,codis是基于多个redis实例做了一层路由层来进行数据路由,每个redis实例承担一定的数据分片。

  • Codis FE:集群管理界面。多个集群实例共享可以共享同一个前端展示页面;通过配置文件管理后端 codis-dashboard 列表,配置文件可自动更新。
  • Codis Proxy:客户端连接的 Redis 代理服务, 实现了 Redis 协议。 除部分命令不支持以外(不支持的命令列表),表现的和原生的 Redis 没有区别(就像 Twemproxy)。
    • proxy是无状态服务,可以同时部署多个 codis-proxy 实例;
    • 接受redis-client请求,并且把根据用户请求信息进行计算,得到相应的slot,并把redis client请求正确的路由到背后的物理实例上;每个proxy具有所有的solt信息,一个slot分配给哪个server group信息,以及知道一个servergroup谁是master,谁是slave。
    • 不同 codis-proxy 之间由 codis-dashboard 保证状态同步。
  • Codis Dashboard:集群管理工具,支持 codis-proxy、codis-server 的添加、删除,以及据迁移等操作。在集群状态发生改变时,codis-dashboard 维护集群下所有 codis-proxy 的状态的一致性。  
  •        对于同一个业务集群而言,同一个时刻 codis-dashboard 只能有 0个或者1个;
    • 所有对集群的修改都必须通过 codis-dashboard 完成。
  • codis_group:是一个逻辑概念,不具有对应的进程或者服务,只是proxy里的一个属性。
  •  Codis Server:基于 redis-3.2.8 分支开发。增加了额外的数据结构,以支持 slot 有关的操作以及数据迁移指令。
  • Storage:为集群状态提供外部存储,保存集群meta信息。提供 Namespace 概念,不同集群的会按照不同 product name 进行组织;目前仅提供了 Zookeeper、Etcd、Fs 三种实现。

2.原理

2.1 分片

Codis采用Pre-sharding的技术来实现数据分片,默认分为1024个slot(0-1023)。Codis在接收到命令时,先对key进行crc32运算,然后再对1024取余,得到的结果就是对应的slot。然后就可以将命令转发给slot对应的Redis实例进行处理了。

2.2 扩缩容

// 具体代码还得再学习下。 

2.3 缺点

当Redis Group的master挂掉时,codis不会自动将某个slave升为master,codis提供了一个叫做codis-ha的工具,这个工具通过dashboard提供RESTful API来实现自动主从切换。

 

posted @ 2024-06-30 00:24  lypbendlf  阅读(37)  评论(0编辑  收藏  举报