首页 > 数据库 >决战圣地玛丽乔亚Day47----Redis集群

决战圣地玛丽乔亚Day47----Redis集群

时间:2023-04-03 23:58:37浏览次数:46  
标签:乔亚 Redis ---- 故障 实例 集群 哈希 节点

4.Redis  Cluster 集群模式

如果单机吞吐量过大,我们可以横向和纵向进行扩展,横向就是加节点(scale out),纵向就是加配置(scale up)。

如果加配置,治标不治本,单机局限性和持久化问题无法解决(如轮式RDB快照还是AOF指令)

横向扩展更容易扩展,可以解决很多问题,包括单一实例节点的硬件扩容限制、成本限制,还可以分摊压力,精细化治理,精细化维护

集群的组成:

CLUSTER MEET <ip> <port>

 

 

数据自动分片:

cluster create 创建,会将 16384 个slots 平均分配在我们的集群实例上

通过 addslots 命令指定哈希槽范围
cluster addslots 0,7120redis-cli -h 192.168.0.2 –p 6379

通过一致性哈希算法把数据分到2^14个哈希槽中,每个节点负责一部分的槽位数据(自定义分配),节点之间通过goosip协议进行通信,更新信息,故障转移和故障检测。

如果请求所在的节点不是负责该槽位的节点,那么请求会被转发到负责该槽位的节点上。如果请求的键名所在的槽位没有被分配到任何节点上,那么Redis Cluster会返回一个错误信息

集群处于online状态说明数据对应的槽位都有节点进行管理,如果状态为offline说明有数据对应的槽位没有被任何节点管理。

 

数据复制过程和故障转移

数据复制 : 

主从模式,master宕机会把从节点拿过来作为主节点。

故障检测

Redis的节点之间通过Gossip协议广播信息,每个节点定期的去ping--->主观下线和客观下线。对应前面讲的哨兵模式。

主从故障转移

基于raft的选举模式:

 

 

    • 集群中设立一个自增计数器,初始值为 0 ,每次执行故障转移选举,计数就会+1。
    • 检测到主节点下线的从节点向集群所有master广播一条CLUSTERMSG_TYPE_FAILOVER_AUTH_REQUEST消息,所有收到消息、并具备投票权的主节点都向这个从节点投票。
    • 如果收到消息、并具备投票权的主节点未投票给其他从节点(只能投一票哦,所以投过了不行),则返回一条CLUSTERMSG_TYPE_FAILOVER_AUTH_ACK消息,表示支持。
    • 参与选举的从节点都会接收CLUSTERMSG_TYPE_FAILOVER_AUTH_ACK消息,如果收集到的选票 大于等于 (n/2) + 1 支持,n代表所有具备选举权的master,那么这个从节点就被选举为新主节点。
    • 如果这一轮从节点都没能争取到足够多的票数,则发起再一轮选举(自增计数器+1),直至选出新的master。
  • 新的主节点会撤销所有对已下线主节点的slots指派,并将这些slots全部指派给自己。

  • 新的主节点向集群广播一条PONG消息,这条PONG消息可以让集群中的其他节点立即知道这个节点已经由从节点变成了主节点,并且这个主节点已经接管了原本由已下线节点负责处理的槽。

  • 新的主节点开始接收和自己负责处理的槽有关的命令请求,故障转移完成。

client 访问 数据集群的过程

Redis每个实例节点会通过Gossip协议把哈希槽的分配信息进行扩散。相当于每个集群都有一个集群哈希槽对应哪个实例的注册表。

客户端连接任一实例,获取到slots与实例节点的映射关系,并将该映射关系的信息缓存在本地。

将需要访问的redis信息的key,经过CRC16计算后,再对16384 取模得到对应的 Slot 索引。

通过slot的位置进一步定位到具体所在的实例,再将请求发送到对应的实例上。

 

 Redis集群和主从复制+哨兵机制这种模式有什么区别?

Redis集群通过把Redis数据进行分片存储在多个Redis节点来实现横向扩展和高可用性,适合大规模的Redis部署。

如果是小规模,用主从复制+哨兵模式就可以。

另外注意纯主从+哨兵的模式用的是读写分离,而redis集群技术的从节点就是一个主的备用,合理的来说应该是主备模式。

 

标签:乔亚,Redis,----,故障,实例,集群,哈希,节点
From: https://www.cnblogs.com/dwj-ngu/p/17277248.html

相关文章

  • rsync远程同步:下行同步、上行同步+inotify实时同步
    一、rsync远程同步1.什么是rsync远程同步rsync是CS架构的数据镜像备份工具,可以实现全量备份和快速增量备份支持本地复制或ssh、rsync主机同步。rsync默认端口为873rsync特性:可以在不通主机之间镜像同步整个目录树,支持增量备份、保持链接和权限、时间、属性且传输前自动执行压......
  • Redis哨兵和cluster集群
    1、什么是哨兵模式哨兵模式:可以自动切换解决单点故障,但是不能负载均衡,存储能力受限制。哨兵核心功能:在主从复制的基础上,实现了主节点的自动故障转移2、哨兵的作用监控:监控主节点和从节点是否在正常运行故障自动转移:当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效......
  • MySQL带排序的分页查询优化
    MySQL带排序的分页查询优化需求在日常开发中,经常会遇到这么一种情况,一张表的数据量较大(500万左右)的时候,对其进行分页查询的时候,在分页比较深的情况下,查询效率会急剧下降。对于这种情况,我们需要做一些分页查询的优化。准备创建脚本CREATETABLEstudent(idINTNOTNULL......
  • java笔记(this,super,override,instanceof,static)
    super关键字的一些注意事项子类在执行构造方法时,如果显式使用super()显式调用父类构造方法,则该调用必须放代码块在第一行super必须出现在子类的方法或者构造方法中使用this()显示调用构造方法,则该调用必须放在代码块第一行由于第一条和第三条限制,super和this不能同时调用构造......
  • SpringBoot外部化配置定时任务cron表达式
    SpringBoot外部化配置定时任务cron表达式背景在日常开发中我们经常会使用到定时任务的情况,SpringBoot为我们很方便的集成了定时任务。我们只需要简单的几部就可以配置好一个定时任务。@ComponentpublicclassLocationTask{@Scheduled(cron="0/10****?")pu......
  • 分布式系统——并发条件下如何保证缓存与DB数据一致性
    什么是数据一致性我们常说的数据一致性指的是在程序运行过程中本地缓存、分布式缓存、数据库三者之间的数据一致性常见的本地缓存有hashmap、currenthashmap、guavacache、caffeine分布式缓存常见的有redis、memcache常见数据不一致常见有:本地缓存与mysql不一致redis......
  • MATLAB读写excel中指定sheet行列中的数据 and 去除含有NaN的行或者列
    matlab读写excel中指定sheet行列中的数据data=xlsread('data.xlsx','sheet1','c2:c12');xlswrite('newdata.xlsx',newdata,'Sheet1','p2:p12');matlab中去除含有NaN的行或者列b=a(all(~isnan(a),2),:);%删除含有NAN的行b=a(al......
  • Spring从熟悉到陌生
    BeanFactory与ApplicationContext的区别与联系在SpringBoot项目中我们通过SpringApplication.run(SpringLearnApplication.class,args);来启动项目,实际上这个方法有一个返回值,类型为ConfigurableApplicationContext,类图关系如下。可以看到它实现了ApplicationContext接口,而Ap......
  • Online Continual Learning with Maximally Interfered Retrieval---阅读笔记
    OnlineContinualLearningwithMaximallyInterferedRetrieval---阅读笔记摘要:本文主要提出了一种可控的样本采集策略的重放方法。我们检索受干扰最大的样本,即它们的预测将受到预测参数更新的最大负面影响。1Introduction人工神经网络在完成个体狭窄任务方面的性能已经超......
  • 【SciPy】Sparse稀疏矩阵主要存储格式总结(转载)
    原文:【SciPy】Sparse稀疏矩阵主要存储格式总结在数据科学和深度学习等领域常会采用矩阵格式来存储数据,但当矩阵较为庞大且非零元素较少时,运算效率和存储有效率并不高。所以,通常我们采用Sparse稀疏矩阵的方式来存储矩阵,提高存储和运算效率。下面将对SciPy中七种常见的存储方式(COO/......