项目实训 : Solr8 在linux服务器的部署与所遇到的问题记录


title: Solr8 在linux服务器的部署与所遇到的问题记录
tags: [Sdudoc, Tomcat, Solr, Liunx, Sdudoc]
categories: 技术


Tomcat配置

  1. 在 linux 的 /usr/local 目录下新建一个 solr 目录

  2. 下载最新的Tomcat到 Linux 系统的 /usr/local/solr下,下载链接:tomcat

    [root@localhost solr]# ls
    apache-tomcat-8.5.75.tar.gz
    

    然后解压压缩包

    tar -zxvf apache-tomcat-8.5.75.tar.gz 
    

    将解压后生成的文件夹名称改为 tomcat-solr 以方便之后辨识

    mv apache-tomcat-8.5.75 tomcat-solr
    
  3. 转到 solr/tomcat-solr/conf 目录下,修改 server.xml 配置文件

    cd tomcat-solr/conf/
    vi server.xml
    

    为了防止端口冲突,我们要更改一些内容:

    • 将 Connector 的端口改为 8088

      <Connector port="8088" protocol="HTTP/1.1"
                     connectionTimeout="20000"
                     redirectPort="8443" />
      
      <Connector executor="tomcatThreadPool"
                     port="8088" protocol="HTTP/1.1"
                     connectionTimeout="20000"
                     redirectPort="8443" />
      
  4. 执行 bin 目录下的 startup.sh

    sh bin/shartup.sh
    ----
    Using CATALINA_BASE:   /usr/local/solr/tomcat-solr
    Using CATALINA_HOME:   /usr/local/solr/tomcat-solr
    Using CATALINA_TMPDIR: /usr/local/solr/tomcat-solr/temp
    Using JRE_HOME:        /usr/local/java
    Using CLASSPATH:       /usr/local/solr/tomcat-solr/bin/bootstrap.jar:/usr/local/solr/tomcat-solr/bin/tomcat-juli.jar
    Using CATALINA_OPTS:   
    Tomcat started.
    ----
    
  5. 查看一下日志输出

    tail -f logs/catalina.out
    ----
    25-Jan-2022 21:58:43.916 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/solr/tomcat-solr/webapps/host-manager]
    25-Jan-2022 21:58:43.950 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/solr/tomcat-solr/webapps/host-manager] has finished in [35] ms
    25-Jan-2022 21:58:43.951 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/solr/tomcat-solr/webapps/ROOT]
    25-Jan-2022 21:58:43.968 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/solr/tomcat-solr/webapps/ROOT] has finished in [17] ms
    25-Jan-2022 21:58:43.968 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/solr/tomcat-solr/webapps/examples]
    25-Jan-2022 21:58:44.237 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/solr/tomcat-solr/webapps/examples] has finished in [269] ms
    25-Jan-2022 21:58:44.238 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/solr/tomcat-solr/webapps/manager]
    25-Jan-2022 21:58:44.259 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/solr/tomcat-solr/webapps/manager] has finished in [22] ms
    25-Jan-2022 21:58:44.264 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8088"]
    25-Jan-2022 21:58:44.285 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [690] milliseconds
    ----
    

尝试连接对应端口发现出现了io timeout情况,解决方案在附录中写出

Solr 配置

solr下载地址:下载地址

本来想着利用tomcat来运行solr,但是我惊奇的发现solr的新版本中竟然没有了war包,查看官方文档,可以发现取消了原有的war包:

Solr is a server

Solr is intended to be a server not a Java web application, similar to mysql or the Apache web server. When Solr was first created, designing it as a web application was a convenient choice, to avoid writing a lot of tricky code to build a network layer. These days, this design decision has become a limiting factor.

但是我们配了半天的tomcat也不能白配,于是我们可以将解压后的压缩包中的 server/solr-webapp/webapp 文佳佳复制到 /usr/local/solr/tomcat-solr/webapps/solr下

cp -r server/solr-webapp/webapp /usr/local/solr/tomcat-solr/webapps/solr

然后将一些jar包复制到 WEB-INF/lib下

[root@localhost solr-8.11.0]# cp server/lib/ext /usr/local/solr/tomcat-solr/webapps/solr/WEB-INF/lib/

server/lib/metrics* 开头的5个jar复制到 /usr/local/solr/tomcat/webapps/solr/WEB-INF/lib/下

[root@localhost lib]# cp metr* /usr/local/solr/tomcat-solr/webapps/solr/WEB-INF/lib/

将 server/resources/ 下的 log4j.properties (solr8中是log4j2-console.xml 和 log4j2.xml),添加到刚才的 solr 工程中,记得在WEB-INF下创建一个classes目录

[root@localhost resources]# mkdir /usr/local/solr/tomcat-solr/webapps/solr/WEB-INF/classes
[root@localhost resources]# cp log4j* /usr/local/solr/tomcat-solr/webapps/solr/WEB-INF/classes/

然后注释掉的标签和其内容

将server/solr 目录复制到 /use/local/solr 下,并重命名为solrhome

[root@localhost server]# cp -r solr /usr/local/solr/solrhome

然后就是关联solr和solrhome

修改Tomcat中 webapps/solr/WEB-INF下的web.xml

然后我们惊讶地发现,没有关于重定向 solrhome 的地方

我们先将下面内容注释掉:

<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即可访问solr服务。

solr8的用户只需要加上这段即可,solr7直接修改“你的solrhome位置”部分为solrhome路径:

  <env-entry>
    <env-entry-name>solr/home</env-entry-name>
    <env-entry-value>“你的solrhome位置”</env-entry-value>
    <env-entry-type>java.lang.String</env-entry-type>
  </env-entry>

注意:Tomcat10启动时会报ClassCastException,那是由于Tomcat把Filter修改了来源包,建议用Tomcat8

不过为了保险起见,如果想用原生配置的可以查看官方文档:官方文档

附录

问题1:无法连接到linux服务器的8088端口

观察到上面的logs可以发现服务器的tomcat实际上已经启动成功了,并且占用的是8088端口,但是当我用浏览器访问该端口时,却发现io timeout。初步判断是防火墙的问题。

我们先尝试ping一下服务器:

ping 211.87.232.198

正在 Ping 211.87.232.198 具有 32 字节的数据:
来自 211.87.232.198 的回复: 字节=32 时间=37ms TTL=60
来自 211.87.232.198 的回复: 字节=32 时间=41ms TTL=60
来自 211.87.232.198 的回复: 字节=32 时间=40ms TTL=60
来自 211.87.232.198 的回复: 字节=32 时间=41ms TTL=60

211.87.232.198 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 37ms,最长 = 41ms,平均 = 39ms

可以发现网络连接上是没有问题的,然后我们再使用 telnet 测试8088端口:

telnet 211.87.232.198 8088
正在连接211.87.232.198…无法打开到主机的连接。 在端口 8088: 连接失败

该端口没有回应,说明可能是防火墙的问题。

这时候还可能会出现一种情况,即 tcp 的连接失败,之前遇到过类似的情况:

ping得通说明ICMP是没有问题的,所以问题应该出在TCP上

失败的原因是因为服务器的tcp_timestamps=1,在进行tcp连接时会使用时间戳作为TCP头中的一项,在建立连接的过程中这个时间戳必须是递增的,但是如果经过了NAT协议,NAT协议会改变IP地址和TCP段的端口,映射到网关自己的一个端口号上,如果这个映射的端口号曾经被使用过,那么可能会出现时间戳紊乱,导致TCP连接建立失败。

只需要在 /etc/sysctl.conf 中添加一项

net.ipv4.tcp_timestamp=0

然后再执行

sysctl -p

即可

但是这里并不是上述情况。当我使用指令

systemctl status firewalld

发现防火墙是开启的

firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2021-10-10 03:51:50 EDT; 3 months 16 days ago
Docs: man:firewalld(1)
Main PID: 580 (firewalld)
CGroup: /system.slice/firewalld.service
└─580 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid

检查端口开放情况

firewall-cmd --list-ports

8081/tcp 8080/tcp 3306/tcp

可以看出没有8088端口,于是我们添加8088端口到防火墙即可

firewall-cmd --zone=public --add-port=8088/tcp --permanent
----
success
----
firewall-cmd --reload
----
success
----

再次访问对应端口,成功。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值