2014-07-04 20 views
5

Abbiamo un grosso problema con il nostro cluster ES. Uno dei nostri nodi è sempre al 99% della CPU. Per qualche ragione ha circa 3 volte più thread in esecuzione per il processo elasticsearch rispetto al nodo normale. Ho allegato 2 screenshot htop per 2 nodi, uno sovraccarico e un altro normale. Si prega di avvisare!Elasticsearch troppe thread in esecuzione

Grazie!

Nodo overload overloaded node

Nodo normale normal node

UPDATE

  1. architettura Cluster:

    11 nodi, 2 master dedicati, 9 nodi di dati.

  2. Proprietà nodi hardware

    Masters:

    • CPU: 8x Intel (R) Xeon (R) CPU E5-1620 v2 @ 3.70GHz
    • di memoria: 32GB
    • disco: 120GB

    Slaves:

    1. CPU: 12x Intel (R) Xeon (R) E5-1650 v2 CPU @ 3.50GHz
    2. di memoria: 64GB
    3. disco: 2.7T
  3. I documenti in gruppo:

    ~ 200 Milioni

  4. Indice conf:

    Ogni indice è suddiviso in 10 frammenti (5 primari, 5 replica)

  5. Query:

    Ricerca RT: ~ 250/s, Indice RT: ~ 6K/s

  6. OS

    Ubuntu 12.04.4 LTS

  7. JAVA

java version "1.7.0_60" 
Java(TM) SE Runtime Environment (build 1.7.0_60-b19) 
Java HotSpot(TM) 64-Bit Server VM (build 24.60-b09, mixed mode) 
+2

Ho paura che le schermate da soli non siano molto utili. Aggiungerei quanto segue: numero di nodi nel cluster, memoria, cpu e disco per ciascun nodo, numero di documenti nel cluster, configurazioni globali di cluster e indice, mapping, volume di query, volume di inserimenti, output dalla diagnostica ES come nodo statistiche, sistema operativo, versione jvm. –

+0

@JohnPetrone Ho pubblicato un aggiornamento con le informazioni richieste. Grazie! –

risposta

1

Sulla base di informazioni sparse a portata di mano, ho un paio di tentativi che potrebbe potenzialmente essere il problema m:

  • I frammenti non sono ben bilanciati e si stanno verificando punti caldi. Assicurati che gli indici utilizzati più frequentemente siano resi più nitidi in modo che ogni macchina possa fare la sua parte di lavoro. Inoltre, controlla il livello dell'indice "index.routing.allocation.total_shards_per_node" per provare a forzare un equilibrio equo.

  • Forse sul lato ricerca, si specifica che la ricerca deve sempre andare al frammento "primario". La designazione primaria non è qualcosa che si equilibra, quindi in pratica il primo nodo ha il frammento primario e gli altri che vengono dopo sono tutti secondari.

+0

Grazie per la risposta. Abbiamo avuto una situazione hot spot riguardo al fatto che avevamo 9 nodi di dati con '10 shard' per ogni indice, quindi c'era sempre un nodo che avrebbe preso 2 frammenti. A scopo di test, abbiamo modificato anche il nostro master secondario come nodo dati e la migrazione ha riallocato i frammenti, purtroppo senza modifiche. Riguardo alle richieste di ricerca, abbiamo la configurazione di default, quindi è l'interrogazione delle repliche. –

+0

Provare a impostare "index.routing.allocation.total_shards_per_node" su 1 per ogni indice che dovrebbe forzare un bilanciamento uguale assumendo 10 datanode e 10 frammenti (incluse le repliche) per indice. Nota: QUESTO DEVE ESSERE EFFETTUATO ESCLUSIVAMENTE PER LE PROVE. A lungo termine, è probabile che tu stia meglio con più shard per indice che daranno al tuo totale_shards_per_node una certa flessibilità. – ppearcy

2

Capito.

[2014-07-07 13:38:42,521][DEBUG][index.search.slowlog.query] [n013.my_cluster] [my_index][3] took[2s], took_millis[2066], types[my_type], stats[], search_type[QUERY_THEN_FETCH], total_shards[5], source[{"size":20,"from":0,"sort":{"_score":"desc"},"query":{"filtered":{"query":{"query_string":{"query":"my eight words space separated query","fields":["description","tags"],"default_operator":"OR"}},"filter":{"and":[{"range":{"ats":{"lte":1404730800}}},{"terms":{"aid":[1,2,4]}}]},"_cache":false}}}], extra_source[]

Il problema risiedeva all'interno "filter": {"and": ...}, sembra questo tipo di ricerche sono più pesanti per ES rispetto al bool query di tipo. Quindi, ogni volta che si desidera applicare alcuni filters, si prega di utilizzare bool filtri (must, must_not e should)

REFF: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-bool-filter.html

Cheers!