Solr – Installation et bonnes pratiques

Logo Solr


Cet article décrit la procédure et les bonnes pratiques pour une installation en mode standard ou en mode SolrCloud de Solr version 7 ou plus.

Pré-Requis

Logiciel

Solr est une application Java. Le premier des pré-requis est de disposer d’un environnement Java. Nous préconisons les versions Oracle ou OpenJDK 1.8 ou 1.9. En complément, il est nécessaire d’installer les packages suivants :

  • lsof. Cet utilitaire permet de connaitre tous les fichiers ouverts par un processus et est utilisé lors du démarrage
  • haveged. Ce package permet d’augmenter l’entropie du serveurs pour de meilleurs performances

Hardware

Les pré-requis matériels pour un bon fonctionnement de Solr dépendent d’un très grand nombre de paramètres liés à l’usage qui va en être fait. Parmis ces paramètres, les principaux sont évidement liés à la volumétries des données indexées et des requêtes effectuées. Ils sont également liés aux multiples cas d’usage comme :

  • les stratégies de mises à jour
  • le besoins ou pas de recherche en temps réel (near real-time search)
  • l’utilisation ou pas de certaines fonctionnalitées : affichage de facettes (faceting), mis en évidence des termes (terms highlighting), regroupements de résultats, …

Les caractéristiques matérielles qui influencent le plus les performances de Solr sont :

  • La mémoire disponible
  • Le nombre et la puissances des processeurs
  • Les I/O disque en écriture et en lecture (principalement si le cas d’usage implique des mise à jours fréquentes ou continues des données)
  • La performance du réseau entre les serveurs dans le cas d’une architecture SolrCloud

Zookeeper

Dans le cas d’une installation en mode SolrCloud un ensemble Zookeeper doit être disponible. Pour une installation de Zookeeper, voir l’article « Zookeeper : Installation et bonnes pratiques« .

Bonnes pratiques

Le respect des bonnes pratiques suivantes sont impératives pour un fonctionnement optimal de Solr

  • Utilisé des serveurs dédiés
  • Disposer de suffisamment de RAM pour le système, la mémoire Heap de la JVM, la mise en cache de la totalité des index et les fonctionnalité Solr utilisant la mémoire hors heap (facet JSON, docValues) par exemple. La formule de calcul de la mémoire RAM minimum est : RAM minimum = 1 Go + mémoire Heap de la JVM (Xmx) + taille des index sur le disque.
  • Désactiver le swap des serveurs (vm.swappiness=1)
  • Augmenter le nombre maximum de « memory map areas » (vm.max_map_count=262144)
  • Augmenter la limite « nofile » à 65500 (1024 par défaut) dans « /etc/security/limits.conf »
  • Augmenter la limite « nproc» à 65500 (1024 par défaut) dans « /etc/security/limits.conf »
  • Dans le cas d’une utilisation en mode SolrCloud, rendre l’infrastructure indépendante des DNS en utilisant le fichier « /etc/hosts »
  • Activer les logs de GC de la JVM et les analyser régulièrement avec le site gceasy.io
  • Installer des outils de monitoring du système (CPU, I/O disques, …) afin des contrôler le bon fonctionnement et les performances du système. Nous préconisons « sar » qui fait parti du package sysstat
  • Disposer d’un espace disque dédié et performant pour stocker la totalité des index à moyen termes

Mémoire et I/O disques

Lorsque la mémoire RAM disponible respecte les conseils de bonne pratique (1 Go + mémoire Heap de la JVM + taille des index sur le disque + …)

  • les I/O disques sont critiques aussi bien en écriture qu’en lecture lorsque l’usage de Solr implique des mises à jours des données fréquentes voir permanentes.
  • les I/O disques ne sont pas critiques si l’usage implique des mises à jours des données peu fréquentes
  • les I/O disques ne sont pas critiques si l’usage implique des mises à jours des données volumineuses mais à des heures de faible affluence en recherche

Si la mémoire RAM disponible ne respecte pas les conseils de bonne pratique, les I/O disque sont critiques dans tous les cas.

Lorsque le cas d’usage implique des I/O disques critiques, utiliser des disques SSD est à envisager.

Installation de Solr

  • créer un utilisateur solr
$ sudo useradd solr
  • Dans le cas d’une installation en mode Solrcloud, mettre en place le fichier /etc/hosts avec le contenu suivant. Le but est d’être totalement indépendant des DNS (pannes ou problème de configuration) tant pour résoudre les noms des serveurs Solr que le nom des serveurs Zookeeper
xxx.xxx.xxx.xxa zk1
xxx.xxx.xxx.xxb zk2 
xxx.xxx.xxx.xxc zk3 
xxx.xxx.xxx.xxd zk4 
xxx.xxx.xxx.xxe zk5 
xxx.xxx.xxx.xxa solr1
xxx.xxx.xxx.xab solr2
...
xxx.xxx.xxx.xan solrn
  • extraire l’archive dans un répertoire temporaire
$ cd /tmp
$ tar xzf solr-x.x.x.tgz
$ cd solr-x.x.x/bin
$ sudo ./install_solr_service.sh /tmp/solr-x.x.x.tgz -u solr -d /home/solr -i /opt -s solr -n -p 8983
  • Créer un répertoire de log
$ sudo mkdir /var/log/solr
$ sudo chown solr:solr /var/log/solr
  • Configurer /etc/default/solr.in.sh

/etc/default/solr.in.sh est le fichier de configuration de Solr. Les principaux paramètres à modifier sont ceux-ci.

# la taille de la mémoire heap nécessaire
SOLR_HEAP="Xg"
# lors d'une installation en mode Solrcloud, indiquer le liste des serveurs Zookeeper
ZK_HOST="zk1:2181,zk2:2181,zk3:2181,zk4:2181,zk5:2181"
ZK_CLIENT_TIMEOUT="30000"
# le nom de host de ce serveurs solr tel qu'indiqué dans /etc/hosts
SOLR_HOST="solrN"
SOLR_PORT="8983"
# selon le paramètre -d du script d'installation
SOLR_PID_DIR="/home/solr"
SOLR_HOME="/home/solr/data"
LOG4J_PROPS="/home/solr/log4j.properties"
SOLR_LOGS_DIR="/var/log/solr"

Script de démarrage

Le script de démarrage de Solr est /etc/init.d/solr

Vous souhaitez bénéficier d’une expertise Solr ou intégrer une ressource ponctuelle à vos projets ? Rendez vous sur la page Contact