redis cluster和hash slot

redis cluster介绍

从redis3.0.0开始,官方支持了redis cluster的集群模式,结束了redis没有集群的时代。

redis cluster 支撑 N 个 redis master node,每个 master node 都可以挂载多个 slave node。这样整个 redis 就可以横向扩容了。如果你要支撑更大数据量的缓存,那就横向扩容更多的 master 节点,每个 master 节点就能存放更多的数据了。

redis cluster实现(hash slot算法)

Redis 集群没有并使用传统的一致性哈希来分配数据,而是采用另外一种叫做 哈希槽 (hash slot)的方式来分配的。redis cluster 默认分配了 16384 个slot,当我们set一个key 时,会用 CRC16算法来取模得到所属的 slot,然后将这个key 分到哈希槽区间的节点上,具体算法就是: CRC16(key) % 16384

(为什么是16384,选取了16384是因为crc16会输出16bit的结果,可以看作是一个分布在0-2^16-1之间的数,redis的作者测试发现这个数对2^14求模的会将key在0-2^14-1之间分布得很均匀,因此选了这个值。)

在构建redis cluster集群时,master必须大于等于3,否则会创建失败。并且,当集群中存活的master节点数小于总节点数的一半的话,集群就无法提供服务了。

例:我们有三个master节点A、B、C,采用 哈希槽 (hash slot)的方式来分配16384个slot 的话,它们三个节点分别承担的slot 区间是:

节点A:0 ~ 5460
节点B:5461 ~ 10922
节点C:10923 ~ 16383

节点在收到读写请求时,会根据 CRC16(key) % 16384算出的槽号去查是否指向自己,如果是则进行处理,如果不是,则返回moved错误,moved错误携带正确的节点IP和端口号返回客户端并指引其转向执行,而后客户端每次关于该key都会去moved返回的节点执行。

当节点的key正在迁移的时候,收到关于该key的请求,那么节点会返回ask错误,并但会正确的节点ip和端口号给客户端去执行。但是这个转向只对本次请求有效,后面关于该key的请求还是会发送到目前正在处理key迁移的节点,直到key迁移完毕并发送广播通知。

当有新节点D加入时,redis cluster的这种做法是从各个节点的前面各拿取一部分slot到 D上。会变成下面这样:

节点A:1364 ~ 5460
节点B:6826 ~ 10922
节点C:12287 ~ 16383
节点D:0 ~ 1364, 5461 ~ 6826, 10923 ~ 12287

删除节点也是类似,数据会均匀的迁移到剩余节点上,迁移完成后就可以删除这个节点了。

cluster节点通信

redis cluster的构造类似下图所示

redis cluster和hash slot

在 redis cluster 架构下,每个 redis 要放开两个端口号,比如一个是 6379,另外一个就是 加1w 的端口号,比如 16379。

16379 端口号是用来进行节点间通信的,也就是 cluster bus 的东西,cluster bus 的通信,用来进行故障检测、配置更新、故障转移授权。cluster bus 用了另外一种二进制的协议,gossip 协议,用于节点间进行高效的数据交换,占用更少的网络带宽和处理时间。

主从模式

redis cluster 为了保证数据的高可用性,加入了主从模式,一个主节点对应一个或多个从节点,主节点提供数据存取,从节点则是从主节点拉取数据备份,当这个主节点挂掉后,就会有这个从节点选取一个来充当主节点,从而保证集群不会挂掉。

不过redis的cluster模式不支持主从的树状结构。

主从模式最经典的是哨兵(Sentinel)模式,而Sentinel模式需要至少三台机器(一主二从三哨兵),而cluster模式建议每个master最好部署在不同的物理机上,所以,算一算搭建一个高可用的redis cluster至少需要九台物理机……

Original: https://www.cnblogs.com/zhusihua/p/11328042.html
Author: 拉通对齐端到端
Title: redis cluster和hash slot

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/591748/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 【MySQL】试题 — 31道巩固 SQL 语句的练习题

    1.取得每个部门最高薪水的人员名称先拿出各部门的最高工资,再与(最高工资对应的人员名录表)对接为临时表。 [En] First take out the maximum salar…

    数据库 2023年5月24日
    087
  • docker安装下载

    一、docker安装 查看 sudo systemctl status docker 安装 …

    数据库 2023年6月9日
    070
  • 互联网校招指北

    这篇文章写着写着,突然觉得《紧急救援》中有一句台词很对: “不是幸运给你机会,而是因为够坚持,才有了幸运的机会” 共勉~ 时间跨度 一年共两次校招季,2 月…

    数据库 2023年6月6日
    080
  • MySQL 期末试题

    当时我们期末的其中一套卷子, 好像有两套但是我当时懒得弄第二套. 就认真把第一套整了XD 一 单项选择题1.当隔离级别设置为read committed时,可以避免 。(2分)丢失…

    数据库 2023年6月11日
    069
  • 我设计数据库常用的几个原则

    以MySQL5.7为例,在一个项目中的数据库schema中建表 〇、建库 统一字符集和排序规则 规则 库的默认字符集选择utf8mb4,表、字段默认上级 库的排序规则选择utf8m…

    数据库 2023年6月9日
    084
  • 2022-6-2-mysql常用的命令

    mysql -uroot -proot -h192.168.56.10表示使用mysql的客户端进行连接数据库管理系统 -u后面是连接数据库的用户名,一般默认的情况下用户名都是ro…

    数据库 2023年5月24日
    079
  • Vuex 简单使用

    官网:https://vuex.vuejs.org/zh/ 参考文章:https://www.cnblogs.com/chinabin1993/p/9848720.html Vue…

    数据库 2023年6月16日
    091
  • MySQL主从复制

    一、概述 主从复制是指将主数据库(Master)的DDL和DML操作通过二进制日志传到从库(Slave)服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数…

    数据库 2023年5月24日
    095
  • yum安装Mysql8.0

    停止MySQL service mysqld status service mysqld stop 卸载已经安装过的MySQL 检查是否已经安装 rpm -qa|grep mysq…

    数据库 2023年6月9日
    063
  • Java 全栈知识体系(2021 PDF 版本)

    40000 +字长文总结,民工哥已将此文整理成PDF文档了,需要的见文后下载获取方式。 全栈知识体系总览 Java入门与进阶 面向对象与Java基础 Java 基础 –…

    数据库 2023年6月9日
    072
  • 创建一个Django项目总结

    2022-09-25 首先,要安装好虚拟环境,之后要切换到虚拟环境中,使用的命令 之后,创建一个Django项目使用的命令: 进入到该项目的目录下,创建一个子应用,使用的命令: 其…

    数据库 2023年6月14日
    090
  • Python日志模块封装

    一、先上结论 对 Python logging模块进行二次封装 -*- coding:utf-8 -*- 作者:IT小学生蔡坨坨 博客:caituotuo.top 时间:2022/…

    数据库 2023年6月11日
    082
  • 希望腿上的伤快点好

    明天去星巴克泡一会儿想把一些课程关联到的课程学习一下 Original: https://www.cnblogs.com/ukzq/p/16747859.htmlAuthor: D…

    数据库 2023年6月11日
    078
  • mysql中group by,having,order by,limit,distinct的用法和简单的的多表查询

    group:组 by:通过 group by :通过….。分组group by列名:通过指定列来分组 一般情况下在题目中出现 “每个” &#82…

    数据库 2023年5月24日
    088
  • 微服务架构设计模式

    内容简介 成功地开发基于微服务架构的应用软件,需要掌握一系列全新的架构思想和实践。在这本书籍中解释了 44 个架构设计模式,这些模式用来解决诸如服务拆分、事务管理、查询和跨服务通信…

    数据库 2023年6月6日
    0134
  • Node安装与卸载命令汇总

    nvm(MAC管理node版本) 安装最新稳定版node: nvm install stable 安装指定版本: nvm install <version></v…

    数据库 2023年6月9日
    057
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球