2013-12-16 21 views
7

Mi spiace dirlo ma la documentazione di ES (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/index.html) mi confonde.Informazioni sulla ricerca elastica

Grazie al glossario capisco i termini per il database, tavola e fila ma ho letto le sezioni sostanziali della documentazione e non riesco a trovare le risposte a:

Per riferimento ho letto questi collegamenti prima:

Se queste informazioni esiste nella documentazione allora sarei molto grato se mi si può puntare verso esso.

Edit:

Sono anche sicuro di come il rilevamento automatico funziona su una rete distribuita. Breve se si fa il ping su ogni rete pubblica intorno a come si connette a quella giusta che potrebbe essere dall'altra parte del mondo?

+3

Questa risposta va un modo equo: http://stackoverflow.com/questions/15694724/shards-and-replicas-in-elasticsearch – Sammaye

risposta

13

Vedi sotto per le risposte ai tuoi punti.

Tu non "avere", ma probabilmente dovrebbe in particolare vorrò nella produzione. Il valore predefinito è cinque frammenti e una replica.

Il numero di repliche definito corrisponde al numero di volte in cui l'intero indice viene replicato in tutti i nodi del cluster elasticsearch. Consideralo come più copie di lettura di un database RDBMS (ma in questo caso, leggiamo e scriviamo tutte le copie).

Un frammento è il numero di volte in cui ho diviso, o un frammento, un indice. Quindi, posso avere un indice con un singolo frammento, o posso avere un indice con più frammenti. Questo concetto è simile alla condivisione di un database RDBMS per chiave primaria, ma non identico.

Quindi, il numero totale di frammenti che si avranno in un indice è il prodotto di number_of_shards e number_of_replicas.

Quando si esegue una ricerca, elasticsearch distribuirà la ricerca a tutti i nodi possibili contenenti i frammenti nel proprio indice e aggregerà il risultato per voi. Puoi pensare a questo come una mappa/ridurre dove la mappa sta inviando la ricerca ad ogni frammento e la riduzione sta raccogliendo i risultati.

Inoltre, è possibile modificare il numero di replica_di_repliche in qualsiasi momento, ma non è mai possibile modificare il numero_di_solidi. Questo deve essere impostato alla creazione dell'indice.

  • Come posso avere 3 frammenti con 2 repliche? Se il glossario è qualcosa da fare non dovrebbe essere impossibile considerando che uno shard è "una singola istanza di Lucene"?

penso che quanto sopra risponde in gran parte questo, ma è importante ricordare che elasticsearch è in primo luogo una soluzione di calcolo distribuito per la ricerca. Stiamo suddividendo il lavoro in più frammenti e possibilmente in macchine.

  • se posso aggiungere più nodi più avanti come posso cambiare questi valori per estendersi i nuovi nodi?

Una volta che il gruppo è a conoscenza di un altro nodo nel cluster, nessun'altra azione è necessario per voi. Le impostazioni si propagano in tutto il cluster da sole. Nel tuo esempio sopra di tre frammenti e due repliche, se inizialmente avevi due nodi e ne aggiungevi un terzo, ogni nodo avrebbe in media due frammenti per nodo, questo movimento di frammento avviene senza il tuo intervento (di nuovo, se il cluster è a conoscenza del nuovo nodo)

  • Come funziona sharding in ES?

Vedi sopra

  • Come funziona set di repliche lavorano in ES?

Vedi sopra

Non c'è bisogno di "gestire" attivamente. Come affermato in precedenza, sharding e tutto ciò che si definisce alla creazione dell'indice, viene propagato ai nuovi nodi all'interno del cluster.

Si definiscono repliche e frammenti in questo modo:

{ 
    "settings": { 
     "index": { 
      "number_of_shards": 20, 
      "number_of_replicas": 1 
     } 
    }, 
    "mappings": { 
     "some_type": { 
      "properties": { 
       "some_field": { 
        "type": "long" 
       } 
      } 
     } 
    } 
} 
  • Come posso gestire i set di repliche? Cioè come posso aggiungere repliche, promuovere primari, ecc.?

Tu fai che tramite l'API indici di aggiornamento, la documentazione per questo caso specifico si trova sul sito c'è qui:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-update-settings.html

ho appena notato la modifica, si prega di vedere sotto:

  • Sono anche sicuro di come la ricerca automatica funzioni su una rete distribuita.

nel file di configurazione YML si imposta l'unicast in questo modo:

discovery.zen.ping.multicast.enabled: false 
#discovery.zen.minimum_master_nodes: 3 
discovery.zen.ping.unicast.hosts: ["ip.add.r.ess", "ip.add.r.ess"] 

L'impostazione di mezzo è un ambiente importante, ma ho commentato fuori qui.Quel numero dovrebbe sempre essere il numero di (nodi principali/2) +1. Questo per evitare situazioni di split brain. In genere ho impostato tutti i nodi su master idoneo.

Queste impostazioni sono per unicast, che è quello che penso tu stia andando con la tua domanda e non multicast.

+1

Quindi se capisco che hai ragione, un frammento non è una copia, sono i dati, un intervallo dell'ID, (simile a SQL e MongoDB a questo riguardo), ma un frammento primario non può essere nuovamente suddiviso, il che significa che se voglio distribuire il mio leggere oltre devo ricreare. Ottieni il voto per la risposta per i dettagli di tutte le impostazioni e, grazie :) – Sammaye

6

In breve, un indice è suddiviso in frammenti. I frammenti possono essere replicati, ovvero possono esistere più copie dello stesso frammento nello stesso cluster. Quindi se un indice ha 3 frammenti e 2 repliche, significa che hai nove frammenti in totale di cui sei sono repliche dei tre frammenti principali.

ES, proverà a bilanciare i frammenti e le loro repliche attraverso il cluster in modo tale che se un nodo si interrompe, può eseguire il failover dai frammenti master su quel nodo alle repliche. Questo può confondere alcune persone: un maestro nella ricerca elastica fa riferimento ai frammenti, non al nodo reale. Quindi un singolo nodo può avere una combinazione di frammenti di replica e master.

Se vieni dal mondo di Lucene, un indice di lucene non è la stessa cosa di un indice di ricerca elastico. Un indice di ricerca elastico è un gruppo logico di documenti indicizzati con tipi, mapping e documenti. Più o meno lo stesso di uno schema di database. Un indice lucene d'altra parte è un gruppo di diversi file che contiene dati indicizzati. Quando la ricerca elastica crea indici, ciò che fa è creare diversi indici lucene (uno per ogni campo e frammento) e quando si replica, in pratica sta copiando i file di questi indici lucene.

Non è possibile modificare il numero di frammenti per un indice ma è possibile modificare il numero di repliche. In genere ciò che si fa quando è necessario avere più frammenti è creare un nuovo indice e reindicizzare i dati.

In termini di gestione della shard oltre la decisione sul numero di frammenti, non c'è molto da gestire per impostazione predefinita e ES è abbastanza bravo a coordinare le cose da solo, Ci sono un sacco di opzioni su cui puoi giocare una volta che ottieni un po 'meglio comprensione di come funziona. Le impostazioni predefinite sono abbastanza OK per la maggior parte. In termini di gestione dei cluster, si può fare molto tramite l'API in termini di arresto dei nodi in modo controllato, utilizzando alias dell'indice, numero di repliche, ecc.

Per quanto riguarda l'autodiscovery, ES utilizza la rete locale multicast per predefinito. È possibile passare a unicast e probabilmente si desidera modificare il clustername predefinito per evitare incidenti (si è divertito in coffeeshop con la formazione di cluster indesiderati). Probabilmente non vuoi raggruppare globalmente. Non vedo che finisca bene.

+0

Sì, il secondo paragrafo era un po 'che mi confondeva davvero, pensavo a macchine fisiche come in MongoDB, un po' peggio devo riformare l'indice se ottengo un picco serio e ho bisogno di distribuisci le mie letture ulteriormente. Heh Sì, il problema con i nomi dei cluster e le trasmissioni è stato anche il mio pensiero. +1 – Sammaye

+0

È possibile utilizzare alias per mitigare il numero fisso di problemi shards/index. Ciò consente di interrogare un gruppo di indici come un unico indice durante l'esecuzione di una query. Ad esempio logstash usa questo per creare nuovi indici (e frammenti) ogni giorno/settimana/mese. Ciò fornisce scalabilità orizzontale e ce ne sono alcuni che lo usano su scala di petabyte con centinaia di nodi. Il clustering non è tanto un problema e più un'abbondanza di scelta. L'impostazione predefinita fornisce semplicemente un comportamento conveniente in una rete privata, ma è possibile configurarla in modo diverso se non ti piace. –

1

E 'un episodio piuttosto che circa l'80% delle vostre domande trovano risposta nel video di presentazione data dal Shay Banon (Il creater di elasticsearch). Anche se questa presentazione ha molto più di quello che puoi trovare da nessun'altra parte. Spero che questo ti aiuti.

http://www.infoq.com/presentations/ElasticSearch 

Questo video è un po 'a bassa risoluzione, quindi se volete codice mostrato nella presentazione seguono questo

https://github.com/kimchy/talks/tree/master/2011/wsnparis 
Problemi correlati