redis集群模式

2023-12-22 11:12:48

一:Redis是AP的还是CP的?

Redis就是AP的,
原因

  1. Redis的一致性模型是最终一致性,它的分布式设计中采用的是异步复制,当某个节点上的数据发生改变时,Redis会将这个修改操作发送给其他节点,但由于网络传输的延迟等原因,这些操作不一定会被其他节点立即接收到和执行,这就可能导致节点之间数据不一致。
  2. 当一个节点宕机时,这个节点上的数据可能无法同步到其他节点,这就可能导致节点之间数据不一致。

二:介绍一下Redis的集群模式?

Redis主要有三种集群模式,分别是:主从复制(Master-Slave Replication)、哨兵模式(Sentinel)和Redis Cluster模式。
主从复制:主从模式中,包括一个主节点(Master)和一个或多个从节点(Slave)。主节点负责处理所有写操作和读操作,而从节点复制主节点的数据,并且只能处理读操作。当主节点发生故障时,可以将一个从节点升级为主节点,需要手动实现故障转移。
优点:简单易用,适用于读多写少的场景。
缺点:master挂了,需要人工介入让节点恢复或者手动切换一台从节点服务器变成主节点服务器才可以。并且在master宕机时,如果数据没有及时复制到从节点,也会导致数据不一致。
哨兵模式:哨兵模式是在主从复制的基础上加入了哨兵节点,哨兵节点是一种特殊的Redis节点,用于监控主从节点的状态。哨兵节点定期向所有主从节点发送PING命令,如果在指定的时间内未收到响应,哨兵节点会将该节点标记为主观下线。如果一个主节点被多数哨兵节点标记为主观下线,那么它将被标记为客观下线。当主节点被标记为客观下线时,它会从所有健康的从节点中选举一个新的主节点,并将所有从节点切换到新的主节点,实现自动故障转移。同时,哨兵节点会更新所有客户端的配置,指向新的主节点。
Cluster模式:它将数据自动分片到多个节点上,每个节点负责一部分数据,每个节点都可以单独对外提供读写服务。Redis Cluster能够自动检测节点的故障,当一个节点失去连接或不可达时,Redis Cluster会从可用的从节点中提升一个新的主节点。

三:什么是Redis的数据分片?

Redis的数据分片是将一个Redis数据集分割成多个部分,分别存储在不同的Redis节点上的技术。它可以用于将一个单独的Redis数据库扩展到多个物理机器上,从而提高Redis集群的性能和可扩展性。
在Redis的Cluster 集群模式中,使用哈希槽(hash slot)的方式来进行数据分片,将整个数据集划分为多个槽,每个槽分配给一个节点。客户端访问数据时,先计算出数据对应的槽,然后直接连接到该槽所在的节点进行操作。Redis Cluster还提供了自动故障转移、数据迁移和扩缩容等功能,能够比较方便地管理一个大规模的Redis集群。

四:什么是槽位slot?

哈希槽其实就是一个数组,数组[0, 1, 2, …, 2^14-1]形成hash slot空间

五:为什么redis集群的最大槽数是16384

  1. 每秒钟,redis节点需要发送一定数量的ping消息作为心跳包,如果槽位为65536,发送心跳信息的消息头达8k,发送的心跳包过于庞大
  2. redis的集群主节点数量基本不可能超过1000个,如果节点过1000个,也会导致网络拥堵
  3. 槽位越小,节点少的情况下,压缩比高,容易传输

六:master节点间心跳数据包格式

在这里插入图片描述
其中,消息头有一个myslots的char类型数组,unsigned char myslots[CLUSTER_SLOTS/8];,数组长度为 16384/8 = 2048 。底层存储其实是一个bitmap,每一个位代表一个槽,如果该位为1,表示这个槽是属于这个节点。

七:槽与节点映射关系

  1. 每个集群节点维护着一个16384 bit(2kB)的位数组,每个bit对应相同编号的槽,用 0/1标识对于某个槽自己是否拥有
  2. 集群节点同时还维护着槽到集群节点的映射,是由长度为16384,数组下标代表槽号,值为节点信息的数组
    在这里插入图片描述

文章来源:https://blog.csdn.net/weixin_44582492/article/details/135097513
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。