diff options
Diffstat (limited to 'iredis/data/commands/cluster-meet.md')
-rw-r--r-- | iredis/data/commands/cluster-meet.md | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/iredis/data/commands/cluster-meet.md b/iredis/data/commands/cluster-meet.md new file mode 100644 index 0000000..3402faa --- /dev/null +++ b/iredis/data/commands/cluster-meet.md @@ -0,0 +1,55 @@ +`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 an 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. + +## Implementation details: MEET and PING packets + +When a given node receives a `CLUSTER MEET` message, the node specified in the +command still does not know the node we sent the command to. So in order for the +node to force the receiver to accept it as a trusted node, it sends a `MEET` +packet instead of a `PING` packet. The two packets have exactly the same format, +but the former forces the receiver to acknowledge the node as trusted. + +@return + +@simple-string-reply: `OK` if the command was successful. If the address or port +specified are invalid an error is returned. |