Overview
LILT runs Elasticsearch under the Elastic Cloud on Kubernetes (ECK) operator. Elasticsearch holds the indices behind translation-memory search, user resources and job search. The installer does not configure a snapshot repository. Until you register one, Elasticsearch has nowhere to write a backup to, so a new installation has no backup even though the upgrade procedures tell you to take one. This article covers registering a repository, taking and restoring snapshots, and rebuilding the search index from the LILT database. For the upgrade itself, see Upgrade Elasticsearch Across Major Versions.Every command on this page assumes the LILT namespace is
lilt. If you
installed into a different namespace, substitute it for NAMESPACE.Snapshot or rebuild?
Everything LILT stores in Elasticsearch is derived from the LILT database, so a lost Elasticsearch cluster is a rebuild rather than permanent data loss. One detail decides which path you take:
Set up snapshots even though the data is derived. A rebuild covers only the
segments index, so it is a partial recovery, and it is much slower. Use a
rebuild for a damaged or incomplete segments index, and a snapshot for the
loss of a cluster.
Connect to the cluster
Everycurl command on this page reaches Elasticsearch through a port forward.
Target a pod rather than a service: LILT applications reach Elasticsearch
through a service of type ExternalName, which kubectl port-forward cannot
use.
Register a snapshot repository
Elasticsearch writes backups to a snapshot repository, which you register once. Elasticsearch includes S3 support, so both procedures that follow use thes3
repository type. A shared-filesystem repository is not an option: the
Elasticsearch volumes are ReadWriteOnce and a filesystem repository must be
mounted on every node in the cluster.
On AWS with an S3 bucket
Your installation already has an AWS identity for S3:install-s3-irsa.sh
creates the lilt-s3-workload service account and binds it to the
app-workload IAM role. Run Elasticsearch as that service account rather than
creating a second role.
In eck-cluster/eks-values.yaml:
eck-cluster/eks-values.yaml:
install.env — only
install-lilt.sh and install-lilt-eks.sh load that file — so load it
yourself and set VALS_FILE on AWS:
VALS_FILE.
The operator loads the credentials without restarting the cluster.
Register the repository:
On-premise with MinIO
An on-premise installation has no S3, but it does include MinIO. Point the same repository type at it, and set an endpoint. Create the credentials secret as described in the preceding section, using your MinIO access key pair, then register the repository:mc mb.
Verify the repository
A repository you have never verified is not a backup. Check that every node can write to it:403 or a
repository_verification_exception means the credentials or the bucket
permissions are wrong, and a snapshot fails at the moment you need it.
Take a snapshot
Take a snapshot before every upgrade. Each version step changes the data on disk and cannot be reversed.state. SUCCESS means the snapshot is complete.
PARTIAL means some shards were unavailable and the snapshot is not a usable
backup: fix the cluster health and take it again.
Keep es-backup-baseline.txt. The document counts it records are how you tell a
complete restore from a partial one.
To take snapshots on a schedule, create a snapshot lifecycle management policy:
Restore from a snapshot
A restore replaces the contents of the indices it targets. Run it in a maintenance window with LILT quiesced, otherwise the indexer writes into the indices while the restore is in progress.-
Close the indices you are restoring. A restore cannot write to an open index.
Skip this step when you restore into an empty cluster, where the indices do
not yet exist:
-
Restore the snapshot:
-
Reopen the indices:
-
Confirm that the cluster is healthy and the document counts match your
baseline:
Rebuild the search index from the database
Use this when thesegments index is damaged or incomplete and you have no
usable snapshot. Read the scope limits at the end of this section before you
plan a recovery around this procedure.
Run the tool from the indexer pod, which has both database and Elasticsearch
access:
sh -c inside single quotes so that $DB_HOST
expands in the pod, not in your own shell. Without the single quotes your shell
substitutes it first, and it is empty there.
Substitute the organization to rebuild for ORG_ID and your database name for
DB_NAME.
The pod’s own environment supplies the rest. The database user and password
come from DB_USER and DB_PASSWORD, and Elasticsearch is reached through
ELASTIC_HOST with the default port and scheme, so none of those need a flag.
To rebuild named translation memories instead of a whole organization, use
reindexMemory with a comma-separated list of memory IDs:
Scope limits
- One organization per run.
reindexOrganizationtakes a single--orgId. To rebuild every organization, run the command once per organization and track which ones finished. - No progress reporting or retries. The tool logs its own progress, and nothing resumes it if it stops.
- Only the
segmentsindex can be rebuilt. Theuser_resourcesandjobsindices are populated as LILT runs, and no tool rebuilds them. This is why a snapshot repository is worth setting up even though the data is derived.
segments with the
preceding procedure and contact LILT support about the remaining indices.

