前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis(三)---集群方案

Redis(三)---集群方案

作者头像
Autooooooo
发布2020-11-09 10:24:29
9550
发布2020-11-09 10:24:29
举报
文章被收录于专栏:Coxhuang

Redis(一)-----主从复制 : https://cloud.tencent.com/developer/article/1744810

Redis(二)-----数据分区 : https://cloud.tencent.com/developer/article/1744809

Redis(三)-----集群方案 : https://cloud.tencent.com/developer/article/1744811

Redis(四)-----持久化 : https://cloud.tencent.com/developer/article/1744791

Redis(五)-----应用场景 : https://cloud.tencent.com/developer/article/1744816

Redis(六)-----缓存穿透/缓存雪崩/缓存击穿 : https://cloud.tencent.com/developer/article/1744796

Redis(七)—淘汰删除策略 : https://cloud.tencent.com/developer/article/1744827

Redis集群

#1 什么是Redis集群

将众多小内存的Redis实例整合起来,将分布在多台机器上的众多CPU核心的计算能力聚集到一起,完成海量数据存储和高并发多写操作

#2 Redis集群方案有哪些?

主要方案有以下两个

  • Codis
  • Cluster

Codis

国产开源Redis集群方案

Cluster

官方提供的Redis集群方案

#3 Codis

#3.1 Codis集群方案图

Codis是无状态的,它只是一个转发代理的中间件,这意味着我们可以启动多个Codis实例,供客户端使用,每个Codis节点是平等的

#3.2 Codis分片原理

Codis主要是将特定的key转发到特定的Redis实例,具体转发如下:

  1. Codis默认将所有的key划分到1024个槽位,它首先对客户端传来的key进行CRC32运算计算hash值,再将hash后的整数值对1024求余,这个余数就是对应的槽位
  2. 每个槽位对应一个Redis实例,一个Redis实例对应多个槽位

#3.3 不同的Codis实例之间槽位关系如何同步 ?

在扩容/删除Redis节点的时候,Codis槽位与Redis对应关系会发生改变,那如何实现Codis同步呢 ???

Codis需要使用一个分布式同步工具来配置存储数据库实现持久化槽位关系,Codis开始使用Zookeeper,后来etcd也同样支持

Codis槽位关系存储在zookeeper中(并且提供一个Dashboard可以用来观察和修改槽位关系),当槽位发生变化时,Codis Proxy会监听到变化并重新同步槽位关系

#3.3 新增Redis实例

刚开始Codis只有一个Redis实例的时候,1024个槽位全部指向同一个Redis实例,然后新增一个Redis实例,这时,需要对槽位关系进行修改,将一半的槽位划分到新的Redis节点,这就意味着对这一半的槽位里面的key进行迁移,迁移到新的Redis实例

#3.4 自动均衡

Redis新增实例,手动均衡太繁琐,所以Codis提供自动均衡功能,自动均衡功能会在系统比较空闲的时候,观察诶个Redis实例对应的槽位数量,如果不均衡,就会自动迁移

#3.5 Codis优点

  • 设计方案简单,将分布式问题交给第三方插件(zookeeper或etcd)

#3.6 Codis缺点

  • Codis增加了Proxy作为中转层,在数据传输上要比单个Redis开销大
  • 相对于单实例Redis,集群的key分布在不同的Redis中,所以就不在支持事务,因为事务只能在单实例中完成
  • Codis不是官方项目,Redis更新功能时,Codis更新会滞后

#4 Redis Cluster

#4.1 Redis Cluster集群方案图

Redis Cluster方案中,所有的Redis节点组成一个完全图,任意节点到其他节点都是可达的,去中心化,没有主节点概念

#4.2 Redis Cluster分片原理

Redis Cluster将所有的数据分为2的14次方(16384)槽位,每个Redis节点负责其中的一部分槽位,槽位信息存储在节点中,不像Codis,不需要另外的分布式存储空间存储节点槽位信息,当Redis Cluster的客户端来连接集群时,也会得到一份集群的槽位配置信息,这样客户端要查找某个key,可以直接定位到目标Redis节点

#4.2.1 槽位定位算法

Redis Cluster默认会对key使用CRC16算法进行hash,等到一个整数值,然后用这个整数值对16384求余得到具体的槽位信息

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/03/05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Redis(一)-----主从复制 : https://cloud.tencent.com/developer/article/1744810
  • Redis集群
    • #1 什么是Redis集群
      • #2 Redis集群方案有哪些?
        • #3 Codis
          • #3.1 Codis集群方案图
          • #3.2 Codis分片原理
          • #3.3 不同的Codis实例之间槽位关系如何同步 ?
          • #3.3 新增Redis实例
          • #3.4 自动均衡
          • #3.5 Codis优点
          • #3.6 Codis缺点
        • #4 Redis Cluster
          • #4.1 Redis Cluster集群方案图
          • #4.2 Redis Cluster分片原理
      相关产品与服务
      云数据库 Redis
      腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档