新版本 solr(8.x+)已内置 jetty,无需 tomcat;老版本(如4.x–7.x)才需手动集成tomcat。当前生产环境强烈建议用8.11.x或9.x,避免踩tomcat兼容、类加载、jar冲突等历史坑。

直接说结论:新版本 Solr(8.x+)已内置 Jetty,无需 Tomcat;老版本(如 4.x–7.x)才需手动集成 Tomcat。当前生产环境强烈建议用 8.11.x 或 9.x,避免踩 Tomcat 兼容、类加载、jar 冲突等历史坑。
solr start 启动失败:常见报错和 Java 版本硬要求
运行 bin/solr start 报错 “Unsupported Java version” 或直接退出,基本是 Java 不匹配:
- Solr 8.11.x 要求 Java 11+(
java -version输出必须含11.或更高,不能是 1.8) - Solr 9.x 强制 Java 17+,用 OpenJDK 更稳妥(CentOS/RHEL 用
sudo yum install -y java-17-openjdk-devel) - 别信“Java 8 能跑旧版 Solr 就行”——即使 Solr 7.7.3 跑通,后续加 IK 分词、Prometheus 监控或 HTTPS 配置时大概率因类加载顺序崩在
ClassNotFoundException
验证方式:bin/solr start -V(加 -V 看详细启动日志),重点扫一眼第一行 “Using Java version:”。不对就换 JDK,别改 SOLR_JAVA_HOME 绕。
solr home 和 server/solr 目录关系容易搞反
很多人以为 solr home 是自己随便指定的路径,其实 Solr 8+ 默认把 server/solr 当作 root solr home —— 它不是配置项,是代码级约定路径。
- 新建 collection 时,
bin/solr create -c mycore会自动在server/solr/mycore/下建目录、放conf和data - 若手动改过
SOLR_HOME环境变量,或用-s /path/to/home指定,那所有 core 必须在该路径下,且server/solr就失效了 - 错误示范:
export SOLR_HOME=/opt/my-solr-home后没同步复制server/solr/configsets过去 → 创建 core 时提示 “Can’t find configset ‘_default’”
建议:除非有强隔离需求,否则别动 SOLR_HOME,让 Solr 自己管 server/solr。
创建 core 失败:solrconfig.xml 找不到的真正原因
点 Web UI 的 “Add Core” 或执行 bin/solr create 报 Can't find resource 'solrconfig.xml',不是文件丢了,而是路径没对齐:
- 确认
server/solr/mycore/conf/下存在solrconfig.xml、schema.xml(Solr 9 已弃用schema.xml,改用managed-schema) - 如果用的是自定义 configset(比如从
configsets/_default复制修改过),创建时得显式指定:bin/solr create -c mycore -n my_custom_config - 别手贱删
server/solr/mycore/core.properties—— 这个文件里configSet=xxx是 Solr runtime 查 config 的唯一依据,删了就认不出自己的配置
临时救急命令:bin/solr zk cp file:///path/to/conf zk://localhost:9983/configs/myconf -r(ZooKeeper 模式下上传配置,但单机不用碰 ZooKeeper)。
端口被占、无法访问 localhost:8983?检查后台进程和绑定地址
浏览器打不开 http://localhost:8983/solr,先别 reload 页面:
- 查进程:
ps aux | grep solr,看有没有多个java -server -Dsolr.solr.home=...在跑(bin/solr stop -all清干净再试) - 查端口:
lsof -i :8983或netstat -tuln | grep 8983,确认是 Solr 自己占的,不是其他服务(比如旧版 Elasticsearch) - 启动时加
-h 0.0.0.0才能外网访问:bin/solr start -p 8983 -h 0.0.0.0;默认只绑127.0.0.1,本机 curl 能通,远程连不上 - 防火墙记得开端口:
sudo firewall-cmd --permanent --add-port=8983/tcp && sudo firewall-cmd --reload(CentOS/RHEL)
最常忽略的一点:Solr 启动后,server/logs/solr.log 里第一行 “Started ServerConnector@xxxx{HTTP/1.1, (http/1.1)}” 才算真跑起来,光看到 “Started Solr server on port 8983” 不代表 Jetty 已 ready。











