Site icon Eolya Consulting

Solrcloud Disaster Recovery – Alternative à CDCR

Solrcloud CDCR

Solrcloud Cross Data Center Replication – CDCR de Solrcloud permet de répliquer en temps réel un Cluster Solrcloud vers un ou plusieurs autres cluster. Le CDCR est principalement utilisé pour traiter deux besoins.

Le CDCR disparaît dans la version 9 de Solr et à ce jour aucune solution de remplacement n’est annoncée. Dans cet article, nous proposons une solution alternative afin de couvrir le premier besoin : la gestion des Disaster Recovery.

Disaster Recovery : RTO et RPO

Lors de la mise en place d’un plan de Disaster Recovery, deux objectifs sont à définir :

La solution présentée dans cet article optimise le RTO. Elle permet en temps réel de disposer dans un datacenter « secondaire » d’une copie des données du cluster SolrCloud. Le but est de ne perdre au maximum que quelques secondes de mise à jour.

Les types de replica SolrCloud

Depuis la version 7 de Solr, il est possible de mettre en place Les 3 types de réplicas de Solrcloud. En voici une description simplifiée :

Le délai de réplication d’un replica TLOG ou PULL avec le leader est définie ainsi :

La quantité maximum de perte des modifications des données en cas de panne grave correspond donc au maximum à deux fois ce délai (car la panne peut intervenir durant un réplication).

Pour une description très complète de ces 3 types de replicas et de leur fonctionnement, nous conseillons la lecture de ces deux très bons articles en Anglais :

Il existe deux cas d’usage pour une collection :

Near Real Time Searching

Petite parenthèse au sujet de la notion de « recherche NRT » ou « Near Real Time Searching ».

Comme le dit la documentation Solr, « Near Real Time (NRT) Searching » signifie que les documents sont disponibles rapidement après leur indexation. Les mots importants ici sont « Near » et « rapidement ». Jamais avec Solr (et pas plus avec elasticsearch d’ailleurs) les documents peuvent être disponibles immédiatement apres leur indexation. En effet, les étapes entre la requête d’indexation d’un document et la possibilité de le voir apparaître dans les résultats sont multiples :

  1. La requête d’indexation prend un certain temps qui correspond à l’indexation par le leader qui a lui-même attendu la confirmation des indexations par les replicas NRT.
  2. Après le retour positif de la requête d’indexation, il est nécessaire qu’un softCommit soit exécuté sur chaque replica. Le délai va de quelques millisecondes à quelques centaines de millisecondes selon la configuration et selon le moment où est indexé le document.
  3. A l’issue de ce softCommit, un searcher doit être ouvert sur chaque réplica et éventuellement préchauffé.

L’indexation par chaque réplica qui ont des cycles de softCommit non synchronisés fait que le document indexé sera disponible plus ou moins rapidement sur chaque réplica. Deux requêtes lancées simultanément et rapidement après l’indexation pourront remonter ou pas le document en fonction du replica utilisé.
Au final, le délai de mise à disposition du document peut parfois (rarement) être inférieur au délai configuré dans le softCommit, mais le plus souvent être bien supérieur. Autant dire que le rapidement signifie généralement plusieurs centaines de millisecondes.

Principe de la solution

La solution proposée s’appuie sur la mise en place d’un replica dans le datacenter secondaire pour chaque shard des collections du datacenter principal.
Pour les indexations, si un problème ou un arrêt temporaire d’un nœud Solr se produit, il ne faut pas que les nouveaux leaders soient élus parmi les replicas du datacenter secondaire. Ces replicas sont donc de type « PULL ».
Pour les recherches, il n’est pas souhaitable que les replicas du datacenter secondaire soient utilisés. Les requêtes utiliseront le paramètre « shards.preference » pour l’indiquer à Solr.

Mise en oeuvre de la solution

Traitement du RPO – La sauvegarde des données

Au Solrcloud installé dans le datacenter principal, on ajoute un nœud Solr dans le datacenter secondaire. Ce nœud a pour vocation d’héberger les réplicas de type PULL. Il est nécessaire de disposer de suffisamment d’espace disque, mais pas nécessairement d’une puissance CPU ou d’une quantité de mémoire importante. Par contre, il est impératif que la bande passante réseau entre les deux datacenters soit importante surtout en cas de ré-élection de leaders avec des replicas de type NRT.

Le schéma ci-dessous montre les deux datacenters. Le datacenter principal avec les serveurs Zookeeper et les nœuds Solr qui hébergent les replicas NRT ou TLOG. Le datacenter secondaire et le nœud Solr qui héberge les replicas PULL. Le nœud Solr du datacenter secondaire fait partie du Cluster SolrCloud et se connecte à l’ensemble Zookeeper.

La création d’une collection

La création d’un collection se fait en deux étapes :

curl 'http://localhost:8983/solr/admin/collections?action=CREATE&name=sirene&numShards=4&tlogReplicas=2&createNodeSet=solr_p1:8983_solr,solr_p2:8983_solr,solr_p3:8983_solr,solr_p4:8983_solr&maxShardsPerNode=-1&wt=json'
curl 'http://localhost:8983/solr/admin/collections?action=ADDREPLICA&collection=sirene&shard=shard1&createNodeSet=solr_s1:8983_solr&type=pull&wt=json'


Les recherches

Afin que les recherches ne soient pas pénalisées par les replicas de type PULL (délais réseau, faible puissance CPU, faible mise en cache des index, …), il est nécessaire de les exclure de la recherche. Pour cela, les requêtes spécifient une préférence pour les shards à utiliser au moyen du paramètre « shards.preference » et au choix des propriétés « replica.type » ou « replica.location »

Pour indiquer de ne pas utiliser de replica PULL pour traiter la requête

shards.preference=replica.type:NRT,replica.type:TLOG 

Pour indiquer la liste des nœuds Solr à utiliser pour traiter la requête

shards.preference=replica.location:http://solr_p1,replica.location:http://solr_p2:http://solr_p3,replica.location:http://solr_p4 

Traitement du RTO – Remettre en route un Cluster SolrCloud

Lors d’un événement grave impliquant la non disponibilité prolongée du datacenter principal, il va être nécessaire de mettre en route un cluster SolrCloud dans le datacenter secondaire. Chaque société décidera de la stratégie à mettre en place selon ses contraintes et ses procédures internes. Cependant, il y a quelques principes à respecter au moment de la mise en place des données sauvegardées.

Imaginons que la solution est de disposer dans le datacenter secondaire d’un cluster SolrCloud identique à celui du datacenter principal. Ce cluster en sommeil (VM éteintes) est démarré. Les collections sont créées et les données sauvegardées mise en place. Pour cela, la procédure suggérée est la suivante :

Conclusion

La solution proposée dans cet article permet d’atteindre un RPO piloté par la configuration autoCommit / autoSoftCommit des collections, soit de quelques secondes à quelques minutes pour la quantité maximum de perte des modifications des données. Le RTO pour la durée maximale d’interruption du service correspond au temps de prise de décision, à la durée de démarrage du cluster dans le datacenter secondaire et au délai de mise en place des données sauvegardées.

Attention, cette solution ne protège pas d’erreurs de manipulations telles que la suppression massive de documents ou la suppression d’une collection !

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

Quitter la version mobile