Dans cet article, je décris et illustre par l’exemple la faculté dont dispose Solr depuis la version 4.10 de démarrer des replicas automatiquement en cas de défaillance d’un noeud du cloud (Solrcloud Replica failover avec Hadoop HDFS). Ceci est possible à condition d’utiliser un système de fichiers distribué pour stocker les données Solr. Le ticket JIRA suivant est à l’origine de cette fonctionnalité « Add autoAddReplicas feature for shared file systems« .
Pour illustrer cette fonctionnalité, je décris sur un serveur unique l’installation de l’ensemble des composants à mettre en place :
- Un système de fichiers distribué HDFS de Hadoop
- Un zookeeper indépendant de Solr
- Un cloud Solr de 3 noeuds minimum
Cet article ne se veut pas exhaustif sur les procédures d’installation et de paramètrage de ces 3 composants. J’indique des procédures d’installation rapides. Puis un scénario de failover d’un replica :
- Création d’une collection sur 2 noeuds (1 shard + 1 replica)
- Arrêt d’un des 2 noeuds hébergeant les éléments de la collection
- Création et mise en route automatique d’un replica sur le 3ème noeud
L’installation est faite en totalité dans le répertoire « /opt/solr-hadoop »
Installation de Hadoop/HDFS
Il s’agit d’une installation de type « Pseudo-Distribued » dans un cluster à noeud unique. La procédure complete est décrite sur le site Hadoop « Hadoop MapReduce Next Generation – Setting up a Single Node Cluster« .
Les étapes de l’installation :
- Télécharger Hadoop et extraire l’archive dans « /opt/solr-hadoop/hadoop-2.6.0 »
- Pour ne pas être dépendant de la version, créer un lien symbolique /opt/solr-hadoop/hadoop -> /opt/solr-hadoop/hadoop-2.6.0
cd /opt/solr-hadoop ln -s hadoop-2.6.0 hadoop
- Dans /opt/solr-hadoop, créer le fichier « setenv.sh »
#!/bin/sh #export JAVA_HOME=/usr/java/latest export HADOOP_PREFIX=/opt/solr-hadoop/hadoop
Eventuellement, décommenter la définition de variable JAVA_HOME pour utiliser une version spécifique de Java.
Avant toutes opérations avec les outils en ligne de commande de Hadoop (arrêt, démarrage, …), il faut éxecuter ce script (le « . » avant setenv.sh est important).
cd /opt/solr-hadoop . setenv.sh
- Créer un répertoire pour les données HDFS
cd /opt/solr-hadoop mkdir dfs
- Configuration minimale dans « /opt/solr-hadoop/hadoop/etc/hadoop »
core-site.xml<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration>
hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:///opt/solr-hadoop/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:///opt/solr-hadoop/dfs/data</value> </property> <property> <name>dfs.namenode.checkpoint.dir</name> <value>file:///opt/solr-hadoop/dfs/namesecondary</value> </property> </configuration>
- Vérifier que l’accès ssh à localhost fonctionne
ssh localhost
Si ce n’est pas le cas, corriger le problème (installer, configurer et démarrer le serveur ssh, générer et installer une clé publique/privée, …)
- Formater le système de fichiers HDFS (pas de panique, cela ne formate pas votre disque dur, ni n’occupe d’espace disque)
cd /opt/solr-hadoop/hadoop bin/hdfs namenode -format
- Démarrer les demons NameNode et DataNode
cd /opt/solr-hadoop/hadoop sbin/start-dfs.sh
- Accéder à l’interface web du NameNode – http://localhost:50070/
Installation de Zookeeper (membre unique)
Il s’agit d’un ensemble Zookeeper avec un membre unique pour pouvoir démarrer les noeuds Solr car l’utilisation du Zookeeper interne de Solr n’est pas possible lors de l’utilisation de HDFS pour les données Solr. Une procédure d’installation plus détaillée est disponible ici « Installation d’un ensemble Zookeeper »
Les étapes de l’installation :
- Télécharger Zookeeper et extraire l’archive dans « /opt/solr-hadoop/zookeeper-3.4.6 »
- Pour ne pas être dépendant de la version, créer un lien symbolique /opt/solr-hadoop/zookeeper -> /opt/solr-hadoop/zookeeper-3.4.6
cd /opt/solr-hadoop ln -s zookeeper-3.4.6 zookeeper
- Créer un répertoire pour les données de Zookeeper
cd /opt/solr-hadoop mkdir zoo-data
- Configuration minimale dans « /opt/solr-hadoop/zookeeper/conf ».
Copier le fichier zoo-sample.cfg en zoo.fcg et ajouter la lignedataDir=/opt/solr-hadoop/zoo-data
- Démarrer Zookeeper
cd /opt/solr-hadoop zookeeper/bin/zkServer.sh start
Installation de SolrCloud
L’installation permet le démarrage de 3 noeuds. Pour plus d’informations sur SolrCloud (principe, installation, exploitation, …), il est possible de consulter les différents articles déjà écrits sur ce blog. Des liens sont fournis à la suite de cet article.
Les étapes de l’installation :
- Télécharger Solr et extraire l’archive dans « /opt/solr-hadoop/solr-5.0.0 »
- Pour ne pas être dépendant de la version, créer un lien symbolique /opt/solr-hadoop/solr -> /opt/solr-hadoop/solr-5.0.0
cd /opt/solr-hadoop ln -s solr-5.0.0 solr
- Configuration minimale dans « /opt/solr-hadoop/solr/bin »
Editer le fichier solr.in.sh et ajouter les lignes suivantes au débutSOLR_OPTS="$SOLR_OPTS -Dsolr.directoryFactory=HdfsDirectoryFactory" SOLR_OPTS="$SOLR_OPTS -Dsolr.lock.type=hdfs" SOLR_OPTS="$SOLR_OPTS -Dsolr.hdfs.home=hdfs://localhost:9000/solr/home"
Le but de ces lignes est de configurer Solr pour utiliser le système de fichiers HDFS pour l’ensemble des collections. Le paramètre « solr.hdfs.home » correspond au paramètre que l’on a positionné précédemment dans le fichier core-site.xml de Hadoop.
- Créer dans HDFS, le point d’entrée pour les données Solr
cd /opt/solr/hadoop/hadoop hadoop/bin/hdfs dfs -mkdir /solr hadoop/bin/hdfs dfs -mkdir /solr/home
- Démarrer 3 noeuds Solr respectivement sur les ports 8983, 8984 et 8985
cd /opt/solr-hadoop solr/bin/solr start -c -z localhost:2181 solr/bin/solr start -c -z localhost:2181 -p 8984 solr/bin/solr start -c -z localhost:2181 -p 8985
Tester le failover d’un replica
Maintenant que le cloud Solr est démarré avec 3 noeuds, nous pouvons tenter l’expérience du redémarrage automatique d’un replica lorsqu’un noeud s’arrête.
Les étapes du test sont :
- Charger une configuration dans Zookeeper
- Créer une collection avec 1 shard et 1 replica donc sur 2 des 3 noeuds du cloud
- Arrêter un des noeuds qui héberge la collection et voir ce qui se passe
Charger dans Zookeeper la configuration basique fournie avec Solr
solr/server/scripts/cloud-scripts/zkcli.sh -cmd upconfig -zkhost localhost:2181 -confdir solr/server/solr/configsets/basic_configs/conf/ -confname basic
Créer une collection
La magie est dans le paramètre « autoAddReplicas=true »
curl "http://localhost:8983/solr/admin/collections?action=CREATE&name=basic&numShards=1&replicationFactor=2&maxShardsPerNode=1&collection.configName=basic&autoAddReplicas=true"
La collection apparait ainsi dans l’administration de Solrcloud
Arrêter un noeud et observer
On arrête le noeud qui fonctionne sur le port 8985
cd /opt/solr-hadoop solr/bin/solr start -c -z localhost:2181 -p 8985
Le noeud de la collection apparait au statut « Gone »
Puis quelques secondes plus tard, on constate qu’un replica de substitution a été créé sur le noeud Solr disponible (statut « Active » après un statut transitoire à « Recovering »)
Le statut transitoire « Recovering » est assez court et constant quelque soit la volumétrie des données car il n’y a pas synchronisation des données entre 2 noeuds Solr. Le nouveau replica utilise les données existantes hébergées dans le système de fichiers distribué.
Conclusion
A l’heure de l’explosion de la volumétrie des données générée par les systèmes informatiques, 2 problématiques sont à résoudre : le stockage de ces données et les traitements d’analyse toujours plus nombreux qu’il est possible de leur appliquer. Hadoop et son écosystème a pour objectifs de répondre à ces besoins. Le traitement des données est pris en charge par MapReduce alors que le stockage est pris en charge par HDFS sur lequel s’appuie par exemple la base de données NoSQL HBase, mais également Solr. Utiliser HDFS avec Solr permet de transférer la problématique du stockage des index et tout ce qui y est lié (volumétrie, performances, monté en charge failover, sauvegardes, …) à un outil tiers spécialisé. La capacité de conserver la totalité des éléments d’une collection en cas de défaillance d’un noeud du cloud Solr est un réel atout.
Pour plus de détails sur la configuration de Solr avec HDFS, il faut consulter la documentation Solr « Running Solr on HDFS« .
Dans le cadre d’un projet réel que l’on qualifie ou pas de « projet BigData », il est peu probable que Hadoop soit utilisé pour HDFS seul. Les besoins de traitement sur les données imposent l’utilisation d’un environnement Hadoop accompagné d’une partie de son écosystème. Dans ce cas, on s’oriente vers l’utilisation d’une stack Hadoop telle que Cloudera, Hortonworks ou MapR et la lecture des articles « L’embarras du choix – Comment choisir la bonne plate-forme pour Big Data / Hadoop ? » et « La jungle des différentes distributions open source Hadoop » est un bon début pour faire un choix.