ScyllaDB University Live | Free Virtual Training Event
Learn more
ScyllaDB Documentation Logo Documentation
  • Deployments
    • Cloud
    • Server
  • Tools
    • ScyllaDB Manager
    • ScyllaDB Monitoring Stack
    • ScyllaDB Operator
  • Drivers
    • CQL Drivers
    • DynamoDB Drivers
    • Supported Driver Versions
  • Resources
    • ScyllaDB University
    • Community Forum
    • Tutorials
Install
Search Ask AI
ScyllaDB Docs ScyllaDB Operator Understand Bootstrap synchronisation

Bootstrap synchronisation¶

This page explains why bootstrap synchronisation exists, how the barrier mechanism works, and how node statuses are propagated across the cluster.

The problem¶

ScyllaDB requires that no node in the cluster considers any other node to be down when a new node joins. If this precondition is not met and a non-idempotent bootstrap operation begins, the coordinator denies the join request and leaves the new node in a state that is difficult to recover from automatically.

In Kubernetes, multiple pods can start simultaneously — for example, when a StatefulSet scales up or when pods are rescheduled after a disruption. Without coordination, a new node could attempt to bootstrap while another node is still restarting and appears down to its peers.

How the barrier works¶

When the BootstrapSynchronisation feature gate is enabled, the Operator adds an init container (scylladb-bootstrap-barrier) to every ScyllaDB pod. This init container runs before the ScyllaDB process starts and gates the bootstrap on a precondition check.

Decision flow¶

  1. Already bootstrapped? — The init container inspects the data directory for existing SSTables. If the node has already completed bootstrap (the bootstrapped column in system.local reads COMPLETED), the barrier exits immediately. Restarting nodes are never blocked.

  2. Force annotation set? — If the node’s member Service carries the annotation scylla-operator.scylladb.com/force-proceed-to-bootstrap: "true", the barrier exits immediately, bypassing the precondition. The annotation can also be set on the ScyllaCluster resource, which propagates it to all member Services in the datacenter.

  3. Replacing a dead node? — If the node is being added as a replacement (the replacement annotation is present on the Service), the barrier exits immediately. Replacement has its own prerequisites that are outside the scope of this mechanism.

  4. Precondition check — The init container watches internal node-status report resources (ScyllaDBDatacenterNodesStatusReport) and evaluates whether every reporting node in the cluster sees every other node as UP. The barrier blocks until this condition is satisfied.

Node status propagation¶

Node statuses flow through a two-stage pipeline:

Stage 1 — Sidecar reports per-node status¶

A StatusReporter controller runs inside the sidecar container on every ScyllaDB pod. It periodically calls the local ScyllaDB node’s storage service API to get the current gossip view — which nodes are seen as UP or DOWN. The result is written as a JSON-encoded annotation on the pod.

Stage 2 — Datacenter controller assembles the report¶

On each reconciliation, the internal datacenter controller reads the status annotation from every pod in the datacenter and assembles them into an internal ScyllaDBDatacenterNodesStatusReport custom resource. This resource is namespaced and contains a nested structure:

ScyllaDBDatacenterNodesStatusReport
└── datacenter (gossip DC name)
    └── rack[]
        └── node[]
            ├── ordinal
            ├── hostID
            └── observedNodes[]
                ├── hostID (of the observed node)
                └── status ("UP" or "DOWN")

Each node entry records how that node sees every other node in the cluster.

Note

ScyllaDBDatacenterNodesStatusReport is an internal resource used by the Operator for coordinating operations. It is not intended for direct user interaction.

Precondition evaluation¶

The precondition is satisfied when every reporting node (excluding the node being bootstrapped) sees every other node as UP. Specifically:

  • Every node must have a host ID.

  • Every node must have submitted a status report.

  • In each node’s report, every other node’s host ID must appear with status UP.

If any node is missing a host ID, has not yet reported, does not list another node, or reports another node as DOWN, the precondition is not satisfied and the barrier continues to wait.

Feature gate and version requirements¶

Requirement

Value

Feature gate

BootstrapSynchronisation (default off since v1.19)

Minimum ScyllaDB version

2025.2

The feature gate must be enabled in the Operator’s command-line flags. The Operator also checks the ScyllaDB container image version and only adds the init container when the version satisfies ≥ 2025.2.0.

See Feature gates for instructions on enabling feature gates.

Limitations¶

  • Node replacement — Bootstrap synchronisation does not apply to nodes being added as replacements for dead nodes. You must verify the replacement prerequisites manually.

  • Manual multi-DC with ScyllaCluster — When multiple ScyllaCluster resources are manually configured as a multi-datacenter cluster, node statuses can only be propagated within a single datacenter. Check node status in all datacenters manually before adding nodes.

  • Alpha status — The feature is opt-in while ScyllaDB versions prior to 2025.2 are still supported by the Operator.

Overriding the precondition¶

In scenarios where you need to bypass the barrier for a specific node or an entire datacenter, apply the force annotation:

kubectl annotate service <member-service-name> \
  scylla-operator.scylladb.com/force-proceed-to-bootstrap=true
kubectl -n=<namespace> annotate scyllacluster <name> \
  scylla-operator.scylladb.com/force-proceed-to-bootstrap=true

The annotation is propagated from the ScyllaCluster through the internal ScyllaDBDatacenter resource (which shares the same name) to all member Services in the datacenter.

Caution

Forcing bootstrap bypass disables the safety check. Use this only when you are certain the cluster is in a healthy state or when recovering from a known issue.

Related pages¶

  • Ignition — the startup gating mechanism that runs after the bootstrap barrier.

  • Sidecar — the sidecar container that runs the StatusReporter.

  • Understand — component diagram and CRD list.

Was this page helpful?

PREVIOUS
ScyllaDB Monitoring overview
NEXT
Automatic data cleanup
  • Create an issue
  • Edit this page

On this page

  • Bootstrap synchronisation
    • The problem
    • How the barrier works
      • Decision flow
    • Node status propagation
      • Stage 1 — Sidecar reports per-node status
      • Stage 2 — Datacenter controller assembles the report
    • Precondition evaluation
    • Feature gate and version requirements
    • Limitations
    • Overriding the precondition
    • Related pages
ScyllaDB Operator
Search Ask AI
  • v1.21
    • master
    • v1.21
    • v1.20
    • v1.19
    • v1.18
  • Get Started
    • What Is ScyllaDB Operator?
    • ScyllaDB Concepts on Kubernetes
  • Install Operator
    • Provision infrastructure
      • Set up a GKE cluster for ScyllaDB
      • Set up an EKS cluster for ScyllaDB
      • Set up an OKE cluster for ScyllaDB
      • Set up an OpenShift cluster for ScyllaDB
    • Install with GitOps
    • Install with Helm
    • Install on OpenShift
  • Deploy ScyllaDB
    • Before you deploy
      • Set up dedicated node pools
      • Configure CPU pinning
      • Configure nodes
      • Configure ScyllaDB Operator
    • Deploy your first cluster
    • Reference deployments
      • Reference deployment: GKE
      • Reference deployment: EKS
      • Reference deployment: OKE
      • Reference deployment: OpenShift
    • Install ScyllaDB Manager
    • Set up networking
      • Configure external access
      • IPv6 networking
        • Getting started with IPv6 networking
        • Configure dual-stack networking
        • Configure IPv6-only networking
        • Migrate clusters to IPv6
        • Troubleshoot IPv6 networking issues
        • IPv6 networking concepts
    • Set up monitoring
      • Set up ScyllaDB Monitoring
      • Set up ScyllaDB Monitoring on OpenShift
      • Expose Grafana
    • Production checklist
  • Connect Your App
    • Connect via CQL
    • Alternator (DynamoDB API)
    • Discovery endpoint
  • Understand
    • Storage
    • Tuning
    • ScyllaDB Manager
    • Networking
    • ScyllaDB Monitoring overview
    • Bootstrap synchronisation
    • Automatic data cleanup
    • Sidecar and pod anatomy
    • Ignition
    • Pod disruption budgets
    • Security
    • StatefulSets and racks
  • Operate
    • Scale, add, remove racks
    • Replace nodes
    • Expand storage volumes
    • Use maintenance mode
    • Back up and restore
    • Restore from backup
    • Perform a rolling restart
    • Migrate a rack to a new node pool
    • Pass additional ScyllaDB arguments
    • Configure precomputed IO properties
  • Upgrade
    • Upgrading ScyllaDB Operator
    • Upgrading ScyllaDB clusters
  • Troubleshoot
    • Investigate pod restarts
    • Change log level on a live cluster
    • Recover from a failed node replace
    • Troubleshoot performance
    • Collect debugging information
      • Collect data with must-gather
      • must-gather contents
      • Query system tables for debugging
    • Collect core dumps
  • Reference
    • API Reference
      • scylla.scylladb.com
        • NodeConfig (scylla.scylladb.com/v1alpha1)
        • RemoteKubernetesCluster (scylla.scylladb.com/v1alpha1)
        • RemoteOwner (scylla.scylladb.com/v1alpha1)
        • ScyllaCluster (scylla.scylladb.com/v1)
        • ScyllaDBCluster (scylla.scylladb.com/v1alpha1)
        • ScyllaDBDatacenterNodesStatusReport (scylla.scylladb.com/v1alpha1)
        • ScyllaDBDatacenter (scylla.scylladb.com/v1alpha1)
        • ScyllaDBManagerClusterRegistration (scylla.scylladb.com/v1alpha1)
        • ScyllaDBManagerTask (scylla.scylladb.com/v1alpha1)
        • ScyllaDBMonitoring (scylla.scylladb.com/v1alpha1)
        • ScyllaOperatorConfig (scylla.scylladb.com/v1alpha1)
    • Feature gates
    • IPv6 configuration reference
    • Releases
    • Known issues
    • Conditions reference
    • nodetool alternatives
  • Contributing to ScyllaDB Operator
Docs Tutorials University Contact Us About Us
© 2026, ScyllaDB. All rights reserved. | Terms of Service | Privacy Policy | ScyllaDB, and ScyllaDB Cloud, are registered trademarks of ScyllaDB, Inc.
Last updated on 22 May 2026.
Powered by Sphinx 9.1.0 & ScyllaDB Theme 1.9.2