转载

Java学习笔记系列-Codis

什么是Codis

  • 一个分布式 Redis 解决方案,多个 Redis 节点构成的集群
  • 上层应用可以像使用单机的 Redis 一样使用,Codis 底层会处理请求的转发,不停机的数据迁移等工作
  • Redis 实例的CPU计算能力汇集到一起,从而完成关于大数据和高并发量的的读写操作

组成部分

Java学习笔记系列-Codis

  1. Codis Proxy (codis-proxy),处理客户端请求,支持Redis协议,因此客户端访问Codis Proxy跟访问原生Redis没有什么区别;
  2. Codis Dashboard (codis-config),Codis 的管理工具,支持添加/删除 Redis 节点、添加/删除 Proxy 节点,发起数据迁移等操作。codis-config 本身还自带了一个 http server,会启动一个 dashboard,用户可以直接在浏览器上观察 Codis 集群的运行状态;
  3. Codis Redis (codis-server),Codis 项目维护的一个 Redis 分支,基于 2.8.21 开发,加入了 slot 的支持和原子的数据迁移指令;
  4. ZooKeeper/Etcd,Codis 依赖 ZooKeeper 来存放数据路由表和 codis-proxy 节点的元信息,codis-config 发起的命令都会通过 ZooKeeper 同步到各个存活的 codis-proxy;
  5. codis-ha,通过codis开放的api实现自动切换主从的工具。该工具会在检测到master挂掉的时候将其下线并选择其中一个slave提升为master继续提供服务

有赞Codis架构

Java学习笔记系列-Codis

生产环境部署:

  • 1024个slot,落到64个group,每台服务器包含8个group
  • 一个codis集群 = 8台物理机 = 8台物理机 (每台:8个group)= 64个group (每个group:16个slot) = 1024个slot

分片

  1. Codis会把所有的key分成1024个槽,这1024个槽对应着的就是Redis的集群,这个在Codis中是会在内存中维护着这1024个槽与Redis实例的映射关系。这个槽是可以配置,可以设置成 2048 或者是4096个
  2. key的分配算法,先是把key进行CRC32 后,得到一个32位的数字,然后再hash%1024后得到一个余数,这个值就是这个key对应着的槽,这槽后面对应着的就是redis的实例
//Codis中Key的算法
    hash = crc32(command.key)
    slot_index = hash % 1024
    redis = slots[slot_index].redis
    redis.do(command)
原文  https://segmentfault.com/a/1190000019505365
正文到此结束
Loading...