码迷,mamicode.com
首页 > 其他好文 > 详细

Redis之集群接收命令

时间:2021-01-25 10:48:31      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:alt   sage   mes   des   ret   请求   端口   完成   key   

  本文摘录自 Redis设计与实现

  如果客户端要连接redis集群而不是单机,则应该是./redis-cli -c 注意一定要有-c

一  搭建集群

  假设现在有两台Redis,都以cluster的方式进行启动。可以通过向A发送,CLUSTER MEET B.IP B.PORT的方式,让这两个节点组成一个集群

  收到命令的节点A将与节点B进行握手(handshake),以此来确认彼此的存在,并为将来的进一步通信打好基础:

  • ①节点A会为节点B创建一个clusterNode结构,并将该结构添加到自己的 clusterState.nodes字典里面
  • ②之后,节点A将根据CLUSTER MEET命令给定的IP地址和端口号,向节点B发送一条 MEET消息(message)
  • ③如果一切顺利,节点B将接收到节点A发送的MEET消息,节点B会为节点A创建一个 clusterNode结构,并将该结构添加到自己的clusterState.nodes字典里面
  • ④之后,节点B将向节点A返回一条PONG消息
  • ⑤如果一切顺利,节点A将接收到节点B返回的PONG消息,通过这条PONG消息节点A 可以知道节点B已经成功地接收到了自己发送的MEET消息
  • ⑥之后,节点A将向节点B返回一条PING消息
  • ⑦如果一切顺利,节点B将接收到节点A返回的PING消息,通过这条PING消息节点B可以知道节点A已经成功地接收到了自己返回的PONG消息,握手完成

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

二  计算key所在的槽位

  def slot_number(key):

    return CRC16(key) & 16383;

  然后判断槽是否应当与当前节点处理

  收到请求的节点会检查ClusterState.Slots数组中的项i,判断键所在的槽是否应该由自己负责

  1 如果clusterState.slots[i] 指针指向的是自己,那么节点应该执行客户端的命令

  2 如果clusterState.slots[i] 不是自己,那么就根据指针所指向的节点的ip和端口号,像客户端返回MOVED错误

  技术图片

二 集群的从节点

  可以使用CLUSTER REPLICATE node_id的方式配置一个节点为集群中主节点的从节点,注意node_id是run_id

  这就说明使用了cluster真的就不需要哨兵了,因为redis cluster的各个节点会定期的彼此发送PING消息

    

Redis之集群接收命令

标签:alt   sage   mes   des   ret   请求   端口   完成   key   

原文地址:https://www.cnblogs.com/juniorMa/p/14314303.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!