Cluster Upgrade

This section describes how to upgrade a multi-node cluster while maintaining availability. For single-node installations, use the standard procedure described in Version-Specific Upgrades.

In a multi-node deployment, each node is upgraded individually using the same ./install.sh -u script. The Elasticsearch API commands in this procedure (shard allocation control, flush) are standard Elasticsearch cluster operations used to prevent unnecessary shard rebalancing while nodes are being restarted.

Prerequisites

  • Cluster health is green

  • A current backup exists (see Backup and Recovery)

  • All nodes are running the same Energy Logserver version

Verify cluster health before proceeding:

curl -u $USER:$PASSWORD "http://localhost:9200/_cluster/health?pretty"

Procedure

1. Disable shard reallocation

Run this once, from any node, before starting the upgrade process:

curl -u $USER:$PASSWORD "localhost:9200/_cluster/settings" \
  -H "Content-Type: application/json" -d '{
  "persistent": {
    "cluster.routing.allocation.enable": "primaries"
  }
}'

curl -u $USER:$PASSWORD "localhost:9200/_flush?pretty"

2. Upgrade each node

Repeat the following steps for each node in the cluster.

a) Stop all services on the node:

systemctl stop logserver logserver-gui logstash alert cerebro \
  e-doc skimmer intelligence intelligence-scheduler license-service

b) Run the upgrade:

cd install
./install.sh -u

When the script asks whether to restart services, answer no — services will be started manually in the correct order.

c) Start the database service first and wait for the node to rejoin the cluster:

systemctl start logserver

Wait until the node appears in the cluster:

curl -u $USER:$PASSWORD "localhost:9200/_cat/nodes?v"

d) Wait for cluster health to reach at least yellow before moving to the next node:

curl -u $USER:$PASSWORD "http://localhost:9200/_cluster/health?pretty"

3. Re-enable shard allocation

After all nodes have been upgraded:

curl -u $USER:$PASSWORD -X PUT \
  "http://localhost:9200/_cluster/settings?pretty" \
  -H 'Content-Type: application/json' -d '{
  "persistent": {
    "cluster.routing.allocation.enable": "all"
  }
}'

4. Start remaining services

On each node that runs client services, start services in the following order — the database service (logserver) must be running and healthy before starting the remaining services:

systemctl start logserver-gui alert cerebro e-doc skimmer \
  intelligence intelligence-scheduler license-service logstash

5. Verify

curl -u $USER:$PASSWORD "http://localhost:9200/_cluster/health?pretty"
curl -u $USER:$PASSWORD "localhost:9200/_cat/nodes?v"

After the upgrade, follow any version-specific post-upgrade steps described in Version-Specific Upgrades.