CLUSTER MEET
强制一个节点与另一个节点握手。
语法
CLUSTER MEET ip port [cluster-bus-port]
引入版本:3.0.0
复杂度摘要:O(1)
CLUSTER MEET 用于将启用集群支持的不同 Redis 节点连接到工作集群中。
基本思想是节点默认情况下不相互信任,并且被认为是未知的,因此不同的集群节点不太可能由于系统管理错误或网络地址修改而混合到一个集群中。
因此,为了让给定节点接受另一个节点进入组成 Redis 集群的节点列表,只有两种方法:
- 系统管理员发送
CLUSTER MEET命令强制一个节点与另一个节点会面。 - 已知节点发送我们不知道的八卦部分中的节点列表。如果接收节点信任发送节点作为已知节点,它将处理八卦部分并向仍然未知的节点发送握手。
请注意,Redis Cluster 需要形成全网格(每个节点都相互连接),但为了创建集群,不需要发送形成全网格所需的所有 CLUSTER MEET 命令。重要的是发送足够的 CLUSTER MEET 消息,以便每个节点都可以通过 已知节点链 到达彼此的节点。由于心跳包中八卦信息的交换,将创建丢失的链接。
因此,如果我们通过 CLUSTER MEET 将节点 A 与节点 B 链接,并将 B 与 C 链接,则 A 和 C 将找到握手并创建链接的方法。
另一个例子:如果我们想象一个由以下四个节点(称为 A、B、C 和 D)组成的集群,我们可以向 A 发送以下一组命令:
CLUSTER MEET B-ip B-portCLUSTER MEET C-ip C-portCLUSTER MEET D-ip D-port
作为 A 知道并被所有其他节点所知的副作用,它将在心跳数据包中发送八卦部分,这将允许每个其他节点彼此创建链接,在几秒钟内形成完整的网格,即使集群很大。
此外,CLUSTER MEET 不需要是倒数的。如果我将命令发送到 A 以加入 B,我不需要也将其发送到 B 以加入 A。
如果未提供可选的 cluster_bus_port 参数,则将使用默认的客户端端口号 + 10,000。
必需参数
ip
要添加到集群的节点的 IP 地址。
port
要添加的节点的客户端端口。
可选参数
cluster-bus-port
节点的集群总线端口。如果省略,则默认为客户端端口号加 10,000。
详细说明
实现:MEET和PING数据包
当您向节点发送 CLUSTER MEET 时,命令中指定的节点尚不知道接收节点。为了建立信任,接收节点向指定节点发送 MEET 数据包而不是 PING 数据包。两个数据包具有相同的格式,但 MEET 强制指定节点信任发送者。
Redis Software 与 Redis Cloud 兼容性
| Redis 软件 |
Redis Cloud |
说明 |
|---|---|---|
| ❌ 标准 |
❌ 标准 |
返回值
RESP2
简单字符串回复:如果命令成功,则为 OK。如果指定的地址或端口无效,则返回错误。
RESP3
简单字符串回复:如果命令成功,则为 OK。如果指定的地址或端口无效,则返回错误。
资料来源:Redis 官方 CLUSTER MEET 文档;中文内容参考 Redis 文档许可。