2010-06-21 11 views
6

J'implémente un moteur de recherche avec solr qui importe au minimum 2 millions de doc par jour. L'utilisateur doit pouvoir effectuer une recherche sur le document importé dès que possible (presque en temps réel).Solr Sauvegarde incrémentale sur un système en temps réel avec index lourd

J'utilise 2 Windows x64 dédié avec tomcat 6 (mode Solr shard). chaque serveur, index environ 120 millions de doc et environ 220 Go (total 500 Go).

Je souhaite obtenir une sauvegarde incrémentielle à partir du fichier d'index solr pendant la mise à jour ou la recherche.
après la recherche, trouver des outils rsync pour UNIX et DeltaCopy pour Windows (GUI rsync pour Windows). mais obtenez l'erreur (disparue) pendant la mise à jour.

comment résoudre ce problème.

Note1: La copie de fichier est très lente, lorsque la taille du fichier est très grande. donc je ne peux pas utiliser de cette façon.

Remarque2: Puis-je empêcher les fichiers d'index corrompus lors de la mise à jour, en cas de panne de Windows, de réinitialisation matérielle ou de tout autre problème? Ne pas exécuter de sauvegarde pendant la mise à jour de l'index.

Répondre

8

Vous obtiendrez probablement une sauvegarde corrompue (donc inutile).

Quelques idées pour travailler autour:

  • lot vos mises à jour, à savoir au lieu d'ajouter/mettre à jour des documents tout le temps, ajouter/mettre à jour tous les n minutes. Cela vous permettra d'exécuter la sauvegarde entre ces n minutes. Inconvénients: la fraîcheur du document est affectée.
  • Utilisez un second cœur Solr passif: Configurez deux cœurs par fragment, un actif et un passif. Toutes les requêtes sont émises par rapport au cœur actif. Utilisez replication pour garder le noyau passif à jour. Exécutez la sauvegarde sur le noyau passif. Vous devrez disable replication lors de l'exécution de la sauvegarde. Inconvénients: complexe, plus de pièces mobiles, nécessite de doubler l'espace disque pour maintenir le noyau passif.
+0

L'index passif n'est-il pas déjà la sauvegarde parfaite? – Karussell

+2

@Karussell: il s'agit simplement d'une copie et non d'une sauvegarde appropriée car vous ne pouvez pas appliquer de politiques de sauvegarde comme le stockage hors site, la sauvegarde incrémentielle/différentielle/complète, etc. –

+0

merci beaucoup Mauricio – Hamid

14

Vous pouvez effectuer une sauvegarde à chaud (c'est-à-dire en écrivant dans l'index) à l'aide de ReplicationHandler pour copier le répertoire de données de Solr ailleurs sur le système local. Ensuite, faites ce que vous voulez avec ce répertoire. Vous pouvez lancer la sauvegarde chaque fois que vous voulez en allant à une URL comme ceci:

http://host:8080/solr/replication?command=backup&location=/home/jboss/backup 

Il est évident que vous pourriez script avec wget + Cron.

Plus de détails peuvent être trouvés ici:

http://wiki.apache.org/solr/SolrReplication

Le Lucene dans le livre d'action a une section sur les sauvegardes à chaud avec Lucene, et il me semble que le code dans ReplicationHandler de Solr utilise la même stratégie que décrit ici. Un des auteurs de ce livre a même élaboré sur comment cela fonctionne dans another StackOverflow answer.