Redis Cluster集群

wxvirus2023年1月5日
大约 3 分钟

Redis Cluster 集群

主要是以多主多从的集群方式来保证高可用高并发。

特点

  • 无中心的结构,数据分散在各个节点上,并且保存了整个集群的状态,每个节点都和其他节点相连
  • 官方规定最小需要 6 个节点,3 个主节点和 3 个从节点
  • 各个节点是通过gossip协议交换数据的,数据分布采用哈希槽算法实现,有一个crc16(key) % 16384取模的redis key路由公式。

提示

crc16算法的hash值最大是 65535,为什么不创建 65535 个槽位呢?

redis节点发送的心跳包需要把所有的槽位信息放到心跳包中,方便节点知道集群信息;压缩以后大小是 2k;虽然最大 65535 压缩为 8k,作者认为 8k 的心跳包浪费,一般一个 redis 集群也不会超过 1000 个 master 节点,所以 16384 是比较合适的。

gossip 协议

Gossip协议,就像流言蜚语一样,利用一种随机性、带有传染性的方式,将信息传播到整个网络中,并在一定时间内,使得系统内的所有节点数据一致。实现最终一致性。

所有节点都持有一份元数据,不同的节点如果出现了元数据变更以后,就不断的将元数据发送给其他节点,让其他节点也进行元数据的变更。

  • 优点:元数据的更新比较分散,没有集中在一个点,更新会陆续的到所有的节点,因为有一定的延时,所以会降低压力。
  • 缺点:有延迟性,导致一些操作会滞后

通信

每个节点都会维护一份集群的状态

  • 当前集群的状态
  • 集群中各节点负责的slots信息和migrate状态
  • 集群中各节点的masterslave状态
  • 集群中各节点存货状态和怀疑Fail状态

四种命令:

  • MEET:通过cluster meet ip port命令,已有集群的节点会向新的节点发送邀请,加入现有集群,然后新节点就会开始与其他节点进行通信
  • PING:节点按照配置的时间间隔向集群中其他节点发送ping消息,消息中带有自己的状态,还有自己维护的集群元数据,和部分其他节点的元数据
  • PONG:节点用于回应PINGMEET的消息,结构和PING消息类似 ,也包含自己的状态和其他信息,也可以用于信息广播和更新
  • FAIL:节点PING不通某节点后,会向集群所有节点广播该节点挂掉的消息。其他节点收到消息后标记已下线。

Redis Cluster 集群架构

常用集群架构图

Loading...