2011-06-15 15 views
12

Nuestro equipo de desarrollo está actualmente investigando la migración de nuestro sistema de búsqueda a Apache Solr, y agradeceríamos mucho algunos consejos sobre la configuración. Estamos indexando aproximadamente doscientas millones de filas de bases de datos. Agregamos alrededor de cien mil filas nuevas durante el día. Estas nuevas filas de bases de datos deben poder buscarse dentro de los dos minutos posteriores a su recepción.Apache Solr Failover Support en Master-Slave Setup

No queremos que la indexación empañe el buscador, por lo que nuestra idea es tener dos servidores Solr ejecutándose en diferentes máquinas en una configuración de replicación. La primera instancia de Solr será el indexador. Utilizará el DataImportHandler para indexar el delta y tendrá habilitado el autocommit para evitar tasas de compromiso demasiado entusiastas. La optimización del índice tendrá lugar durante los períodos programados. La segunda instancia de Solr (el esclavo) será el buscador principal y tendrá sus índices almacenados en unidades de estado sólido RAID.

Lo que nos preocupa es la conmutación por error. Nuestras búsquedas son de misión crítica. Si el buscador principal se cae por alguna razón, nuestro servicio de búsqueda automáticamente desviará las consultas al nodo del indexador. La indexación es igualmente crítica, sin embargo. Si el indexador muere, debemos tener una recuperación de fallas caliente. ¿Existe alguna forma recomendada de automatizar la migración tras error del nodo principal en la replicación de Solr? Empecé a investigar ZooKeeper, pero no estaba seguro de si este era el mejor enfoque.

+0

He intentado utilizar el repetidor como copia de seguridad maestra, pero el repetidor no puede replicarlo en esclavos cuando el maestro principal está inactivo, ¿alguien puede ayudarme? Mi publicación está aquí (https://stackoverflow.com/questions/49079050/solr-repeater-stops-letting-its-slave-polling-from-it-when-its-master-is-down) – wwood

Respuesta

13

Como ha identificado, la conmutación por error de búsqueda se puede gestionar mediante la replicación.

Failover maestro es un poco más complicado. Una idea a algo parecido a la siguiente configuración lógica

+--------+  +--------+ 
| Slave | ... | Slave | 
+--------+  +--------+ 
    |    | 
    v (replicate) v 
+---------------------------+ 
|  Load balancer   | 
+---------------------------+ 
     /  \ 
     v   v 
+--------+  +--------+ 
| Master | ---> | Master | 
+--------+  +--------+ 
  • Para mantener índices Maestro al día repeater modo se puede utilizar en un maestro en caliente copia de seguridad puede replicar desde el maestro primario
  • De cualquier
    • Use algo como el controlador Ping en el maestro primario como una notificación de mantenimiento. Si no se puede alcanzar, escriba un pequeño componente programático que active el controlador de importación de datos del maestro secundario para que se haga cargo.
    • Mantenga los manejadores de importación de datos activos en todos los servidores maestros, permitiendo que cualquiera de ellos se haga cargo de la operación sin configuración adicional.

Tenga en cuenta que puede que tenga que configurar el equilibrador de carga de tal manera que un esclavo sólo puede replicar desde un maestro en cualquier punto en el tiempo.

En una nota lateral, sería interesante escuchar algunas de sus experiencias indexando un conjunto de datos tan grande.

+0

Gracias por su retroalimentación Johan. La gente de la lista de correo de Solr recomendó una configuración similar. – ikarous

+1

La indexación de una gran cantidad de filas ha planteado algunos desafíos únicos. Una indexación completa lleva al menos ocho horas, por lo que cualquier cambio de esquema consume mucho tiempo. El rendimiento de una sola consulta es sorprendentemente bueno a pesar del tamaño del índice, con algunas excepciones. Las búsquedas borrosas a veces pueden tardar varios segundos en completarse e inicialmente tuvimos problemas con las consultas de rango de fechas.Hemos logrado reducir los tiempos de consulta en consultas de rango de fechas en 1) reduciendo la granularidad del campo indexado a nivel de día, y 2) cambiando el tipo de campo de fecha TrieDate con un valor de precisión muy bajo. – ikarous

+0

Es realmente interesante ver a Solr siendo empujado de esta manera. ¿Alguna vez el consumo de memoria fue un problema para usted? –