Site icon Eolya Consulting

Mise en oeuvre de SolrCloud (Solr 4.0)

Objectifs

Après avoir présenté les principes de SolrCloud dans l’article « Présentation de SolrCloud« , dans cet article nous procéderons à l’installation d’un cluster SolrCloud avec 4 noeuds et un ensemble Zookeeper de 3 éléments. Pour l’exercice, nous installons tout sur un serveur physique unique, mais dans la réalité, plusieurs serveurs sont utilisés. Les explications sont synthétiques car nous supposons que Java, Tomcat et Solr (en mode non SolrCloud) sont des compétences maitrisées. Pour une installation standard de Solr 4.3.0, il est possible de se référer à l’article « Installer Solr 4.3.0 sous Tomcat 7 ».

Les pré-requis minimum pour un serveur hébergeant un noeud SolrCloud :

Les pré-requis usuels pour une serveur hébergeant un élément d’un ensemble Zookeeper :

Pour SolrCloud, chaque noeud est constitué de :

Normalement chaque noeud fonctionne sur son propre serveur physique et pour tous le serveur Tomcat utilise certainement le même port (8080 ou 8180 en général). Pour une installation de 4 noeuds sur un même serveur, chaque serveur Tomcat utilise un port différent (8180, 8280, 8380 et 8480).

Sur ce serveur, on installe également un ensemble Zookeper de 3 éléments.

Un autre point à prendre en compte est la bande passante réseau entre toutes les composantes du Cloud, c’est a dire entre les serveur hébergeant un noeud Solr ou une instance Zookeeper. Lors d’une indexation de données, un noeud qui est destinataire de l’appel REST fait par l’application cliente a toute les chances de devoir transmettre les données à indexer au vrai noeud final, puis ces données seront répliquées. Lors d’une recherche, c’est identique, le noeud destinataire de l’appel REST doit transmettre la requête à un ou plusieurs autres noeuds (shards de la collection). En conséquence, la traffic réseau interne au Cloud peut être très important car forcément un multiple du traffic réseau en provenance ou à destination de l’extérieur du Cloud. Donc pour un Cloud de production fortement sollicité, un réseau intra-cloud Gigabit est impératif et peut être même 10 Gigabits.

Installation

Récupérer Solr, Zookeeper et Tomcat

Augmenter les limites systèmes

Dans « /etc/security/limits.conf » file, ajouter cette ligne et rémarrer le serveur

root soft nofile 16184

Installer l’ensemble Zookeeper

cp -r /opt/downloads/zookeeper-3.4.5 /opt/zookeeper
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/zookeeper-data-1/
clientPort=2181
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890
dataDir=/opt/zookeeper-data-2/
clientPort=2182

et

dataDir=/opt/zookeeper-data-3/
clientPort=2183
mkdir /opt/zookeeper-data-1
mkdir /opt/zookeeper-data-2
mkdir /opt/zookeeper-data-3
cd /opt
echo 1 > zookeeper-data-1/myid
echo 2 > zookeeper-data-2/myid
echo 3 > zookeeper-data-3/myid
cd /opt/zookeeper
bin/zkServer.sh start zoo1.cfg
bin/zkServer.sh start zoo2.cfg
bin/zkServer.sh start zoo3.cfg
/opt/zookeeper/bin/zkCli.sh -server localhost:2181

Installation d’un noeud SolrCloud

Comme nous l’avons déjà dit, un noeud SolrCloud est constitué d’un serveur Tomcat et de Solr 4.0. Une procédure d’installation standard (non SolrCloud) est d’écrite dans l’article « Installer Solr 4.3.0 sous tomcat 7 ».

Chaque noeud est installé dans un répertoire “/opt/nodeN”

mkdir /opt/node1
mkdir /opt/node1/solr
mkdir /opt/node1/solr/home
mkdir /opt/node1/solr/webapp
mkdir /opt/node1/tomcat
<?xml version="1.0" encoding="UTF-8" ?>
<solr persistent="true">
    <cores adminPath="/admin/cores" zkClientTimeout="${zkClientTimeout:}" 
           hostPort="${port:}" hostContext="${hostContext:}">
    </cores>
</solr>

Le fichier solr.xml contient la définition des cores de l’instance Solr. Pour l’instant, il ne contient pas de déclaration de core et aucun core avec des fichiers de configuration ou de répertoire “data” pour les index ne doivent être créés. SolrCloud réalise ces taches lui-même lors de l’utilisation de la Collections API pour créer les collections. Chaque core correspond à un shard d’une collection ou à un de ces replicas.

cp -r /opt/downloads/solr-4.3.0/dist/solr-4.3.0.war /opt/node1/solr/webapp/solr.war
cp -r /opt/downloads/solr-4.3.0/example/resources/log4j.properties /opt/node1/solr/.
cp -r /opt/downloads/apache-tomcat-7.0.40/* /opt/node1/tomcat/.
cp -r /opt/downloads/solr-4.3.0/example/lib/ext/* /opt/node1/tomcat/lib/.
SOLR_OPTS="-Dsolr.solr.home=/opt/node1/solr/home -Dport=8180 -DhostContext=solr 
-DzkClientTimeout=20000 -DzkHost=localhost:2181,localhost:2182,localhost:2183 
-Dlog4j.configuration=file:///opt/node1/solr/log4j.properties"
export JAVA_OPTS="$SOLR_OPTS"

Afin d’éviter les erreurs habituelles « Out of heap size memory » et « Out of permgen memory », on fixe ici d’autres paramètres importants pour Solr, tels que :

-Djava.awt.headless=true -Xms256M -Xmx8192M -XX:MaxPermSize=512m -XX:+UseConcMarkSweepGC

Le but est d’éviter l’erreur habituelle « Too many open files ». On place cette ligne au début du fichier.

ulimit -n 8192

Il s’agit de copier un fragment de configuration JNDI dans le répertoire “conf/Catalina/localhost” de Tomcat. Créer dans ce répertoire un fichier “solr.xml” avec le contenu suivant :

<Context docBase="/opt/node1/solr/webapp/solr.war" debug="0" crossContext="true" >
    <Environment
        name="solr/home" type="java.lang.String"
        value="/opt/node1/solr/home" override="true" />
</Context>

Dupliquer le noeud Solr en 3 autres noeuds

Le principe pour dupliquer le noeud 1 en un autre noeud est le suivant :

cp -r /opt/node1 /opt/nodeN

Changer le port dans /opt/nodeN/solr/home/solr.xml (hostPort)

Changer les ports dans :

/opt/nodeN/tomcat/conf/server.xml
/opt/nodeN/tomcat/bin/setenv.sh (-Dport=…)

Changer le répertoire home de Sorl dans /opt/nodeN/tomcat/bin/setenv.sh

-Dsolr.solr.home=…

Modifier la configuration jndi de Solr dans Tomcat (/opt/nodeN/tomcat/conf/Catalina/localhost/solr.xml)

Démarrer les 4 nodes

/opt/node1/tomcat/bin/startup.sh
/opt/node2/tomcat/bin/startup.sh
/opt/node3/tomcat/bin/startup.sh
/opt/node4/tomcat/bin/startup.sh

Conclusion

On doit avoir maintenant une configuration SolrCloud de 4 noeuds démarrés avec un ensemble Zookeeper de 3 éléments.

L’étape suivante est de charger des configurations Solr dans Zookeeper et de créer des collections. Nous verrons ceci dans un prochain article.

Quitter la version mobile