CLUSTER MEET

CLUSTER MEET ip port [cluster-bus-port]
Available since:
Redis Open Source 3.0.0
Time complexity:
O(1)
ACL categories:
@admin, @slow, @dangerous,
Compatibility:
Redis Software and Redis Cloud compatibility

CLUSTER MEET is used in order to connect different Redis nodes with cluster support enabled, into a working cluster.

The basic idea is that nodes by default don't trust each other, and are considered unknown, so that it is unlikely that different cluster nodes will mix into a single one because of system administration errors or network addresses modifications.

So in order for a given node to accept another one into the list of nodes composing a Redis Cluster, there are only two ways:

  1. The system administrator sends a CLUSTER MEET command to force a node to meet another one.
  2. An already known node sends a list of nodes in the gossip section that we are not aware of. If the receiving node trusts the sending node as a known node, it will process the gossip section and send a handshake to the nodes that are still not known.

Note that Redis Cluster needs to form a full mesh (each node is connected with each other node), but in order to create a cluster, there is no need to send all the CLUSTER MEET commands needed to form the full mesh. What matter is to send enough CLUSTER MEET messages so that each node can reach each other node through a chain of known nodes. Thanks to the exchange of gossip information in heartbeat packets, the missing links will be created.

So, if we link node A with node B via CLUSTER MEET, and B with C, A and C will find their ways to handshake and create a link.

Another example: if we imagine a cluster formed of the following four nodes called A, B, C and D, we may send just the following set of commands to A:

  1. CLUSTER MEET B-ip B-port
  2. CLUSTER MEET C-ip C-port
  3. CLUSTER MEET D-ip D-port

As a side effect of A knowing and being known by all the other nodes, it will send gossip sections in the heartbeat packets that will allow each other node to create a link with each other one, forming a full mesh in a matter of seconds, even if the cluster is large.

Moreover CLUSTER MEET does not need to be reciprocal. If I send the command to A in order to join B, I don't need to also send it to B in order to join A.

If the optional cluster_bus_port argument is not provided, the default of client port number + 10,000 will be used.

Required arguments

ip

The IP address of the node to add to the cluster.

port

The client port of the node to add.

Optional arguments

cluster-bus-port

The cluster bus port of the node. If omitted, it defaults to the client port number plus 10,000.

Details

Implementation: MEET and PING packets

When you send CLUSTER MEET to a node, the node specified in the command does not yet know the receiving node. To establish trust, the receiving node sends a MEET packet to the specified node instead of a PING packet. The two packets have the same format, but MEET forces the specified node to trust the sender.

Redis Software and Redis Cloud compatibility

Redis
Software
Redis
Cloud
Notes
❌ Standard
❌ Active-Active
❌ Standard
❌ Active-Active

Return information

Simple string reply: OK if the command was successful. If the address or port specified are invalid an error is returned.

History

  • Starting with Redis version 4.0.0: Added the optional cluster_bus_port argument.
RATE THIS PAGE
Back to top ↑