Chapter 30Lesson 01~140 minutes

Data Center Edition, Clustering, High Availability, and Scale: Core Concepts and Mental Model

Understand Data Center Edition as one licensed SonarQube service distributed across load-balanced application nodes, a coordinated search cluster, and a shared durable database—not as several independent servers.

Data Center EditionClusteringHigh AvailabilityScaleOperations

Learning objectives

  • Explain why Data Center Edition (DCE) is one coordinated SonarQube Server deployment rather than several standalone SonarQube instances.
  • Describe the current minimum/default topology: two application nodes, three search nodes, one supported external database, and a reverse proxy/load balancer.
  • Trace scanner/report traffic through the load balancer, Web/Compute Engine work, shared database, and search cluster while keeping ceTaskId evidence distinct.
  • Identify the default cluster network boundaries and explain why inter-node ports must remain private.
  • Separate high availability from backup/disaster recovery, and scale application capacity separately from search/database capacity.
  • Record edition/license, node role/count, version/plugin consistency, shared secrets, search health, CE workload, and recovery state before making a change.

1. The practical problem: one service now has several failure domains

Chapter 27 taught you to separate Web, Compute Engine, database, and Elasticsearch evidence. Chapters 28–29 add backup/restore and versioned migration discipline. Data Center Edition combines those same responsibilities into a distributed deployment. That increases resilience and compute capacity, but it also creates new invariants: every node belongs to one cluster, node roles are explicit, versions/plugins must match, private networks must be reachable, the application nodes must share trust material, and all nodes ultimately depend on one supported durable database.

The wrong mental model is “run five SonarQube servers behind a load balancer.” Five independent servers would have separate search state, separate configuration, potentially different plugins, and no supported cluster membership. The correct model is one licensed SonarQube Server cluster whose application nodes coordinate with each other and whose search nodes form one Elasticsearch cluster.

revision → scanner/report upload → load balancer → application Web/CE → shared DB + search cluster → analysis/gate/UI; ceTaskId remains the task identity across the service

2. Mental model: load-balanced application tier + search tier + shared database

A scanner or browser reaches the public SonarQube URL through the reverse proxy/load balancer. The load balancer sends HTTP traffic to a healthy application node. Each application node hosts the Web process and Compute Engine capability; application nodes coordinate through the cluster transport. The application tier reads/writes the same supported external database and communicates with the search tier. The three search nodes host Elasticsearch and form one search cluster. Search indexes accelerate visibility and query behavior; they are not a second independent source of truth replacing the database.

Current minimum/default DCE topology
flowchart TD
  S[Scanner / browser / CI] --> LB[Reverse proxy / load balancer]
  LB --> A1[Application node 1\nWeb + Compute Engine]
  LB --> A2[Application node 2\nWeb + Compute Engine]
  A1 <--> A2
  A1 --> DB[(Supported shared database)]
  A2 --> DB
  A1 --> Q1[Search node 1]
  A1 --> Q2[Search node 2]
  A1 --> Q3[Search node 3]
  A2 --> Q1
  A2 --> Q2
  A2 --> Q3
  Q1 <--> Q2
  Q2 <--> Q3
  Q1 <--> Q3

Current SonarSource guidance defines two application nodes and three search nodes as both the minimum and default topology. With that topology, loss of one application node and one search node can be tolerated without user impact, assuming the remaining infrastructure—including database and network—remains healthy.

3. Node roles: scale the bottleneck you actually have

Role Owns Scaling signal Common wrong reaction
Application node Web/API requests and Compute Engine analysis-report processing Web latency, CE queue/worker saturation, CPU/RAM on app nodes Add search nodes when CE is the bottleneck
Search node Elasticsearch indexes and search/query/indexing workload Search health, heap/GC, disk latency/capacity, indexing pressure Add app nodes when search is saturated
Database Primary durable application state Latency, connection-pool pressure, locks, storage/IO, backup/HA posture Scale app tier while DB remains the bottleneck
Load balancer Public HTTP distribution and node-health routing Availability, health-check accuracy, TLS/proxy correctness Assume sticky sessions repair broken cluster membership

Current DCE guidance allows application nodes to scale up to ten total. That is a capacity tool, not a universal performance fix. Search and database limits remain independent.

4. Network and trust boundaries: four default cluster paths

The defaults below are operational contracts, not ports to expose broadly. Firewall rules should permit only the documented source→destination relationships, with explicit alternatives recorded when you override defaults.

Source Destination Property Default Purpose
Reverse proxy/LB Application nodes sonar.web.port 9000 HTTP traffic to the Web process
Application nodes Search nodes sonar.cluster.node.search.port 9001 Application-to-search HTTP communication
Search node Search nodes sonar.cluster.node.es.port 9002 Elasticsearch internal cluster transport
Application node Application nodes sonar.cluster.node.port 9003 Hazelcast application-cluster communication
Private means private. Ports 9001–9003 are cluster backplane paths. Do not publish them to the Internet or treat an external firewall hole as a routine troubleshooting fix.

5. Cluster identity and shared state that must agree

Every node enables cluster mode and declares a node role. Application nodes need a consistent application-host list and search-host list; search nodes need the search-cluster host list. Application nodes also share the JWT signing secret used by the built-in session mechanism. That shared JWT design is why the load balancer has no sticky-session requirement.

# Illustrative only — fake hostnames, not a production manifest.
sonar.cluster.enabled=true
sonar.cluster.name=academy-dce
sonar.cluster.node.type=application
sonar.cluster.node.host=app-1.internal
sonar.cluster.node.port=9003
sonar.cluster.hosts=app-1.internal,app-2.internal
sonar.cluster.search.hosts=search-1.internal:9001,search-2.internal:9001,search-3.internal:9001
sonar.auth.jwtBase64Hs256Secret=${DCE_SHARED_JWT_SECRET}

The secret is shown as an environment reference on purpose. Never copy a real cluster secret into source, a lesson, or a support ticket. Versions, plugins, and application-node configuration must likewise be controlled as one deployment artifact.

6. High availability is not disaster recovery

HA

Survive an app/search node failure within the cluster while continuing service. DCE is designed for this failure domain.

Capacity

Add application nodes when Web/CE compute is the bottleneck. Capacity work still requires measurements.

DR

Recover from database loss, region loss, corruption, operator mistakes, or catastrophic cluster loss using tested backups and restore plans.

Upgrade

Move the entire coordinated deployment through a supported version transition. DCE does not turn a database migration into an unconstrained rolling upgrade.

A five-node DCE cluster cannot protect you from an unprotected database, a bad shared configuration pushed everywhere, or a region-wide failure when every dependency is in that region. Chapter 28’s database-backed recovery remains mandatory.

7. Read-only inspection before any cluster change

For a licensed cluster, capture the following before scaling, patching, restarting, or removing a node:

edition/license: Data Center Edition / current license status
server target: 2026 Release 4.1 (2026.4.1) or the exact installed release
node inventory: app-1, app-2; search-1, search-2, search-3
node versions: exact and identical by deployment set
plugin inventory: exact and identical across application nodes
app hosts/search hosts: effective cluster membership
load balancer: backend list + health-check path/status
shared database: engine/version/endpoint/latency/backup status
search: cluster health + disk/heap/GC/indexing evidence
CE: queue depth, workers, failed/pending task evidence
network: allowed source→destination ports
shared secrets: identifier/version only, never secret value
recovery: last tested backup/restore ID and rollback boundary

If you do not have a licensed DCE instance, the local simulator in Lesson 2 produces the same inventory fields and validates topology/network invariants without pretending to instantiate Sonar’s commercial cluster.

Knowledge check

Why are five standalone SonarQube servers not a DCE cluster?

What is the current minimum/default DCE node topology?

Does the load balancer require sticky sessions?

Which layer should you scale first when CE queue latency rises but search and database are healthy?

Does DCE replace database backup and disaster recovery?

Next lesson

Turn the DCE topology into a safe failure simulation

Lesson 2 builds a free local simulator for the current 2+3 topology and maps real scanner/task evidence onto the distributed application role.

Official references and version notes

Version and compatibility note

Baseline: Community Build 26.9.0.129388; SonarScanner CLI 8.1.0.6389. Evidence continuity preserves ceTaskId as the Compute Engine task identity. Rechecked 2026-09-08. Mandatory executable examples remain Community Build 26.9.0.129388 with SonarScanner CLI 8.1.0.6389. DCE examples model the current SonarQube Server 2026 Release 4.1 / 2026.4.1 commercial architecture and require a valid Data Center Edition license for real execution. Current minimum/default DCE topology is two application plus three search nodes; one application and one search node may be lost without user impact when remaining dependencies are healthy. Application nodes can currently scale up to ten. Default private network paths are LB→app 9000, app→search 9001, search→search 9002 and app→app/Hazelcast 9003. Current supported PostgreSQL versions are 14–18. Recheck the exact target release, DCE license, Java/database matrix, Helm/chart version, plugin matrix, Kubernetes/OpenShift matrix, network properties, and update notes immediately before any real deployment.

Keep the academy open

Support free, practical DevOps education.

Every lesson is designed to remain readable in a browser, downloadable from GitHub, and usable without a paid learning platform. Contributions help expand and maintain the curriculum.

Ethereum / ERC-20
0x716c4Ab160C4B66F31a28AE2448BfF68fc3a2ef0Send only Ethereum/ERC-20 compatible assets to this address.