2012-02-29 13 views
35

In sostanza non riesco a trovare documenti o risorse che spieghino la procedura di aggiornamento di un'istanza di Elasticsearch in esecuzione nella versione corrente.Come aggiornare un'istanza precedente di Elasticsearch in esecuzione a una versione più recente?

Please help me in alcuni scenari:

  1. Se io sono in esecuzione un'istanza elasticsearch in un unico server, come faccio aggiorno l'istanza e non perdere i dati?

  2. Se sono in esecuzione più istanze di Elasticsearch in un certo numero di server, come faccio a mantenere operative le mie operazioni, mentre aggiorno le mie istanze di Elasticsearch senza perdere i dati?

Se ci sono procedure o spiegazioni adeguate su questo, sarà di grande aiuto per la mia comprensione e il mio lavoro. Grazie!

risposta

22
  1. Tutti i dati del nodo sono memorizzati nella directory dei dati elasticsearch. Si tratta di dati/cluster_name/nodi per impostazione predefinita in elasticsearch home. Quindi, in generale, finché la directory dei dati viene conservata e i file di configurazione nella nuova versione sono compatibili con la versione precedente, la nuova istanza dovrebbe avere gli stessi dati di quella precedente. Si noti che alcune versioni hanno requisiti speciali aggiuntivi delineati in release notes. Ad esempio, l'aggiornamento a 0,19 da 0,18 richiede l'emissione di un flusso completo di tutti gli indici nel cluster.

  2. Non c'è davvero un buon modo per farlo. I nodi stanno comunicando usando il protocollo binario che non è retrocompatibile. Quindi, se il protocollo nella nuova versione cambia, i vecchi nodi e i nuovi nodi non sono in grado di capirsi a vicenda. A volte è possibile combinare nodi con diverse versioni secondarie all'interno dello stesso cluster e fare un aggiornamento continuo. Tuttavia, per quanto ho capito, non esiste alcuna garanzia esplicita sulla compatibilità tra i nodi, anche nelle versioni minori e le versioni principali richiedono sempre il riavvio completo del cluster. Se i tempi di inattività durante il riavvio completo del cluster non sono un'opzione, è possibile che una soluzione nice technique per DrTech.

+0

Vedo, quindi, in una singola istanza di Elasticsearch all'interno della directory, sostituiamo semplicemente elasticsearch/bin e le cartelle elasticsearch/lib, conserviamo la cartella elasticsearch/data e la nuova versione dell'istanza elasticsearch dovrebbe funzionare automaticamente su proprio? –

+4

Attualmente, esiste anche una directory dei plugin che potrebbe essere importante se si stanno utilizzando plugin. Le versioni future di elasticsearch potrebbero aggiungere nuove directory. Quindi, potrebbe essere meglio pensarci come mettere vecchie directory elasticsearch/data e elasticsearch/config nella nuova installazione. La nuova istanza elasticsearch con i dati sostituiti e le directory di configurazione dovrebbe aggiornare automaticamente i dati alla nuova versione e iniziare a funzionare. Si noti che la vecchia versione di elasticsearch non funzionerà più con la directory dei dati aggiornata. – imotov

+0

Grazie! Immagino che stavo complicando le cose un po '... –

-1

Se si esegue in base Ubuntu o Debian Linux, ecco uno script t Ansible o eseguire un aggiornamento continuo, purché non si stia effettuando l'aggiornamento tra le versioni principali.

versioni minori come 1.3 -> 1.4.3 sono ok

principali versioni, come 0.8 -> 1.4.3 non funzionerà.

https://github.com/ekhoinc/ansible-examples/blob/master/elasticsearch-rolling-upgrade.yml

potrebbe essere facilmente modificato per funzionare con Linux basato RHEL (solo 2 linee per cambiare)

10

C'è molto di più informazioni su elasticsearch aggiornamento in questi giorni di quanto non lo sia.

Qui sono i miei soliti passaggi durante l'aggiornamento elasticsearch:

  1. Backup dei dati: Snapshot and Restore

  2. Guida all'aggiornamento: Upgrading ElasticSearch

L'idea principale è che si arresta uno istanza del cluster ES alla volta, aggiornare la versione ES su quel nodo di istanza e richiamarla di nuovo in modo che possa ricongiungere il clu ster.

In breve, ecco i passi importanti:

  1. Disabilita Shard riallocazione

    ricciolo -XPUT localhost: 9200/_cluster/impostazioni -d '{ "transitorio": { "cluster.routing.allocation.enable": "nessuno" }} '

  2. Shutdown l'istanza:

    curl -XPOST 'http://localhost:9200/_cluster/nodes/_local/_shutdown'

  3. Installare la nuova versione elasticsearch sull'host e avviarlo.

  4. Abilita frammento riallocazione:

    ricciolo -XPUT localhost: 9200/_cluster/impostazioni -d '{ "transitorio": { "cluster.routing.allocation.enable": "tutto " }} '

  5. Guarda grappolo vanno da yellow stato a green con:

arricciatura -X GET http://localhost:9200/_cat/health?v // controlla lo stato del cluster overal

arricciatura -X GET http://localhost:9200/_cat/nodes?v // verificare che il nuovo nodo è entrato cluster

arricciatura -X GET http://localhost:9200/_cat/shards?v // vedere schegge avviato, inizializzato e ricollocato

  1. Ripetere per il nodo successivo.

Nei termini di ordine, aggiornare primi i nodi master, poi i nodi dati, quindi i nodi load-balancing/cliente.

Problemi correlati