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.
Questa risposta va un modo equo: http://stackoverflow.com/questions/15694724/shards-and-replicas-in-elasticsearch – Sammaye