Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Reloading SolrCloud configuration (stored on Zookeeper) - schema.xml

I have setup a SolrCloud replication using standalone zookeeper. But now I wish to make some changes to my Schema.xml and reload the core. The problem is that when I run a single server Solr (no solrcloud) the new schema is loaded, but I do not know how to reload schema on all the replication server. I tried reloading the schema on one of the server with no desired impact. Is there a way in which I can reload my schema.xml in Solr in distributed replication setup which uses zookeeper.

like image 305
Global Warrior Avatar asked Apr 05 '13 09:04

Global Warrior


Video Answer


4 Answers

Just found the solution we need to push the changed configuration to zookeeper ensemble.

Just use

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

zkcli.sh is present under example/cloud-scripts

like image 67
Global Warrior Avatar answered Oct 13 '22 22:10

Global Warrior


The answer marked as correct is wrong. You have to use Solr Collection API

Once you have uploaded the new collection (index) configuration with the Solr zkcli.sh utility the configuration will not be reloaded automatically.

Solr Collection API are indicated for SolrCloud and the configuration reload will be spread in the whole cluster. As far as I know Solr Collection API are available at least from Solr 4.8.

The procedure is slightly different and with these API you can reload the configuration on the entire Cluster with only one API call.

Just upload your updated configuration with the Solr zkcli.sh utility. Pay attention to do not confuse Solr zkcli.sh with Zookeeper zkCli.sh they have quite the same name but completely different purpose.

So as said use Solr zkcli.sh (At time of writing is in the directory server/scripts/cloud-scripts):

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

Then you can reload the configuration of collection1 with:

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

The entire cluster will be updated.

like image 34
freedev Avatar answered Oct 14 '22 00:10

freedev


This worked for me :

    bin/solr zk -upconfig -n collectionName -d pathto/Conf_directory -z localhost:2181/solr
like image 2
Tarun Reddy Avatar answered Oct 13 '22 22:10

Tarun Reddy


Below is the Command for Windows,

IT will be almost same in Unix we just need to change the path of Solr lib and class-path separator ; & : Because its java command so should run in Unix also.

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

Brief details about command as follows:

Configuration of log4j for logging.

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

Class path to run "org.apache.solr.cloud.ZkCLI". class.

make sure UNIX and Windows will have different : (Unix seperator) ;(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 (Remote Host and port where Solr Zookeeper is running)
  • -confdir E:/New_Solor_Conf (Local directory what we need to upload.)
  • -confname Solor_conf Remote instance name.

If you will not use correct class path you will get error like :

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

or

 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)

I am able to upload my local configuration changes without physically login to remote Solr box. Hope it will work for other also.

like image 1
Gautam Avatar answered Oct 13 '22 23:10

Gautam