The decisions of joining existing seed-nodes or join self to form new
cluster is performed by the JoinDecider
and the implementation is
defined in configuration so support different strategies.
Join existing cluster.
The decision of joining "self" is made by deterministically sorting the discovered service IPs and picking the *lowest* address.
The decision of joining "self" is made by deterministically sorting the discovered service IPs and picking the *lowest* address. Only the node with lowest address joins itself.
If any of the contact-points returns a list of seed nodes it joins the existing cluster immediately.
Joining "self" is only done when enough number of contact points have been discovered (required-contact-point-nr
)
and there have been no changes to the discovered contact points during the stable-margin
.
There must also be seed node observations from all discovered contact points before joining "self".
Full information about discovered contact points and found seed nodes.
Full information about discovered contact points and found seed nodes.
contactPoints
contains all nodes that were returned from the discovery (e.g. DNS lookup).
seedNodesObservations
contains the replies from those contact points when probing them
with the HTTP call. It only contains entries for the contact points that actually replied,
i.e. were reachable and running. Each such SeedNodesObservation
entry has the seedNodes
(Akka Cluster addresses) that were returned from that contact point. That Set
will be
empty if the node replied but is not part of an existing cluster yet, i.e. it hasn't joined.
There are also some timestamps that can be interesting. Note that currentTime
is passed in
to facilitate calculation of durations.
contactPointsChangedAt
is when the discovered contact points were last changed (e.g. via DNS lookup),
e.g. 5 seconds ago means that subsequent lookup attempts (1 per second) after that were successful and
returned the same set.
SeedNodesObservation.observedAt
was when that reply was received from that contact point.
The entry is removed if no reply was received within the probing-failure-timeout
meaning that it
is unreachable or not running.
There is no existing cluster running and this node decided to form a new cluster by joining itself.
There is no existing cluster running and this node decided to form a new cluster by joining itself. Other nodes should discover this and join the same.
Not ready to join yet, continue discovering contact points and retrieve seed nodes.
Join existing cluster.
The self
Address
will be removed from the returnedseedNodes
to be sure that it's never joining itself via this decision.