Eseguire un’immagine temporanea con Elasticdump
Il comando seguente consente di creare un pod temporaneo nel namespace elasticsearch-prod dove risiede l’istanza elasticsearch, e nello stesso tempo permette di accedere alla sua shell Bash:
kubectl run elasticdump-client --rm -it --image=node:18 -n elasticsearch-prod -- bash
Installare Elasticdump
Una volta nella shell del pod, installiamo elasticdump tramite npm:
npm install -g elasticdump
Eseguire la sincronizzazione degli indici
Ora siamo pronti per eseguire il sync dei dati tra gli indici. Eseguiamo il seguente comando per ogni indice da copiare:
Indice: prod-index
NODE_TLS_REJECT_UNAUTHORIZED=0 elasticdump \
--input=http://elasticsearch-old-prod.elasticsearch-old-prod.svc.cluster.local:9200/prod-index \
--output=https://elastic:password@elasticsearch-new-prod.elasticsearch-new-prod.svc.cluster.local:9200/prod-index \
--type=data
Analisi del comando
NODE_TLS_REJECT_UNAUTHORIZED=0: disabilita il controllo del certificato SSL. Necessario perché l’istanza di destinazione ha X-Pack Security abilitato e accetta solo connessioni HTTPS.--input=...: URL della sorgente Elasticsearch che contiene l’indice da copiare.--output=...: URL della destinazione Elasticsearch. Verrà creato (o aggiornato) un indice con lo stesso nome e contenuti.
Considerazioni finali
La sincronizzazione degli indici tra due istanze di Elasticsearch è una pratica molto utile in diversi scenari. Ad esempio, può servire durante attività di migrazione tra ambienti (da staging a produzione), in caso di ripristino parziale dei dati o per effettuare test su dati reali in ambienti isolati.
Utilizzare strumenti come elasticdump consente di eseguire questo allineamento in modo semplice e granulare, mantenendo il controllo sui singoli indici. È una soluzione comoda anche perché non richiede downtime, permettendo la copia dei dati in tempo reale, direttamente dal cluster di origine a quello di destinazione.
