MacOS下Solr 7.3.0搭建Cloud服务时HttpClusterStateProvider初始化失败
解决CloudSolrClient初始化时的URI主机名错误问题
从你的错误日志来看,核心问题是你传入的zkHost是Solr的HTTP管理端口(localhost:8983),但CloudSolrClient需要连接的是ZooKeeper集群的地址,这直接导致了URI格式错误和连接失败。下面是具体的排查和解决步骤:
1. 确认ZooKeeper的正确地址
Solr 7.3.0默认会启动内置的ZooKeeper,默认端口是2181,而不是Solr Admin UI的8983端口。你可以通过两种方式确认ZK地址:
- 查看Solr启动日志,里面会有类似
Starting ZooKeeper on port 2181的记录; - 打开Solr Admin UI的「Cloud」页面,顶部会显示ZooKeeper的连接地址。
2. 修正Scala代码中的zkHost参数
把原来传入的localhost:8983替换为ZK的地址(通常是localhost:2181),同时注意SolrJ 7.x版本中CloudSolrClient.Builder需要Java的List类型参数,你可以用JavaConverters把Scala集合转换过去:
import org.apache.solr.client.solrj.impl.CloudSolrClient import scala.collection.JavaConverters._ object CloudSolRServerBuilder { def build(zkHost: String): CloudSolrClient = { // 单节点ZK直接传入List(zkHost).asJava,多节点用逗号分隔后拆分 new CloudSolrClient.Builder(List(zkHost).asJava).build() } }
调用时传入正确的ZK地址:
val solrClient = CloudSolRServerBuilder.build("localhost:2181")
3. 验证ZooKeeper连接可用性
使用Solr自带的ZK客户端工具验证连接:
# 进入Solr安装目录下的ZK脚本文件夹 cd /path/to/solr-7.3.0/server/scripts/cloud-scripts # 连接ZK ./zkCli.sh -server localhost:2181
如果能成功进入ZK命令行,说明ZK服务正常运行。
4. 检查依赖版本一致性
确保你的项目中SolrJ的依赖版本和Solr服务器版本完全一致(都是7.3.0),版本不匹配也可能导致这类连接异常。比如在build.sbt中:
libraryDependencies += "org.apache.solr" % "solr-solrj" % "7.3.0"
额外注意事项
- 不要给zkHost添加
http://前缀,只需要host:port的格式; - 如果是多节点ZK集群,用逗号分隔多个地址,比如
zk1:2181,zk2:2181,zk3:2181; - 确保Solr Cloud集群已经完成初始化,在Admin UI的Cloud页面能看到正常的集群状态和live节点。
内容的提问来源于stack exchange,提问作者Jill Clover
相关产品推荐
相关产品推荐

