2015-09-25 4 views
0

La configuration
Nous avons mis en place un cluster SolrCloud (version Solr 4.10.4) composé de 6 serveurs répartis sur 2 centres de données (3 sur chaque DC).SolrCloud disparaît après 15-20 minutes

Le cluster est configuré avec 3 fragments et un facteur de réplication de 2 et gère un cœur avec des documents de 45 Mo avec une moyenne d'environ 100 Go par fragment. Il y a 3 instances de Zookeeper régulant le cluster qui résident sur 3 des 6 serveurs (ceux du premier DC).

Le cœur réside sur un disque SSD 6Gb/s sur tous les fragments. Le temps de ping intra-DC est de l'ordre de 0,3 ms, tandis que celui de l'inter-DC est de l'ordre de 3 ms. Le cluster est configuré sur Tomcat 7.0.61 et Java 7 avec une mémoire allouée de 26 Go alors que chaque serveur dispose de 32 Go alors que chaque nœud est configuré pour contacter le zookeeper toutes les 30 secondes.

La configuration du cache pour chaque nœud Solr est la suivante

<filterCache class="solr.FastLRUCache" 
      size="40000" 
      initialSize="40000" 
      autowarmCount="0"/> 
<queryResultCache class="solr.LRUCache" 
       size="50000" 
       initialSize="20000" 
       autowarmCount="0"/> 
<documentCache class="solr.LRUCache" 
       size="2000000" 
       initialSize="2000000" 
       /> 
<fieldValueCache class="solr.FastLRUCache" 
       size="8" 
       autowarmCount="8" 
       showItems="8" /> 

En plus de cela, nous avons une application API qui effectue certaines opérations de recherche que la plupart du temps ressemblent:

q=Fragmento+de+retablo+NOT+DATA_PROVIDER%3A%22CER.ES%3A+Red+Digital+de+Colecciones+de+museos+de+Espa%C3%B1a%22& 
rows=12&start=0& 
sort=score+desc& 
timeAllowed=30000&fl=*%2Cscore&facet.mincount=1 

Nous utilisons un ou tout au plus pour trier les paramètres (le second étant l'identifiant unique de notre schéma mais pas dans cet exemple).

Le problème
Notre API envoie environ 5-10 requêtes par seconde sur le cluster. Même ce nombre minimal de demandes submerge le cluster et les nœuds commencent à disparaître alors que beaucoup d'E/S de disque sont observées en même temps. Nous faisons un réchauffement manuel du cache pendant environ 10 minutes avant de mettre le core à la disposition de l'API et nous remarquons qu'après un certain temps (et avant le crash du cluster), le taux de succès sur les caches est de 1 pour tous les queryResultCache=0.67 et documentCache=0.9 , alors qu'aucune expulsion ne se produit non plus. La consommation de mémoire est d'environ 88%.

Toutes les idées sur ce qui peut se tromper ou sur ce que nous devrions cibler seront très appréciées.

+0

Avez-vous vérifié vos journaux solr/de Zookeeper? Vous pouvez trouver des informations utiles là-bas. – Yann

+0

Salut, j'ai vérifié les logs de solr et de zookeeper et il se plaint des délais d'attente de socket. Je cours également un certain nombre d'expériences avec différentes configurations et profilage, et il semble que GC entre et interrompt le groupe entier –

Répondre

0

Une consommation de mémoire d'environ 88% peut rapidement passer à 100 et tuer les cœurs.

Ce qui nous est arrivé ... Recherchez les fichiers de vidage de base dans les noyaux individuels journaux

SolrCloud est également sensible aux pics élevés cpu qui peuvent faire l'ZooKeeper pense que le noeud est mort ... La récupération est lente et parfois n'arrive pas du tout.

Vous pouvez modifier le délai d'attente par défaut du ZooKeeper pour empêcher cela.

Vous pouvez voir ce bug par exemple sur la question ...

https://issues.apache.org/jira/browse/SOLR-5565

De vous faire des commentaires, je vois que vous devriez probablement le délai d'attente à environ 2 minutes.

Cela vient à un prix bien sûr - essayer de lire un peu et comprendre ce que cela signifie

https://zookeeper.apache.org/doc/r3.1.2/zookeeperStarted.html

+0

Salut, j'ai commencé avec le profilage étendu de l'application, et je pense qu'actuellement le problème est qu'il y a des requêtes spécifiques (similaire à celui que j'ai fourni) qui conduit à une pagination profonde sous-optimale, qui conduit finalement à GC avec des pauses qui peuvent durer jusqu'à 1 minute. –

+0

J'ai modifié la réponse pour essayer de répondre à votre nouveau commentaire –