title: Configure & Operate a Cluster
High Availability is a feature of the Data Center Edition.
Once the the SonarQube cluster is installed, you have a High Availability configuration that will allow your SonarQube instance to stay up and running even if there is a crash or failure in one of the nodes of the cluster.
node_ip:port/setup
on each server, and trigger the setup operation on the one that responds.CPU and RAM usage on each node have to be monitored separately with an APM.
In addition, we provide a Web API api/system/health you can use to validate that all of the nodes in your cluster are operational.
To call it from a monitoring system without having to give admin credentials, it is possible to setup a System Passcode through the property `sonar.web.systemPasscodez. This must be configured in $SONARQUBE-HOME/conf/sonar.properties.
In the System Info page, you can check whether your cluster is running safely (green) or has some nodes with problems (orange or red).
If you change the number of Compute Engine workers in the UI, you must restart each application node to have the change take effect.
When the Project Move feature is used in a DC installation:
Start with the default configuration; it’s good in most cases. The details below are only needed in specific cases.
Hazelcast is used to manage the communication between the nodes of the cluster. You don’t need to install it yourself, it’s provided out of the box.
The following properties may be defined in the $SONARQUBE-HOME/conf/sonar.properties file of each node in a cluster. When defining a property that contains a list of hosts (*.hosts
) the port is not required if the default port was not overridden in the configuration.
Property | Description | Default | Required |
---|---|---|---|
sonar.cluster.enabled
|Set to true
in each node to activate the cluster mode|false
|yes
sonar.cluster.name
|The name of the cluster. Required if multiple clusters are present on the same network. For example this prevents mixing Production and Preproduction clusters. This will be the name stored in the Hazelcast cluster and used as the name of the Elasticsearch cluster.|sonarqube
|no
sonar.cluster.hosts
|Comma-delimited list of all application hosts in the cluster. This value must contain only application hosts. Each item in the list must contain the port if the default sonar.cluster.node.port
value is not used. Item format is sonar.cluster.node.host
or sonar.cluster.node.host:sonar.cluster.node.port
.| |yes
sonar.cluster.search.hosts
|Comma-delimited list of search hosts in the cluster. Each item in the list must contain the port if the default sonar.search.port
value is not used. Item format is sonar.search.host
or sonar.search.host:sonar.search.port
.| |yes
sonar.cluster.node.name
|The name of the node that is used on Elasticsearch and stored in Hazelcast member attribute (NODE_NAME) for sonar-application|sonarqube-{UUID}
|no
sonar.cluster.node.type
|Type of node: either application
or search
| |yes
sonar.cluster.node.host
|IP address of the network card that will be used by Hazelcast to communicate with the members of the cluster. If not specified, the first interface will be chosen (note that loopback interfaces won’t be selected)| |no
Property | Description | Required
---|---|---|---
sonar.cluster.node.port
|The Hazelcast port for communication with each application member of the cluster. Default: 9003
|no|
sonar.cluster.node.web.port
|Hazelcast port for communication with the ComputeEngine process. Port must be accessible to all other search and application nodes. If not specified, a dynamic port will be chosen and all ports must be open among the nodes.|no
sonar.cluster.node.ce.port
|Hazelcast port for communication with the WebServer process. Port must be accessible to all other search and application nodes. If not specified, a dynamic port will be chosen and all ports must be open among the nodes.|no
sonar.auth.jwtBase64Hs256Secret
|Required for authentication with multiple web servers. It is used to keep user sessions opened when they are redirected from one web server to another by the load balancer. See $SONARQUBE-HOME/conf/sonar.properties) for details about how to generate this secret key.| yes
Property | Description | Default | Required |
---|---|---|---|
sonar.search.host |
Listening IP. IP must be accessible to all other search and application nodes. | 127.0.0.1 |
yes |
sonar.search.port |
Listening port. Port must be accessible to all other search and application nodes. | 9001 |
yes |
sonar.search.initialStateTimeout |
The timeout for the Elasticsearch nodes to elect a master node. The default value will be fine in most cases, but in a situation where startup is failing because of a timeout, this may need to be adjusted. The value must be set in the format: {integer}{timeunit} . Valid {timeunit} values are: ms (milliseconds); s (seconds); m (minutes); h (hours); d (days); w (weeks) |
cluster: 120s; standalone: 30s | no |
No. Multicast is disabled. All hosts (IP+port) must be listed.
Yes, but the best is to have 5 machines to be really resilient to failures.
No, all nodes must be configured in $SONARQUBE-HOME/conf/sonar.properties