同一台机器部署多个Tomcat、Solr与Tomcat整合的部分配置
写在前面
由于本人的机子上已经安装过Tomcat 9.0.10,为了不影响已有的Tomcat服务器,所以决定再安装一个Tomcat用于部署Solr,所用的Tomcat服务器和Solr索引库目前都是最新版的,也就是Tomcat 9.0.11和Solr 7.4.0。
环境准备
Tomcat服务器:Tomcat 9.0.11
Solr索引库:Solr 7.4.0
Tomcat和Solr可自行到相应的官网上下载,版本根据自己的需要选择,下载完成后解压如下:
配置多个Tomcat
配置环境变量
Location:我的电脑 >> 计算机 >> 属性 >> 高级系统设置 >> 环境变量 >> 系统变量
1 | CATALINA_HOME |
由于我已经配置了一个Tomcat
,所以在下面的配置中,所有涉及的环境变量我都会配置为Xxx3
的形式,即:
1 | CATALINA_HOME3 |
配置CATALINA_HOME3,默认情况下是CATALINA_HOME
配置Path,新增%CATALINA_HOME3%\bin
配置CATALINA_BASE3,默认情况下是CATALINA_BASE3
配置TOMCAT_HOME3,默认情况下是TOMCAT_HOME
1 | 1、修改catalina.bat文件 |
修改server.xml
修改Tomcat的核心配置文件,主要是修改默认的访问端口、JVM启动端口以及shutdown端口
1 | - <Server port="8005" shutdown="SHUTDOWN"> |
测试
整合Solr
Solr的目录结构
导入demo
将F:\Solr And Tomcat\solr-7.4.0\server\solr-webapp
下的webapp
文件夹复制到F:\Solr And Tomcat\apache-tomcat-9.0.11\webapps
目录下,重命名为solr(名字可自定义)
导入jar包
复制F:\Solr And Tomcat\solr-7.4.0\server\lib\ext
下的所有jar包到F:\Solr And Tomcat\apache-tomcat-9.0.11\webapps\solr\WEB-INF\lib
下,如果jar包重复可选择跳过或者覆盖;复制F:\Solr And Tomcat\solr-7.4.0\server\lib
下所有metrics
开头的jar包以及gmetric4j-1.0.7.jar
到F:\Solr And Tomcat\apache-tomcat-9.0.11\webapps\solr\WEB-INF\lib
下。
创建solrhome
创建solrhome
文件夹,位置自定义,复制F:\Solr And Tomcat\solr-7.4.0\server\solr
下的所有文件到新建的solrhome
文件夹中
修改F:\Solr And Tomcat\apache-tomcat-9.0.11\webapps\solr\WEB-INF
路径下的web.xml
文件
1 | <!-- |
1 | <env-entry> |
1 | <!-- |
修改solrconfig.xml
复制F:\Solr And Tomcat\solr-7.4.0
目录下的dist
文件夹和contrib
文件夹到F:\Solr And Tomcat\solrhome
目录下,这样做的主要因为Solr加载第三方插件的路径配置是这样的:
1 | <lib dir="${solr.install.dir:../../../..}/contrib/extraction/lib" regex=".*\.jar" /> |
这个配置文件默认是在F:\Solr And Tomcat\solr-7.4.0\server\solr\configsets\_default\conf
目录下,由于在配置solrhome的时候我们将原来的配置文件拷贝到了solrhome文件夹中,所以要修改原来的路径配置,如果dist
、contrib
与新建的core(collection)位于同一目录下,用一个..
即可。
测试整合
运行startup.bat
脚本启动Tomcat,访问:http://localhost:8083/solr/index.html
导入数据
引入jar包以及资源文件
由于用到了IKAnalyzer分词器
,所以需要导入相应的jar包(ikanalyzer-2012_u6.jar),包下载地址:http://mvnrepository.com/artifact/com.janeluo/ikanalyzer/2012_u6,将ikanalyzer-2012_u6.jar
分别复制到~\solrhome\contrib\extraction\lib
和~\apache-tomcat-9.0.11\webapps\solr\WEB-INF\lib
目录下。并且将以下三个jar包复制到~\solrhome\collection2\lib
目录下。
1 | // 数据库驱动包 |
IKAnalyzer分词器的作者在几年前就已经停止维护这个项目了,这就意味如果你使用的是新版本Solr可能会存在兼容性问题,问题我在文章末尾已经提到。当然,如果你对IKAnalyzer分词器这个项目感兴趣,你可以尝试着去改进它,或者使用别人已经改进过的版本。
导入jar包后还需要将IKAnalyzer分词器相关的资源文件拷贝到~\apache-tomcat-9.0.11\webapps\solr\WEB-INF\classes
目录下,如果没有classes目录则需要自己手动创建一个。
1 | ext.dic |
修改solrconfig.xml文件
在solrconfig.xml添加以下配置,db-data-config.xml
文件名可自定义,但必须与solrconfig.xml
位于同级目录下
1 | <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> |
修改managed-schema文件
修改managed-schema文件,添加如下配置
1 | <!-- IkAnalyzer --> |
修改db-data-config.xml文件
修改db-data-config.xml文件,添加如下配置
1 | <dataConfig> |
测试
通过观察发现,数据并没有导入成功,无法成功创建索引,一直显示:Requests: 1 , Fetched: 3,096 774/s, Skipped: 0 , Processed: 0
,自己也在网上查找了很久,尝试了很多方法但都没能解决这个问题,查看日志,也没发现有异常信息,自己也一度认为是因为最新版本的原因,导致数据始终无法成功导入,过了一天,再次尝试导入数据的时候,控制台居然报了个错:solr Exception in thread "Thread-7" java.lang.AbstractMethodError
咋一看应该是分词器的问题,初步猜测应该是IKAnalyzer分词器的版本问题,因为IKAnalyzer已经相当长时间都没有更新的,随后在网上找到了一个据说是能够兼容6.x
版本的Lucene的IKAnalyzer分词器,Github 地址,自己download下来,导入了lucene-core-7.4.0.jar
和lucene-queryparser-7.4.0.jar
两个jar
包后重新打成Jar
包,替换掉原来的ikanalyzer-2012_u6.jar
,之后重新启动Tomcat,导入数据成功。
效果:
查询数据: