10 redis cluster 集群畅谈一

前面讲解了关于redis单机在大 数据量情况的所出现的瓶颈问题,并讲解了通过redis 主从架构和 哨兵集群结合,实现99.99% 高可用 、水平扩容支持更高QPS的解决方案。

在大数据量面前,主从架构结合哨兵集群的解决方案在复杂的配置下就显得有些捉襟见肘了;数据量越大,就愈明显。所以本章从海量数据出发,redis cluster 集群架构以更少的配置做更多的事。

redis cluster 集群架构 的优势在哪呢?

  • 支持水平扩容 N个redis master node,并且每个master node同样可以挂载 N 个 slave node

  • 读写分离的架构(这个概念其实在redis cluster就没有了,但是可以做,因为redis cluster 更强调的是水平扩容)

  • 高并发

  • 高可用(无需sentinel 哨兵监控,如果master 挂了,redis cluster 内部自动 将slave 切换 master)

  • 配置减少(相对 replication + sentinal 而已,就不需要手动搭建replication复制+主从架构+读写分离+哨兵集群+高可用了)

redis cluster 和 replication + sentinal 比较?

  • 两者都是解决redis 单机瓶颈问题(宕机不可用,低QPS,性能差等)
  • 根据自身数据需求选择合适解决方案
    • 数据量很少(几个G),redis 单机就可以解决
    • 数据量大, 一主多从(1 master N slave ,具体根据自身读吞吐量而定) + 哨兵集群(sentinal 保证高可用)
    • 海量数据,redis cluster 集群(N master N slave , 海量数据 + 高并发+ 高可用)


      replication + sentinal vs redis cluster

redis cluster 数据分片

redis cluster 会对数据进行自动分片,将数据分配到每个Master 上(自动的负载均衡)

redis cluster 所有节点直接都是相互连接的,它要求开放两个端口,一个端口负责对外数据交换(port:6379),另外一个端口用来内部通信(port : 6379 + 10000 = 16379),也就是集群总线的通信(cluster bus)

  • cluster bus 用来进行故障检测,配置更新,故障转移授权
  • cluster bus 使用一种二进制的协议,主要用于节点间进行高效的数据交换,占用更少的网络带宽和处理时间
redis cluster 使用什么样的算法保证数据分片?
首先讲下最原始的的 Hash 算法,如下图所示:
hash 算法
其次讲下一致性 Hash 算法(自动缓存迁移) + 虚拟节点(自动负载均衡)
一致性Hash算法

一致性hash 算法 一定程度上解决了node宕机后的大部分数据失效问题,但是也会导致node 的热点问题,降低性能,这个又该怎么解决呢? 可以通过增加虚拟节点的方式 让 hash 点散落更均匀 ,不光能解决热点问题,还可以达到自动的负载均衡效果。

一致性 Hash 算法(自动缓存迁移) + 虚拟节点(自动负载均衡)
redis cluster 采用的是 hash slot 算法

redis cluster 拥有固定的16384个slot (槽) ;这个槽是虚拟的,并不是真正存在。slot 被 分布到 各个master 中,当 某个key 映射到 某个master 负责的槽时,就由对应的master 为key 提供服务

在redis cluster 中,只有master 才拥有对slot的所有权,slave 只负责使用 slot,并没有所有权。

那么 redis Cluster 又是如何知道哪些槽是由哪些节点负责的呢?Master 又是如何知道哪个槽是自己的呢?
位序列结构(节约存储空间)

每个Master节点都维护着一个位序列,为16384 / 8 字节;Master 节点 通过 bit 来标识哪些槽自己是否拥有。比如对于编号为1的槽,Master只要判断序列的第二位(索引从0开始)是不是为1即可。

集群同时维护着槽与集群节点的映射关系,由16384个长度的数组记录,槽编号为数组的下标,数组内容为集群节点,这样就可以很快地通过槽编号找到负责这个槽的节点。

键空间分布基本算法
下面看下redis cluster 是通过什么样的方式进行 分片存储的

key 与 slot 的映射算法公式如下:

HASH_SLOT=CRC16(key) mod 16384

redis cluster 通过对每个key计算CRC16值,然后对16384取模,可以获取key对应的hash slot,对于一批量数,如果想让批量数据都在同一个slot,可以通过hash tag来实现

redis cluster中每个master都会持有部分slot,比如有3个master,那么可能每个master持有5000多个hash slot

hash slot 让 node 的增加和移除很简单,增加一个master,就将其他master的hash slot移动部分过去,减少一个master,就将它的hash slot移动到其他master上去

移动 hash slot 的成本是非常低的

由于 16384 是固定的,当某个master 宕机时,不会影响其他机器的数据,因为key 找得是hash slot ,而不是机器

好了,本章的 redis cluster 集群分析 就到这里。

以上就是本章内容,如有不对的地方,请多多指教,谢谢!

为了方便有需要的人,本系列全部软件都在 https://pan.baidu.com/s/1qYsJZfY

下章预告:主要讲解 redis cluster集群部署

作者:逐暗者 (转载请注明出处)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容

  • 本文档翻译自 http://redis.io/topics/cluster-tutorial 。 本文档是 Red...
    会跳舞的机器人阅读 66,855评论 2 21
  • Redis Cluster介绍 redis cluster是Redis的分布式解决方案,在3.0版本推出后有效地解...
    dayspring阅读 10,862评论 0 3
  • 基本目标与设计基本思想 Redis cluster 目标 高性能,并且能线性扩展到1000个节点。不需要代理,使用...
    tafeng阅读 2,712评论 0 0
  • Redis Cluster Redis Cluster是Redis官方在Redis 3.0版本正式推出的高可用以及...
    Springlin阅读 3,724评论 1 5
  • 断断续续跑步已三年有余,有一些心得体会想要与你分享。 • 跑前的准备: 1.装备 我比较喜欢夏季跑步,因为装备比较...
    LogicBang阅读 313评论 5 1