在线文档教程

cluster meet

CLUSTER

CLUSTER MEET ip port

自3.0.0起可用。

时间复杂度: O(1)

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.

实现细节:MEET 和 PING 数据包

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

返回值

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