Redis集群的总结

主从复制的面试点:

  1. 主从复制核心原理:

  全量复制:

    1)主节点通过bgsave 命令fork子进程进行RDB持久化,该过程非常消耗资源

    2)主节点通过网络将RDB文件发送给从节点,对主从节点的带宽带来很大消耗

    3)从节点清空老数据,载入新RDB数据的过程是阻塞的,无法响应客户端的命令;

  增量复制:

    1)复制偏移量:执行复制的双方,主从节点,分别维护一个复制偏移量offset

    2)复制积压缓冲区:主节点内部维护了一个固定长度的、先进先出(FIFO)队列作为复制积压缓冲区,

    当主节点offset的差距过大超过缓冲区长度时(主节点offset不在缓冲区内),将无法执行部分复制,只能执行全量复制。

    3)服务器运行ID(runid):每个Redis节点,都有其运行ID,运行ID由节点在启动时自动生成,主节点会将自己的运行ID发送从节点,

    从节点会将主节点的ID运行ID存起来。从节点Redis断开重连的时候,就是根据运行ID来判断同步的进度:

      如果从节点保存的runid与主节点现在的runid相同,说明主从节点之前同步过,主节点会继续尝试使用部分复制(到底能不能部分复制还要看offset和复制积压缓冲区的情况);

      如果从节点保存的runid与主节点现在的runid不同,说明从节点在断线前同步的Redis节点并不是当前的主节点,只能进行全量复制。

      

      核心就三个:

      1. 是不是第一次复制:如果是就全量同步

      2. runid是不是一致的,如果不一致就全量同步

      3. offset在不在复制积压缓冲区:如果不在就全量同步

     

哨兵模式面试点:

  主观下线和客观下线:

  主观下线:每个Sentinel节点会每隔1秒对主节点、从节点、其他Sentinel节点发送心跳,当这些节点超时时,Sentinel节点就会对该节点做失败判定

  这个行为叫做主观下线。

  客观下线:当Sentinel主观下线是主节点时,该Sentinel节点会询问其他主节点的判断,当判断超过个数(quorum),Sentinel节点认为主节点确实有问题,

  这时该Sentinel节点做出客观下线的决定。

  

 

集群模式面试点:

  为什么不用一致性hash而用哈希槽:

  1. 虚拟节点少的话数据分配不均匀,并且不能够按照机器性能分配资源

  2. 有雪崩的风险,当一台机器挂了,这台机器上承载的并发会传导到下一个机器上去,就会导致接下来的机器崩掉。

  

posted @ 2022-06-20 02:17  小罗咯  阅读(21)  评论(0编辑  收藏  举报