18.Redis Cluster

来源:互联网 发布:python socket select 编辑:程序博客网 时间:2024/06/05 13:21


集群

Redis集群是Redis提供的分布式数据库方案,集群通过分片sharding)来进行数据共享,并提供复制故障转移功能。


集群节点保存键值对以及键值对过期时间的方式,和单机服务器的方式完全相同。

节点和单机服务器在数据库方面的一个区别是,节点只能使用0号数据库,而单机Redis服务器没有这个限制。


集群数据结构

一个节点就是一个运行在集群模式下的Redis服务器,Redis服务器在启动时会根据cluster-enabled配置选项是否为yes来决定是否开启服务器的集群模式。

 

每个节点都会使用一个clusterNode结构来记录自己的状态,比如节点的创建时间、名字、当前配置纪元、ip和端口等等,并为集群中的所有其他节点都创建一个相应的clusterNode结构,以此来记录其他节点状态。

 

每个节点都还保存着一个clusterState结构,该结构记录了在当前节点的视角下,集群目前所处的状态,例如集群是在线还是下线,集群包含多少个节点,集群当前的配置纪元等。

 

节点握手

CLUATERMEET <ip> <port>

向一个节点node发送CLUATERMEET命令,可以让node节点与ipport所指定的节点握手(handshake),当握手成功时,node节点就会将ipport所指定的节点添加到node节点当前所在的集群中。

 

客户端向节点A发送CLUASTERMEET命令,收到命令的节点A将与节点B进行握手:

  1. 节点A会为节点B创建一个clusterNode结构,并将该结构添加到自己的clusterState.nodes字典里面;

  2. 之后,节点A将根据CLUATER MEET命令给定的IP地址和端口,向节点B发送一个MEET消息;

  3. 如果一切顺利,节点B将接收到节点A发送的MEET消息,节点B会为节点A创建一个clusterNode结构,并将该结构添加到自己的clusterState.nodes字典里面;

  4. 之后,节点B将向节点A返回一条PONG消息;

  5. 如果一切顺利,节点A将接收到节点B返回的PONG消息,通过这条PONG消息确认节点B已经成功接收MEET消息;

  6. 之后,节点A将向节点B返回一条PING消息;

  7. 如果一切顺利,节点B将接收到节点A返回的PING消息,通过这条PING消息确认节点A已经成功接收到PONG消息,握手完成。

    握手成功后,节点A会将节点B的消息通过Gossip协议传播给集群中其他节点,让其他节点也与节点B进行握手,最终,经过一段时间之后,节点B会被集群中的所有节点认识。


原创粉丝点击