2013-04-05 18 views
15

Ho installato una replica SolrCloud utilizzando lo zookeeper autonomo. Ma ora desidero apportare alcune modifiche al mio Schema.xml e ricaricare il core. Il problema è che quando eseguo un singolo server Solr (nessun solrcloud) viene caricato il nuovo schema, ma non so come ricaricare lo schema su tutto il server di replica. Ho provato a ricaricare lo schema su uno dei server senza alcun impatto desiderato. C'è un modo in cui posso ricaricare il mio schema.xml in Solr in configurazione di replica distribuita che utilizza zookeeper.Ricaricamento di Zookeeper solr conf (schema.xml)

risposta

25

Abbiamo appena trovato la soluzione di cui abbiamo bisogno per inviare la configurazione modificata a zookeeper ensemble.

Basta usare

sh zkcli.sh -cmd upconfig -zkhost 127.0.0.1:2181 -collection collection1 -confname myconf -solrhome ../solr -confdir ../solr/collection1/conf 

zkcli.sh è presente sotto esempio/cloud-scripts

+1

Hai '-confdir ../ solr/collection1/conf' due volte. – zengr

+0

@zengr: risolto :) –

+0

È tutto? Non è necessario ricaricare i nodi o la raccolta? Non appena viene caricato, è in uso attraverso la raccolta? – johnnyboy

1

Di seguito è riportato il comando per Windows,

sarà quasi uguale in Unix abbiamo solo bisogno di cambia il percorso di Solr lib e class-path separator ; & : Perché il suo comando java dovrebbe essere eseguito anche in Unix.

java -Dlog4j.configuration="file:E:/solr-5.5.1/server/scripts/cloud-scripts/log4j.properties" -classpath .;E:/solr-5.5.1/server/solr-webapp/webapp/WEB-INF/lib/*;E:/solr-5.5.1/server/lib/ext/* org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost 192.168.42.13:2787 -confdir E:/New_Solor_Conf -confname Solor_conf 

Brevi dettagli sul comando come segue:

configurazione di log4j per la registrazione.

  • -Dlog4j.configuration = "file: E: /solr-5.5.1/server/scripts/cloud-scripts/log4j.properties percorso

Class con" org.apache .. .solr.cloud.ZkCLI" classe

assicurarsi UNIX e Windows avranno diversa: (separatore Unix); (Windows Separator)

  • -classpath. ; E: /solr-5.5.1/server/solr-webapp/webapp/WEB-INF/lib/ ; E: /solr-5.5.1/server/lib/ext/
  • -zkhost 192.168.42.13 : 2787 (host remoto e la porta dove Solr Zookeeper è in esecuzione)
  • -confdir e: (. directory locale quello che abbiamo bisogno di caricare)/New_Solor_Conf
  • -confname Solor_conf nome istanza remota.

Se non utilizzerà corretto percorso di classe si otterrà errore come:

Error: Could not find or load main class org.apache.solr.cloud.ZkCLI 

o

Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFacto 
    ry 
      at org.apache.solr.common.cloud.SolrZkClient.<clinit>(SolrZkClient.java: 
    71) 
      at org.apache.solr.cloud.ZkCLI.main(ZkCLI.java:183) 
    Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory 
      at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
      at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 

Sono in grado di caricare le mie modifiche di configurazione locali senza accedere fisicamente alla casella Solr remota. Spero che funzionerà anche per gli altri.

1

La risposta contrassegnata come corretta è errata. È necessario utilizzare Solr Collection API

Le API di raccolta Solr sono indicate per SolrCloud e la ricarica della configurazione verrà distribuita nell'intero cluster. Per quanto ne so, l'API Solr Collection è disponibile almeno da Solr 4.8.

La procedura è leggermente diversa e con queste API è possibile ricaricare la configurazione sull'intero cluster con una sola chiamata API.

Basta caricare la configurazione aggiornata con l'utilità Solr zkcli.sh. Prestare attenzione a non confondere Solr zkcli.sh con Zookeeper zkCli.sh hanno lo stesso nome ma scopo completamente diverso. Quindi, come detto uso Solr zkcli.sh:

./zkcli.sh -cmd upconfig -zkhost 127.0.0.1:2181 -collection collection1 -confname myconf -confdir path/to/solr/collection1/conf 

Poi è possibile ricaricare la configurazione con:

http://server1:8983/solr/admin/collections?action=RELOAD&name=collection1 

L'intero cluster verrà aggiornato.

+0

E qual è la differenza rispetto alla risposta accettata da Global Warrior? –

+0

@JackMiller La domanda è correlata a SolrCloud (probabilmente un cluster).Dato che il termine 'core' è usato per riferirsi a un singolo indice su un'istanza Solr e, d'altra parte, un' collection' è un indice logico completo in un cluster SolrCloud. Usando [Solr Collection API] (https://cwiki.apache.org/confluence/display/solr/Collections+API) la ricarica della configurazione verrà diffusa attraverso l'intero cluster e non solo nell'istanza corrente. Pertanto, utilizza sempre l'API di raccolta, indipendentemente dall'ampiezza dell'architettura Solr (ad esempio con più frammenti e/o repliche). – freedev

+0

Ok, finalmente lo trovo: Deve essere * collections * nell'URL invece di * core *. Sì, questa è una differenza importante ma potresti chiarire meglio dove è la differenza effettiva nella tua risposta. La prima parte * zkcli ... upconfig * è completamente identica. –

1

Questo ha funzionato per me:

bin/solr zk -upconfig -n collectionName -d pathto/Conf_directory -z localhost:2181/solr 
+0

Con isolr zk upconfig' ricaricare i core sembra non essere necessario. Non riesco a trovare alcuna documentazione su di esso però. –

Problemi correlati