solr 7.6 安装部署与遇到的问题
目录
Solr 是基于开放标准的,它是高度可扩展的。Solr 查询是简单的 HTTP 请求 URL,响应是一个结构化文档:主要是 JSON,但也可以是 XML、CSV 或其他格式。这意味着各种各样的客户端将能够使用 Solr,从其他 Web 应用程序到浏览器客户端、丰富的客户端应用程序和移动设备。任何能够使用 HTTP 的平台都可以与 Solr 对话。
学习solr 除了官网文档我们还可以看这边的中午文档:https://www.w3cschool.cn/solr_doc/solr_doc-ltzn2fm4.html
solr 默认是有web容器的 jetty ,我们也可以将它存放在tomcat 里面。
直接使用默认的话是可以直接启动的,要使用tomcat 的话就比较麻烦点了。
由于tomcat 在企业应用较多,相对jetty 更为熟悉。所以我们这里使用的是tomcat进行搭建。
jetty 与tomcat 的对比
安装 solr
下载solr(7.6版本) :
cd /opt wget http://mirrors.shu.edu.cn/apache/lucene/solr/7.6.0/solr-7.6.0.tgz
tar -xzf solr-7.6.0.tgz
配置solr 到tomcat(关键)
将solr 的webapp文件复制到tomcat的webapps目录下并命名为solr
cp -r /opt/solr-7.6.0/server/solr-webapp /opt/tomcat-solr/webapps/solr
配置依赖包
将solr下 /ext 文件夹中 所有的jar 包复制到 tomcat 里的solr 目录下的WEB-INF/lib 下
cp -r /opt/solr-7.6.0/server/lib/ext/ /opt/tomcat-solr/webapps/solr/WEB-INF/lib/
将solr下 server/lib/metrics开头的jar包复制到 tomcat里的solr 目录下的WEB-INF/lib 下
cp -r /opt/solr-7.6.0/server/lib/metrics*.jar /opt/tomcat-solr/webapps/solr/WEB-INF/lib/
创建tomcat solr 的 classes 文件
mkdir /opt/tomcat-solr/webapps/solr/WEB-INF/classes
复制 jetty-logging.properties,log4j2.xml 到 classes 文件夹下
cp /opt/solr-7.6.0/server/resources/jetty-logging.properties /opt/tomcat-solr/webapps/solr/WEB-INF/classes
cp /opt/solr-7.6.0/server/resources/log4j2.xml /opt/tomcat-solr/webapps/solr/WEB-INF/classes
创建 solr 的core 的主目录(也就是存放core的位置)
cp -r /opt/solr-7.6.0/server/solr /opt/solrhome
修改配置文件指定solr的home
vim /opt/tomcat-solr/webapps/solr/WEB-INF/web.xml
添加以下内容:(==注意第三行的值要替换成你们solr的home的绝对路径==)
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/opt/solrhome</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
添加位置:
解决限制资源访问
如果我们按照上面的配置好了,并启动好了tomcat,那么我们直接去访问我们的solr 会发现这个错:
HTTP Status 403 - Access to the requested resource has been denied,拒绝我们的访问资源请求。
解决办法:
注释
<security-constraint>
<web-resource-collection>
<web-resource-name>Disable TRACE</web-resource-name>
<url-pattern>/</url-pattern>
<http-method>TRACE</http-method>
</web-resource-collection>
<auth-constraint/>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>Enable everything but TRACE</web-resource-name>
<url-pattern>/</url-pattern>
<http-method-omission>TRACE</http-method-omission>
</web-resource-collection>
</security-constraint>
更改图片位置
然后启动tomcat ,我们访问:http://ip:port/solr/index.html
启动成功图示:
遇到的问题以及解决办法:
错误1
错误内容
Unable to resolve canonical hostname for local host,​ possible DNS misconfiguration. Set the 'solr.dns.prevent.reverse.lookup' sysprop to true on startup to prevent future lookups if DNS can not be fixed.
问题原因:
通过解析hostname 找不到对应的本地主机。原因是我更改了hostname,但是我没有更改/etc/hosts 文件,你可以直接 ping 下主机名,看看是否能正常解析到127.0.0.1 。我的是不可以,所以这里报解析错误。
解决办法:
编辑 /etc/hosts文件
在 127.0.0.1 和::1 后面添加 你的新主机名
示例: 我的主机名是ngrok
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ngrok
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 ngrok
创建core
创建core 目录
我这里的solr 的home目录是 /opt/solrhome
mkdir /opt/solrhome/test1
添加配置文件
将配置文件复制到 test1 目录下
cp /opt/solrhome/configsets/_default/conf/ /opt/solrhome/test1/
添加data目录
用于存放数据
mkdir /opt/solrhome/test1/data/
添加core.properties 文件
name=test1 ,test1值换成你们core的名称。
echo "name=test1" >/opt/solrhome/test1/core.properties
我们重新启动就可以在 core 看到我们新加的目录名称了。
遇到的问题以及解决办法:
错误一
错误内容
2019/1/9 上午11:01:16
WARN false x:ljf_dev SolrConfig Couldn't add files from /opt/solrhome/ljf_dev/../../../../contrib/extraction/lib filtered by .*\.jar to classpath: /opt/solrhome/ljf_dev/../../../../contrib/extraction/lib
2019/1/9 上午11:01:16
WARN falsex:ljf_dev SolrConfig Couldn't add files from /opt/solrhome/ljf_dev/../../../../dist filtered by solr-cell-\d.*\.jar to classpath: /opt/solrhome/ljf_dev/../../../../dist
错误原因
上面的错误是说加载不到那些jar包 ,上面的这些jar包还在我们解压的文件里面,它肯定是找不到,我们先找到我们这个配置文件,然后修改它寻找的路径。
配置文件是 core 目录下的 conf 里的 solrconfig.xml
我们可以看到默认的配置路径是: 这个路径是solr的安装路径,我们可以更改成绝对路径
<lib dir="${solr.install.dir:../../../..}/contrib/extraction/lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-cell-\d.*\.jar" />