集群会议
CLUSTER MEET ip port [cluster-bus-port]
- 从以下位置开始可用:
- 3.0.0
- 时间复杂度:
- O(1)
- ACL 类别:
-
@admin
,@slow
,@dangerous
,
CLUSTER MEET
用于将不同的 Redis 节点与集群连接
support enabled,导入到一个正在运行的集群中。
基本思想是节点默认情况下彼此不信任,并且 被视为未知,因此不同的集群节点不太可能 由于系统管理错误或网络原因,混合成一个 地址修改。
因此,为了让给定节点接受另一个节点进入节点列表 组成 Redis 集群,只有两种方式:
- 系统管理员发送
CLUSTER MEET
命令强制一个节点与另一个节点相遇。 - 已知节点在 gossip 部分发送我们不知道的节点列表。如果接收节点信任发送节点为已知节点,它将处理 gossip 部分并向仍然未知的节点发送握手。
注意,Redis Cluster 需要形成一个完整的网格(每个节点都与其他每个节点相连),但是为了创建集群,不需要将所有的CLUSTER MEET
命令。重要的是发送足够的CLUSTER MEET
消息,以便每个节点都可以通过已知节点链访问其他节点。由于在心跳数据包中交换了 gossip 信息,因此将创建缺失的链接。
因此,如果我们通过CLUSTER MEET
和 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
知道并被所有其他节点知道,它将在心跳数据包中发送 gossip 部分,这将允许其他每个节点彼此创建链接,在几秒钟内形成一个完整的网格,即使集群很大。
此外CLUSTER MEET
不需要是互惠的。如果我将命令发送到 A 以加入 B,则无需将其同时发送到 B 以加入 A。
如果可选的cluster_bus_port
参数,则使用默认值 port + 10000。
实现细节:MEET 和 PING 数据包
当给定节点收到CLUSTER MEET
message 中,在
command 仍然不知道我们将命令发送到的节点。所以为了
节点强制接收方接受它作为可信节点,它会发送一个MEET
packet 而不是PING
包。这两个数据包恰好具有
相同的格式,但前者强制接收方将节点确认为
信任。
RESP2/RESP3 回复
简单的字符串回复:OK
如果命令成功。如果指定的地址或端口无效,则返回错误。历史
- 从 Redis 版本 4.0.0 开始:添加了可选的
cluster_bus_port
论点。