Solrcloud Replica failover avec Hadoop HDFS

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
  • Dans /opt/solr-hadoop, créer le fichier « setenv.sh »
    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).

  • Créer un répertoire pour les données HDFS

  • Configuration minimale dans « /opt/solr-hadoop/hadoop/etc/hadoop »
    core-site.xml

    hdfs-site.xml

  • Vérifier que l’accès ssh à localhost fonctionne

    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)

  • Démarrer les demons NameNode et DataNode

  • 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
  • Créer un répertoire pour les données de Zookeeper
  • Configuration minimale dans « /opt/solr-hadoop/zookeeper/conf ».
    Copier le fichier zoo-sample.cfg en zoo.fcg et ajouter la ligne
  • Démarrer Zookeeper

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
  • Configuration minimale dans « /opt/solr-hadoop/solr/bin »
    Editer le fichier solr.in.sh et ajouter les lignes suivantes au début
    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
  • Démarrer 3 noeuds Solr respectivement sur les ports 8983, 8984 et 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

Créer une collection

La magie est dans le paramètre « autoAddReplicas=true »

La collection apparait ainsi dans l’administration de Solrcloud

ReplicaFailOver1

Arrêter un noeud et observer

On arrête le noeud qui fonctionne sur le port 8985

Le noeud de la collection apparait au statut « Gone »

ReplicaFailOver2

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 »)

ReplicaFailOver3

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.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *