diff --git a/akka-docs/src/main/paradox/images/member-state-diagram.png b/akka-docs/src/main/paradox/images/member-state-diagram.png new file mode 100644 index 0000000000..d0107cf9d0 Binary files /dev/null and b/akka-docs/src/main/paradox/images/member-state-diagram.png differ diff --git a/akka-docs/src/main/paradox/images/member-states-weakly-up.png b/akka-docs/src/main/paradox/images/member-states-weakly-up.png deleted file mode 100644 index 8993e9acc1..0000000000 Binary files a/akka-docs/src/main/paradox/images/member-states-weakly-up.png and /dev/null differ diff --git a/akka-docs/src/main/paradox/images/member-states.drawing b/akka-docs/src/main/paradox/images/member-states.drawing deleted file mode 100644 index 560ed389c7..0000000000 Binary files a/akka-docs/src/main/paradox/images/member-states.drawing and /dev/null differ diff --git a/akka-docs/src/main/paradox/images/member-states.png b/akka-docs/src/main/paradox/images/member-states.png deleted file mode 100644 index b9870bce1c..0000000000 Binary files a/akka-docs/src/main/paradox/images/member-states.png and /dev/null differ diff --git a/akka-docs/src/main/paradox/images/member-states.svg b/akka-docs/src/main/paradox/images/member-states.svg deleted file mode 100644 index 28f8c7fc6c..0000000000 --- a/akka-docs/src/main/paradox/images/member-states.svg +++ /dev/null @@ -1,818 +0,0 @@ - - - -image/svg+xmlunreachable* -joining -up -leaving -exiting -down -(leader action) -(fd*) -(fd*) -(fd*) -(fd*) -leave -(leader action) -(leader action) -join -removed - \ No newline at end of file diff --git a/akka-docs/src/main/paradox/typed/cluster-membership.md b/akka-docs/src/main/paradox/typed/cluster-membership.md index 74738a3604..fa142d406b 100644 --- a/akka-docs/src/main/paradox/typed/cluster-membership.md +++ b/akka-docs/src/main/paradox/typed/cluster-membership.md @@ -65,8 +65,8 @@ A node begins in the `joining` state. Once all nodes have seen that the new node is joining (through gossip convergence) the `leader` will set the member state to `up`. -If a node is leaving the cluster in a safe, expected manner then it switches to -the `leaving` state. Once the leader sees the convergence on the node in the +If a node is leaving the cluster in a safe, expected manner, for example through @ref[coordinated shutdown](../coordinated-shutdown.md), +it switches to the `leaving` state. Once the leader sees the convergence on the node in the `leaving` state, the leader will then move it to `exiting`. Once all nodes have seen the exiting state (convergence) the `leader` will remove the node from the cluster, marking it as `removed`. @@ -115,35 +115,29 @@ members in quorum decisions. ## State Diagrams -### State Diagram for the Member States (`akka.cluster.allow-weakly-up-members=off`) +### State Diagram for the Member States -![member-states.png](../images/member-states.png) - -### State Diagram for the Member States (`akka.cluster.allow-weakly-up-members=on`) - -![member-states-weakly-up.png](../images/member-states-weakly-up.png) +![member-states.png](../images/member-state-diagram.png) #### User Actions * **join** - join a single node to a cluster - can be explicit or automatic on startup if a node to join have been specified in the configuration - * **leave** - tell a node to leave the cluster gracefully + * **leave** - tell a node to leave the cluster gracefully, normally triggered by ActorSystem or JVM shutdown through @ref[coordinated shutdown](../coordinated-shutdown.md) - * **down** - mark a node as down + * **down** - mark a node as down. This action is required to remove crashed nodes (that did not 'leave') from the cluster. It can be triggered manually, through [Cluster HTTP Management](https://doc.akka.io/docs/akka-management/current/cluster-http-management.html#put-cluster-members-address-responses), or automatically by a @ref[downing provider](cluster.md#downing) like [Split Brain Resolver](https://doc.akka.io/docs/akka-enhancements/current/split-brain-resolver.html) #### Leader Actions -The `leader` has the following duties: +The `leader` has the duty of confirming user actions to shift members in and out of the cluster: - * shifting members in and out of the cluster - * joining -> up - * weakly up -> up *(no convergence is required for this leader action to be performed)* - * exiting -> removed + * joining ⭢ up + * weakly up ⭢ up *(no convergence is required for this leader action to be performed)* + * leaving ⭢ exiting + * exiting ⭢ removed + * down ⭢ removed #### Failure Detection and Unreachability - * **fd*** - the failure detector of one of the monitoring nodes has triggered -causing the monitored node to be marked as unreachable - - * **unreachable*** - unreachable is not a real member states but more of a flag in addition to the state signaling that the cluster is unable to talk to this node, after being unreachable the failure detector may detect it as reachable again and thereby remove the flag +Being unreachable is not a separate member state but rather a flag in addition to the state. A failure detector on each node that monitors another node can mark the monitored node as unreachable independent of its state. Afterwards the failure detector continues monitoring the node until it detects it as reachable again and removes the flag. A node is considered reachable again only after all monitoring nodes see it as reachable again.