两台机器搭建Solr Cloud时创建Collection报错的原因排查与缺失步骤咨询
Solr Cloud 创建Collection失败的问题分析与修复
让我来帮你拆解这个问题——你遇到的是Solr Cloud模式下典型的路径权限配置错误,结合你的搭建步骤,下面是具体的原因分析和修复方案:
错误核心原因
从报错信息来看,Solr在尝试创建分片副本时,认为你指定的存储路径不在它允许的安全范围内(必须是SOLR_HOME或SOLR_DATA_HOME的子目录)。导致这个问题的主要原因有两个:
- 路径配置笔误:你在节点1和节点2的Solr部署步骤中,复制配置文件的目标路径写的是
solr5.x.x/server/solr/node1/solr/,但实际你用的是Solr 8.9.0,这会导致配置文件被复制到错误位置,Solr启动时无法识别正确的核心根目录。 - 未明确配置SOLR_DATA_HOME:在Cloud模式下,Solr需要明确知道核心数据的存储根目录,你只通过
-s参数指定了Solr home,但没有配置SOLR_DATA_HOME,导致Solr无法正确识别副本的合法存储路径。
遗漏的关键步骤与修复方案
1. 先修正路径笔误
把节点1和节点2中复制配置文件的目标路径,从错误的solr5.x.x/server/solr/node1/solr/改为你实际的Solr路径:solr-8.9.0/server/solr/node1/solr/,确保配置文件被复制到正确的位置。
2. 明确配置SOLR_DATA_HOME(核心修复)
这是解决路径权限问题的关键,你可以通过两种方式配置:
方式一:启动命令中直接指定
修改两个节点的Solr启动命令,添加-Dsolr.data.home参数,指定核心数据的存储目录(必须是-s指定目录的子目录):
# 节点1启动命令 ./bin/solr start -cloud -s solr-8.9.0/server/solr/node1/solr -p 8983 -z <Node1 IP>:2181 -m 2g -Dsolr.data.home=solr-8.9.0/server/solr/node1/solr/data # 节点2启动命令(注意路径是节点2本地的Solr路径) ./bin/solr start -cloud -s solr-8.9.0/server/solr/node1/solr -p 8983 -z <Node1 IP>:2181 -m 2g -Dsolr.data.home=solr-8.9.0/server/solr/node1/solr/data
方式二:修改Solr全局配置文件
在Solr的bin目录下找到solr.in.sh(Linux/Mac)或solr.in.cmd(Windows),添加如下配置:
# Linux/Mac 示例 SOLR_DATA_HOME="solr-8.9.0/server/solr/node1/solr/data"
配置完成后,重启两个Solr节点即可。
3. 确保solr.xml配置正确
检查你复制到node1/solr/下的solr.xml文件,确保<solr>标签的dataDir属性使用相对路径或变量,比如:
<solr dataDir="${solr.data.home:./data}">
这样Solr会优先使用我们配置的SOLR_DATA_HOME,如果没有配置则默认使用当前目录下的data文件夹。
4. 重新搭建的完整流程(修正后)
- 先停止所有服务:
# 停止所有Solr节点 ./bin/solr stop -all # 停止Zookeeper <ZK_HOME>/bin/zkServer.sh stop - 清理节点1和节点2中
solr-8.9.0/server/solr/node1/solr/目录下的旧数据(如果存在) - 重新复制正确的配置文件:
cp solr-8.9.0/server/solr/zoo.cfg solr-8.9.0/server/solr/solr.xml solr-8.9.0/server/solr/node1/solr/ - 重启Zookeeper,然后用修正后的命令启动两个Solr节点
- 重新上传配置到Zookeeper,再尝试创建Collection
额外提醒
- 节点2的Solr路径必须是本地路径,不能引用节点1的路径
- 单节点Zookeeper只能用于测试环境,生产环境一定要部署Zookeeper集群
- 如果你只是测试想快速跳过权限校验,可以在启动命令中添加
-Dsolr.allowPaths=*,但绝对不要在生产环境使用,这会带来严重的安全风险
内容的提问来源于stack exchange,提问作者user595014
相关产品推荐
相关产品推荐

