Hi,
We are validating the migration path for increasing Zeebe high availability.
Our goal was to migrate a cluster from:
clusterSize = 1
partitionsCount = 1
replicationFactor = 1
to
clusterSize = 3
partitionsCount = 3
replicationFactor = 3
using the official Atomic Cluster Scaling API.
Environment
Camunda Platform 8.9.13 Enterprise
Kubernetes
Elasticsearch 8
Official Camunda Helm Chart
Steps performed
Increased the Zeebe StatefulSet to 3 replicas.
Waited until all broker pods were created(actually, were not healthy)
Invoked the official /actuator/cluster API with a single request that:
added broker 1;
added broker 2;
increased partitionsCount from 1 to 3;
increased replicationFactor from 1 to 3.
The scaling operation started successfully but became permanently stuck during PARTITION_JOIN.
Broker logs repeatedly contained errors similar to:
Bootstrap step Partition 1 - Joining Raft failed
Sent join request to all known members, but all failed
Failed to send request to command-api-1, no remote address found
The cluster scaling operation remained in IN_PROGRESS indefinitely and could not be cancelled.
Recovery
To recover the cluster we eventually had to delete the PVC of zeebe-0.
After that the cluster became healthy again and all three brokers are running successfully.
However, after the recovery we also had to manually restore missing Identity configuration (roles/authorizations and related configuration), because part of the Identity configuration became unavailable.
Elasticsearch data was not deleted during the recovery.
Current issues
Although the cluster is healthy now, we have several inconsistencies:
- Orphaned Process Instances
Operate still displays some Process Instances.
However, cancelling them always returns NOT_FOUND because Zeebe no longer knows these process instances. - Duplicate Process Definition versions
For the same BPMN process we now have two Process Definitions with version = 1.
It looks like Zeebe recreated version 1 after the recovery while Operate/Elasticsearch still contains the original version 1. - Identity inconsistency
Some Identity roles/authorizations and related configuration had to be recreated manually after the recovery.
Questions
Is migrating directly from 1/1/1 to 3/3/3 in a single /actuator/cluster request a supported scenario?
Is this a known issue in Camunda 8.9.13?
Is deleting the PVC of a single broker a supported recovery procedure after a failed Atomic Cluster Scaling operation?
What is the recommended recovery procedure to avoid inconsistent state between Zeebe, Operate and Identity?
Is there a supported way to remove orphaned Process Instances and duplicate Process Definitions without rebuilding Elasticsearch indices?
Any guidance would be greatly appreciated.
Thank you.