Redis解析之集群(一)

来源:互联网 发布:微信一键加好友软件源 编辑:程序博客网 时间:2024/04/28 02:27
Redis-Cluster 架构:
这里写图片描述

1)所有 Redis 节点彼此互联(PING-PONG 机制),内部使用二进制协议优化传输速度和带宽。

2)集群节点之间定期交换节点信息并且更新,从发送节点的角度看,这些信息包括:集群内有哪些节点,节点IP、PORT、名字、状态(比如OK,PFAIL,FAIL)、角色(master 或者 slave)等。

3)节点定期给其他所有的节点发送Ping,cluster-node-timeout(可配置,毫秒级)时间内没有收到对方的回复,则单方面认为对端节点宕机,将该节点标为PFAIL状态。通过节点之间交换信息,收集到通过超过半数的节点都认为这个节点为PFAIL,则将该节点标记为FAIL,并且将其发送给其他所有节点,其他所有节点收到后立即认为该节点宕机。

4)客户端与 Redis节点直连,不需要中间proxy层;客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。

5)Redis-Cluster 内置数据自动分片机制,集群内部将所有的key映射到 [0-16383] 2^14个Slot中,集群中的每个节点负责其中的一部分的Slot的读写。

6)客户端可向任一个集群节点发送命令,当节点收到自己不负责的 Slot 的请求时,会将负责请求 Key 所在Slot 的节点地址返回给客户端,客户端收到后自动将原请求重新发往这个地址。Key 与 Slot 的对应关系由CRC16(key) % 16384 决定。

7)一个 Master 可对应0个或多个 Slave,若没有 Slave,则意味着 Master 宕机后其负责的Slot读写服务不可用;否则,主宕机时某个 Slave 会被提升为 Master,具体哪个从被提升为主,协议类似于Raft。

8)整个集群不可用(cluster_state:fail),需满足以下条件之一:集群任意 Master 挂掉,且该 Master 没有 Slave;超过半数以上 Master 挂掉(无论是否有 Slave)。
当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误。

0 0
原创粉丝点击