Redis 集群在生产环境中通常是由多个节点服务器所组成,那么多个节点是如何建立起连接的呢?起初 Redis 集群是由各个节点各自为一个集群的,通过执行 CLUSTER MEET 目标机IP 目标机端口 命令,使得两台机器建立连接,从而构成集群。举个例子,假设现在有 3 个节点要组成一个 Redis 集群。

    1. 起初,Redis 有 3 个节点且各自为一个伪集群,其如下图:

    Redis集群如何建立连接的 - 图1

    1. 通过客户端向节点 2 发送 CLUSTER MEET 节点1IP 节点1端口 命令,此时节点 2 加入了节点 1 所在的集群,其如下图:

    Redis集群如何建立连接的 - 图2

    1. 同理,通过客户端向节点 3 发送 CLUSTER MEET 节点1IP 节点1端口 命令,此时节点 3 加入了节点 1 所在的集群,在节点 1 和节点 3 建连完成后,节点 2 也会和节点 3 完成相同的操作,最终形成了 3 个节点互联的集群,其如下图所示:

    Redis集群如何建立连接的 - 图3

    上述流程展示了一个集群建连的过程,那么两个节点在建连的时候到底是怎么实现的呢?举个例子,以节点 1 和节点 2 建连为例:

    1. 首先节点 1 会创建一个 Node 结构体,用于存储节点 2 的信息,比如节点 2 的名字、IP、Port 等等信息。
    2. 然后节点 1 发送 CLUSTER MEET IP PORT 命令到节点 2。
    3. 节点 2 接收到节点 1 的命令后,在其节点上创建一个 Node 用于存储节点 1 的信息。
    4. 节点 2 存储完成节点 1 的信息后,向节点 1 发送 PONG 命令,表示自己已经成功接收到了节点 1 的信息。
    5. 节点 1 收到节点 2 返回的 PONG 命令后,然后节点 1 再向节点 2 发送 PING 命令,表示节点 1 知道节点 2 成功接收到节点 1 发送的消息了,至此两个节点完成建连。