原因在于solr cloud 集群在启动的过程中需要加载zookeeper中的 collections core状态配置信息,因为在zk中还没有初始化,所以启动的时候发现配置信息是空的,solr连续尝试四次之后就会抛一个ZooKeeperException异常。
解决办法是,在启动命令行中添加一个-Dcollection.cOnfigName=clusterconf -Dbootstrap_cOnfdir=./solr/collection1/conf 的配置项,solr在启动的时候就会自动将目标配置文件夹下的schema solrconfig 等配置信息同步到zookeeper节点上。完整的solr启动命令如下:
接下来再说如何解决上面那个异常,其实很简单,因为在初始化的时候设置了sharedNumber的数量为2,刚开始只启动了一台服务器,在查询的时候,在zookeeper中livenode节点中只有一台,还没有满足solrcloud最小shared为2的要求。所以在进行查询的时候抛出这个异常很正常,解决办法是再启动一个solr节点,启动命令是java -DzkHost=10.232.15.46:2181,10.232.36.130:2181/baisui -Djetty.port=80 -jar start.jar, 应用启动的时候自动会到zookeeper中的节点配置信息。第二个solr节点正常启动后,可以正常进行查询操作了。
需要说明的是一个应用在初始化之后,sharedNumber数目就不能变了,但是 一个share中的副本是可以添加或者减少的。
类似这样的维护solr应用的命令使用起来倒是挺方便的,但是感觉如果是线上应用的话这样调用起来也非常危险,一个不小心就把一个collection给删除了,那就摊上大事儿了