ClusterMode.2 - wyc902/redis GitHub Wiki

cluster模式下的节点间链接的建立有点类似tcp的三次握手。

  1. 1 通过客户端向节点1 发送cluster meet command,cluster meet 节点2IP 节点2端口
  2. 2 节点1收到该命令会创建一个clusterNode结构分配给节点2,并且 clusterState.nodes.add(clusterNode2)
  3. 3 节点1向节点2发送meet消息
  4. 4 节点2收到节点1发来的meet消息重复步骤2,然后向节点1发送pong消息
  5. 5 节点1收到pong消息,说明4被成功执行,向节点2发送ping消息
  6. 6 节点2收到ping消息说明5被成功执行,连接就此建立。
  7. 7 节点1通过gossip协议广播节点2的信息,其他节点和节点2一一建立联系。

客户端槽分配 cluster addslots 0,1,。。命令

    1. 节点1收到命令后更新自己的clusterNode.slots数组,该数组有16384个bit位,第i位是1表示槽i归该node处理,所以更新就是位运算,时间复杂度是常数级的。
    1. 节点1更新完自己的slots数组后会向集群里面的其他节点发送自己的clusterNode.slots数组,这样其他节点就会知道节点1处理哪些槽。
    1. 节点2收到节点1的clusterNode.slots数组后,通过clusterState.nodes更新和节点1对应的clusterNode结构,同时clusterState.slots数组,这样就知道槽i归节点1处理。