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.
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
ceTaskIdevidence 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.
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 |
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?
DCE nodes explicitly join one cluster, share one database and coordinated search tier, and obey role/version/configuration invariants. Independent servers do not.
What is the current minimum/default DCE node topology?
Two application nodes and three search nodes, plus a supported external database and a customer-supplied reverse proxy/load balancer.
Does the load balancer require sticky sessions?
No. Current DCE guidance says sticky sessions are not required because the built-in JWT mechanism handles session behavior.
Which layer should you scale first when CE queue latency rises but search and database are healthy?
Investigate application-node Compute Engine capacity first. Add resources/nodes only after proving that is the bottleneck.
Does DCE replace database backup and disaster recovery?
No. DCE handles node-level resilience; database/region/corruption recovery still requires tested backup and restore plans.
Official references and version notes
- DCE topology — current role model and minimum/default 2 application + 3 search topology.
- DCE installation requirements — node identity, search-node placement, hardware guidance, Docker/network/load-balancer requirements.
- DCE-specific system properties — current cluster roles, host lists and default application-cluster port.
- DCE network rules — default 9000/9001/9002/9003 trust paths.
- DCE scaling — application-node scaling, currently up to ten application nodes.
- Installing the database — current supported database engines/versions including PostgreSQL 14–18.
- Official SonarQube DCE Helm chart — current DCE chart/image structure and application/search node configuration.
- Performing an update — coordinated DCE Helm/database migration behavior and post-update reanalysis.
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.
0x716c4Ab160C4B66F31a28AE2448BfF68fc3a2ef0Send only Ethereum/ERC-20 compatible assets to this
address.