From dd874ab02db04853d4b5952712ab34693f9a93de Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 4 Jan 2023 08:19:36 +0100 Subject: Merging upstream version 1.13.0. Signed-off-by: Daniel Baumann --- iredis/data/commands/cluster-meet.md | 49 +++++++++++++----------------------- 1 file changed, 18 insertions(+), 31 deletions(-) (limited to 'iredis/data/commands/cluster-meet.md') diff --git a/iredis/data/commands/cluster-meet.md b/iredis/data/commands/cluster-meet.md index 3402faa..b33c9fb 100644 --- a/iredis/data/commands/cluster-meet.md +++ b/iredis/data/commands/cluster-meet.md @@ -2,54 +2,41 @@ 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. +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. +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. +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. +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: +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. +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. +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 port + 10000 will be used. ## 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. +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. +@simple-string-reply: `OK` if the command was successful. If the address or port specified are invalid an error is returned. -- cgit v1.2.3