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

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.


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


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.


This worked for me :

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