集群会议

语法
CLUSTER MEET ip port [cluster-bus-port]
从以下位置开始可用:
3.0.0
时间复杂度:
O(1)
ACL 类别:
@admin, @slow, @dangerous,

CLUSTER MEET用于将不同的 Redis 节点与集群连接 support enabled,导入到一个正在运行的集群中。

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

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

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

注意,Redis Cluster 需要形成一个完整的网格(每个节点都与其他每个节点相连),但是为了创建集群,不需要将所有的CLUSTER MEET命令。重要的是发送足够的CLUSTER MEET消息,以便每个节点都可以通过已知节点链访问其他节点。由于在心跳数据包中交换了 gossip 信息,因此将创建缺失的链接。

因此,如果我们通过CLUSTER MEET和 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知道并被所有其他节点知道,它将在心跳数据包中发送 gossip 部分,这将允许其他每个节点彼此创建链接,在几秒钟内形成一个完整的网格,即使集群很大。

此外CLUSTER MEET不需要是互惠的。如果我将命令发送到 A 以加入 B,则无需将其同时发送到 B 以加入 A。

如果可选的cluster_bus_port参数,则使用默认值 port + 10000。

实现细节:MEET 和 PING 数据包

当给定节点收到CLUSTER MEETmessage 中,在 command 仍然不知道我们将命令发送到的节点。所以为了 节点强制接收方接受它作为可信节点,它会发送一个MEETpacket 而不是PING包。这两个数据包恰好具有 相同的格式,但前者强制接收方将节点确认为 信任。

RESP2/RESP3 回复

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

历史

  • 从 Redis 版本 4.0.0 开始:添加了可选的cluster_bus_port论点。
为本页评分
返回顶部 ↑