CLUSTER MEET

语法
CLUSTER MEET ip port [cluster-bus-port]
可用时间
3.0.0
时间复杂度
O(1)
ACL 类别
@admin, @slow, @dangerous,

CLUSTER MEET 用于将启用集群支持的不同 Redis 节点连接到一个工作集群中。

基本思想是,节点默认情况下互不信任,并被视为未知,因此,由于系统管理错误或网络地址修改,不同的集群节点不太可能混合到一个节点中。

因此,为了让给定节点接受另一个节点进入构成 Redis 集群的节点列表,只有两种方法

  1. 系统管理员发送一个 CLUSTER MEET 命令强制一个节点与另一个节点会面。
  2. 一个已知节点在八卦部分发送一个我们不知道的节点列表。如果接收节点将发送节点视为已知节点,则它将处理八卦部分并向仍然未知的节点发送握手。

请注意,Redis 集群需要形成一个完整的网状结构(每个节点都与其他每个节点连接),但是为了创建一个集群,不需要发送形成完整网状结构所需的所有 CLUSTER MEET 命令。重要的是发送足够的 CLUSTER MEET 消息,以便每个节点可以通过“已知节点链”到达其他每个节点。由于心跳数据包中八卦信息的交换,缺失的链接将在几秒钟内创建。即使集群很大。

因此,如果我们通过 CLUSTER MEET 将节点 A 与节点 B 链接起来,并将 B 与 C 链接起来,则 A 和 C 将找到它们握手并创建链接的方式。

另一个示例:如果我们想象一个由以下四个节点(称为 A、B、C 和 D)组成的集群,我们可能只向 A 发送以下命令集

  1. CLUSTER MEET B-ip B-port
  2. CLUSTER MEET C-ip C-port
  3. CLUSTER MEET D-ip D-port

作为 A 了解并被所有其他节点了解的副作用,它将在心跳数据包中发送八卦部分,这将允许其他每个节点相互创建链接,在几秒钟内形成一个完整的网状结构,即使集群很大。

此外,CLUSTER MEET 不需要是相互的。如果我向 A 发送命令以加入 B,则我不需要也向 B 发送命令以加入 A。

如果未提供可选的 cluster_bus_port 参数,将使用默认端口 + 10000。

实现细节:MEET 和 PING 数据包

当给定节点接收到一个 CLUSTER MEET 消息时,该命令中指定的节点仍然不知道我们向其发送命令的节点。因此,为了让该节点强制接收方接受它作为可信节点,它发送一个 MEET 数据包而不是一个 PING 数据包。这两个数据包的格式完全相同,但前者强制接收方承认该节点为可信节点。

RESP2/RESP3 响应

简单字符串回复: 如果命令成功,则回复 OK。如果指定的地址或端口无效,则返回错误。

历史

  • 从 Redis 版本 4.0.0 开始:添加了可选的 cluster_bus_port 参数。
RATE THIS PAGE
Back to top ↑