Upgrade ElasticSearch from ES 8.16.6 to ES 8.18.4

The migration command performs the following steps

  • Pre-migration cluster health check - Validates the Elasticsearch cluster health


If the status is red, migration will not proceed

- Retries: 20 times at 1-minute intervals

  • Migration execution - Starts only when the cluster is yellow or green - Performs an Elasticsearch upgrade

  • Post-migration sleep - Waits 2 minutes for stabilization

  • Post-migration cluster health check


Same retry logic (20 retries, 1-minute interval)

- If still failing, perform a manual health check


Accelo Elastic Migration Command Flags

For details about the command usage:

accelo admin [component] migrate [flags]

Where:

  • component = ad-elastic | ad-fs-elastic

Key flags:

  • --host (-d) → Elasticsearch hostname (default: localhost)

  • --port (-p) → HTTP API port (default: 19013)

  • --username (-u) → Username (default: pulse)

  • --password (-e) → Encrypted password

  • --online (-o) → Pull images from ECR

  • --retries (-r) → Max health check retries (default: 20)

  • --retry-interval (-i) → Retry interval (default: 1m)

  • --sleep (-s) → Post-start wait time (default: 2m)


ad-elastic Migration Procedure

For details about upgrading ad-elastic:

Online Installation (ECR pull)

accelo admin ad-elastic migrate --online

For details about execution:

  • Verifies service status

  • Performs pre-check (must be yellow/green)

  • Pulls migrate-8.18.4 image

  • Replaces the old container

  • Starts new ES 8.18.4 container

  • Performs post-check

[root@odppulse431:config (ad-default)]$ accelo admin ad-elastic migrate --online INFO: Running ad-elastic migrate command Is the 'ad-elastic' service up and running? [y/n]: : y INFO: sleep duration: 2m0s, max retries: 20, retry interval: 1m0s Now, trying to logon to the AccelData registry... Docker login succeeded ✓ INFO: Current ad-elastic version from container label: 3.8.5 INFO: Performing cluster health check before migration to ES 8.18.4... INFO: Cluster health status: yellow INFO: Cluster health check passed INFO: Pulling migrate-8.18.4 image INFO: migrate-8.18.4 pull successful INFO: Tagging migrate-8.18.4 image to pulse version INFO: Removing old ad-elastic container (3.8.X / ES 8.16.6) INFO: Creating new ad-elastic container with ES 8.18.4 INFO: Waiting for Elasticsearch to start... INFO: Performing cluster health check after migration to ES 8.18.4... INFO: Cluster health status: yellow INFO: completed:(ES 8.16.6) -> (ES 8.18.4)

Offline Installation (Air-gapped)

  1. Load the image:

docker load -i ad-elastic8.tgz Loaded image: 191579300362.dkr.ecr.us-east-1.amazonaws.com/acceldata/ad-elastic:migrate-8.18.4
  1. Verify that the image is loaded correctly:

docker images | grep elastic 191579300362.dkr.ecr.us-east-1.amazonaws.com/acceldata/ad-elastic migrate-8.18.4 2dc0b52990de 3 months ago 1.33GB
  1. Run the ad-elastic migration command:

accelo admin ad-elastic migrate INFO: Running ad-elastic migrate command Is the 'ad-elastic' service up and running? [y/n]: : y INFO: sleep duration: 2m0s, max retries: 20, retry interval: 1m0s INFO: Proceeding with ad-elastic images already loaded in local INFO: Current ad-elastic version from container label: 3.8.5 INFO: Performing cluster health check before migration to ES 8.18.4... INFO: Cluster health status: green INFO: Cluster health check passed INFO: migrate-8.18.4 image already present locally INFO: Tagging migrate-8.18.4 image to pulse version INFO: Removing old ad-elastic container (3.8.X / ES 8.16.6) INFO: Creating new ad-elastic container with ES 8.18.4 INFO: Waiting for Elasticsearch to start... INFO: Performing cluster health check after migration to ES 8.18.4... INFO: Cluster health status: green INFO: completed:(ES 8.16.6) -> (ES 8.18.4)
  1. Verify container:

docker ps -a | grep ad-elastic_default bbfe825691ef 753de6514420 "/bin/tini -- /usr/l…" 10 minutes ago Up 10 minutes 0.0.0.0:19013->9200/tcp, 0.0.0.0:19014->9300/tcp ad-elastic_default

ad-fs-elastic Migration Procedure

For Online Installation (pulls images from ECR)

accelo admin ad-fs-elastic migrate --online INFO: Running ad-fs-elastic migrate command Is the 'ad-fs-elastic' service up and running? [y/n]: : y INFO: sleep duration: 2m0s, max retries: 20, retry interval: 1m0s Now, trying to logon to the AccelData registry... Docker login succeeded ✓ INFO: Current ad-fs-elastic version from container label: 3.8.5 INFO: Performing cluster health check before migration to ES 8.18.4... INFO: Cluster health status: green INFO: Cluster health check passed INFO: Pulling migrate-8.18.4 image INFO: migrate-8.18.4 pull successful INFO: Tagging migrate-8.18.4 image to pulse version INFO: Removing old ad-fs-elastic container (3.8.X / ES 8.16.6) INFO: Creating new ad-fs-elastic container with ES 8.18.4 INFO: Waiting for Elasticsearch to start... INFO: Performing cluster health check after migration to ES 8.18.4... INFO: Cluster health status: green INFO: completed:(ES 8.16.6) -> (ES 8.18.4)

For Offline Installation (air-gapped)

Info

If the image 191579300362.dkr.ecr.us-east-1.amazonaws.com/acceldata/ad-elastic:migrate-8.18.4 is already present locally, there is no need to load it again using docker load -i.

  1. Download the required migration images in an air-gapped environment.

[root@odppulse431:data (ad-default)]$ docker load -i ad-elastic8.tgz Loaded image: 191579300362.dkr.ecr.us-east-1.amazonaws.com/acceldata/ad-elastic:migrate-8.18.4
  1. Verify that the image is loaded correctly

[root@odppulse431:data (ad-default)]$ docker images | grep elastic 191579300362.dkr.ecr.us-east-1.amazonaws.com/acceldata/ad-elastic
  1. Run the ad-elastic migration command.

[root@odppulse431:data (ad-default)]$ accelo admin ad-fs-elastic migrate INFO: Running ad-fs-elastic migrate command Is the 'ad-fs-elastic' service up and running? [y/n]: : y INFO: sleep duration: 2m0s, max retries: 20, retry interval: 1m0s INFO: Proceeding with ad-fs-elastic images already loaded in local INFO: Current ad-fs-elastic version from container label: 3.8.5 INFO: Performing cluster health check before migration to ES 8.18.4... INFO: Cluster health status: green INFO: Cluster health check passed INFO: migrate-8.18.4 image already present locally INFO: Tagging migrate-8.18.4 image to pulse version INFO: Removing old ad-fs-elastic container (3.8.X / ES 8.16.6) INFO: Creating new ad-fs-elastic container with ES 8.18.4 INFO: Waiting for Elasticsearch to start... INFO: Performing cluster health check after migration to ES 8.18.4... INFO: Cluster health status: green INFO: completed:(ES 8.16.6) -> (ES 8.18.4)
  1. Verify the container.

[root@odppulse431:data (ad-default)]$ docker ps -a | grep ad-fs-elastic_default ggfe8we691ef 233de6ww4420 "/bin/tini -- /usr/l…" 10 minutes ago Up 10 minutes 0.0.0.0:19038->9200/tcp, 0.0.0.0:19039->9300/tcp ad-fs-elastic_default

Manual Health Check

If the migration fails due to cluster health check timeout (cluster remains red), verify the cluster health manually:

For ad-elastic (default port 19013):

accelo admin hc elastic cluster-health
[root@migration4001:acceldata (ad-default)]$ accelo admin hc elastic cluster-health INFO: elastic cluster health { "active_primary_shards": 353, "active_shards": 353, "active_shards_percent_as_number": 98.32869080779945, "cluster_name": "elasticsearch", "delayed_unassigned_shards": 0, "initializing_shards": 0, "number_of_data_nodes": 1, "number_of_in_flight_fetch": 0, "number_of_nodes": 1, "number_of_pending_tasks": 0, "relocating_shards": 0, "status": "yellow", "task_max_waiting_in_queue_millis": 0, "timed_out": false, "unassigned_primary_shards": 0, "unassigned_shards": 6 }

For ad-fs-elastic (default port 19038):

accelo admin hc elastic cluster-health -h <hostname> -p 19038
[root@odpkronospulse:acceldata (ad-default)]$ accelo admin hc elastic cluster-health -d localhost -p 19038 INFO: elastic cluster health { "active_primary_shards": 0, "active_shards": 0, "active_shards_percent_as_number": 100, "cluster_name": "elasticsearch", "delayed_unassigned_shards": 0, "initializing_shards": 0, "number_of_data_nodes": 1, "number_of_in_flight_fetch": 0, "number_of_nodes": 1, "number_of_pending_tasks": 0, "relocating_shards": 0, "status": "green", "task_max_waiting_in_queue_millis": 0, "timed_out": false, "unassigned_primary_shards": 0, "unassigned_shards": 0 }