我已经使用独立的 zookeeper 设置了 SolrCloud 复制。但现在我希望对我的 Schema.xml 进行一些更改并重新加载核心。问题是,当我运行单个服务器 Solr(没有 solrcloud)时,会加载新模式,但我不知道如何在所有复制服务器上重新加载模式。我尝试在其中一台服务器上重新加载架构,但没有任何预期的影响。有没有一种方法可以在使用 Zookeeper 的分布式复制设置中重新加载 Solr 中的 schema.xml。
4 回答
刚刚找到了我们需要将更改后的配置推送到 zookeeper ensemble 的解决方案。
只需使用
sh zkcli.sh -cmd upconfig -zkhost 127.0.0.1:2181 -collection collection1 -confname myconf -solrhome ../solr -confdir ../solr/collection1/conf
zkcli.sh 位于 example/cloud-scripts 下
标记为正确的答案是错误的。你必须使用Solr Collection API
使用 Solrzkcli.sh
实用程序上传新的集合(索引)配置后,配置将不会自动重新加载。
Solr Collection API 用于 SolrCloud,配置重新加载将分布在整个集群中。据我所知,Solr Collection API 至少从 Solr 4.8 开始可用。
该过程略有不同,使用这些 API,您只需一次 API 调用即可在整个集群上重新加载配置。
只需使用 Solrzkcli.sh
实用程序上传您的更新配置。请注意不要将 Solrzkcli.sh
与 Zookeeper混淆,zkCli.sh
它们的名称完全相同,但用途完全不同。
所以正如所说的使用 Solr zkcli.sh
(在撰写本文时在目录中server/scripts/cloud-scripts
):
./zkcli.sh -cmd upconfig -zkhost 127.0.0.1:2181 -collection collection1 -confname myconf -confdir path/to/solr/collection1/conf
然后你可以重新加载配置collection1
:
http://server1:8983/solr/admin/collections?action=RELOAD&name=collection1
整个集群将被更新。
这对我有用:
bin/solr zk -upconfig -n collectionName -d pathto/Conf_directory -z localhost:2181/solr
下面是 Windows 的命令,
它在 Unix 中几乎相同,我们只需要更改 Solr lib 的路径和类路径分隔符,; & :
因为它的 java 命令也应该在 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
关于命令的简要细节如下:
用于日志记录的 log4j 配置。
- -Dlog4j.configuration="文件:E:/solr-5.5.1/server/scripts/cloud-scripts/log4j.properties
运行“org.apache.solr.cloud.ZkCLI”的类路径。班级。
确保 UNIX 和 Windows 有不同的 : (Unix 分隔符) ;(Windows 分隔符)
- -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(Solr Zookeeper 运行的远程主机和端口)
- -confdir E:/New_Solor_Conf (我们需要上传的本地目录。)
- -confname Solor_conf 远程实例名称。
如果您不使用正确的类路径,您将收到如下错误:
Error: Could not find or load main class org.apache.solr.cloud.ZkCLI
或者
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)
我能够上传我的本地配置更改,而无需实际登录到远程 Solr 框。希望它也适用于其他人。