Redis 集群在生产环境中通常是由多个节点服务器所组成,那么多个节点是如何建立起连接的呢?起初 Redis 集群是由各个节点各自为一个集群的,通过执行 CLUSTER MEET 目标机IP 目标机端口
命令,使得两台机器建立连接,从而构成集群。举个例子,假设现在有 3 个节点要组成一个 Redis 集群。
- 起初,Redis 有 3 个节点且各自为一个伪集群,其如下图:
- 通过客户端向节点 2 发送
CLUSTER MEET 节点1IP 节点1端口
命令,此时节点 2 加入了节点 1 所在的集群,其如下图:
- 同理,通过客户端向节点 3 发送
CLUSTER MEET 节点1IP 节点1端口
命令,此时节点 3 加入了节点 1 所在的集群,在节点 1 和节点 3 建连完成后,节点 2 也会和节点 3 完成相同的操作,最终形成了 3 个节点互联的集群,其如下图所示:
上述流程展示了一个集群建连的过程,那么两个节点在建连的时候到底是怎么实现的呢?举个例子,以节点 1 和节点 2 建连为例:
- 首先节点 1 会创建一个 Node 结构体,用于存储节点 2 的信息,比如节点 2 的名字、IP、Port 等等信息。
- 然后节点 1 发送
CLUSTER MEET IP PORT
命令到节点 2。 - 节点 2 接收到节点 1 的命令后,在其节点上创建一个 Node 用于存储节点 1 的信息。
- 节点 2 存储完成节点 1 的信息后,向节点 1 发送 PONG 命令,表示自己已经成功接收到了节点 1 的信息。
- 节点 1 收到节点 2 返回的 PONG 命令后,然后节点 1 再向节点 2 发送 PING 命令,表示节点 1 知道节点 2 成功接收到节点 1 发送的消息了,至此两个节点完成建连。