Redis的集群原理

一、redis-cluster架构图

  • 使用如下图的命令连接到别的Redis服务器,并通过命令ping检测Redis服务器是否处于健康状态
  • 下图所示的圆圈表示一个Redis服务器,每个结点的数据都是不一样的,只要有一个结点挂了,那么那么Redis集群就挂了,考虑到高可用,每个节点都需要添加备份机
  • redis-cluster投票:容错

    • 投票机制,用于指导那个结点挂了

    • 规则:要判断一个结点是不是挂了,那么需要集群中半数的结点认为他挂了,那么他就挂了

    • 分析:下图的红色的结点是挂了的结点,黄色的结点发现了红色的结点挂了,那么他会想其他的结点广播,让其他的结点试试红色的结点是否挂了,黄色的箭头代表测试红色的结点没有反应,图中一共有五个结点,三个认为红色的结点挂了,那么则认为红色的结点挂了,我们的集群就不完整了,就会看一下是否有备份结点,如果没有备份结点,那么整个Redis集群就挂了

  • 架构细节:

    • ​​​​​​​所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽
    • 节点的fail是通过集群中超过半数的节点检测失效时才生效(redis-cluster投票:容错
    • 客户端与redis节点直连,不需要中间proxy(代理)层。客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
    • redis-cluster把所有的物理节点映射到[0-16383]slot(槽,作用:均匀分布。不管服务器有多少,槽只有16384个)上,cluster 负责维护
      • ​​​​​​​Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点
      • 步骤:0-5000、501-10000、10001-16383分到三个不同的服务器上,通过crc16得到每一个key的一结果,这个结果对16384求余,得到不同的哈希槽,然后根据哈希槽分配到不同的服务器上

猜你喜欢

转载自blog.csdn.net/Future_LL/article/details/84575398
今日推荐