CLUSTER MEET
CLUSTER MEET ip port [cluster-bus-port]
- 可用时间
- 3.0.0
- 时间复杂度
- O(1)
- ACL 类别
-
@admin
,@slow
,@dangerous
,
CLUSTER MEET
用于将启用集群支持的不同 Redis 节点连接到一个工作集群中。
基本思想是,节点默认情况下互不信任,并被视为未知,因此,由于系统管理错误或网络地址修改,不同的集群节点不太可能混合到一个节点中。
因此,为了让给定节点接受另一个节点进入构成 Redis 集群的节点列表,只有两种方法
- 系统管理员发送一个
CLUSTER MEET
命令强制一个节点与另一个节点会面。 - 一个已知节点在八卦部分发送一个我们不知道的节点列表。如果接收节点将发送节点视为已知节点,则它将处理八卦部分并向仍然未知的节点发送握手。
请注意,Redis 集群需要形成一个完整的网状结构(每个节点都与其他每个节点连接),但是为了创建一个集群,不需要发送形成完整网状结构所需的所有 CLUSTER MEET
命令。重要的是发送足够的 CLUSTER MEET
消息,以便每个节点可以通过“已知节点链”到达其他每个节点。由于心跳数据包中八卦信息的交换,缺失的链接将在几秒钟内创建。即使集群很大。
因此,如果我们通过 CLUSTER MEET
将节点 A 与节点 B 链接起来,并将 B 与 C 链接起来,则 A 和 C 将找到它们握手并创建链接的方式。
另一个示例:如果我们想象一个由以下四个节点(称为 A、B、C 和 D)组成的集群,我们可能只向 A 发送以下命令集
CLUSTER MEET B-ip B-port
CLUSTER MEET C-ip C-port
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
参数。