macOS M1芯片centos8容器下Solr的安装教程(单机版)

一、环境

1.1 相关信息

电脑信息:M1芯片,MacOS Monterey 12.2.1

Docker信息:Docker DeskTop 4.6.0

容器镜像信息:centos:latest

系统环境:centos 8.4 ARM架构

JDK 版本:jdk-8u321-linux-aarch64

Solr 版本:solr-8.11.1.tgz

Zookeeper版本:使用solr自带3.6.2版本。

1.2 安装solr需要的软件

软件 版本 下载地址
solr solr-8.11.1.tgz https://dlcdn.apache.org/lucene/solr/8.11.1/solr-8.11.1.tgz
JDK jdk-8u321-linux-aarch64.tar.gz https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Zookeeper 3.6.2 使用Solr自带的zk

二、 下载安装

Solr 采用 Java开发,是建立在 Apache Lucene™上的流行的、快速的开源企业搜索平台。

Solr 具有高度可靠、可伸缩和容错能力,提供分布式索引、复制和负载平衡查询、自动故障转移和恢复、集中配置等功能。

2.2 下载安装JDK

安装JDK请参考macOS M1芯片centos8容器下JDK的安装这篇文章。

2.2 下载安装Solr

2.2.1 下载solr安装包物料

官网 下载所需版本的 Solr,这里我下载的版本为Solr-8.11.1

2.2.2 上传solr物料到容器

使用finalshell登陆服务器后,进入/usr/local目录,把物料上传到此目录。

1
2
#进入/usr/local目录
cd /usr/local

image-20220324144831133

2.2.3 解压solr
1
2
#解压solr
tar -zxvf solr-8.11.1.tgz
2.2.4 修改启动脚本solr.in.sh
1
2
#注意调整为你自己的solr安装目录
vim /usr/local/solr-8.11.1/bin/solr.in.sh

solr.in.sh脚本详情

1
2
3
4
5
6
7
8
#JDK的安装路径
SOLR_JAVA_HOME="/usr/local/jdk8/jdk1.8.0_321/"
#设置stack的大小。不然启动会报错
SOLR_JAVA_STACK_SIZE="-Xss512k"
#设置时区
SOLR_TIMEZONE="GMT+08"
#Solr端口,默认端口号为8983
SOLR_PORT="8983"

创建Solr日志目录

1
mkdir -p /data/md/solr/solrlog/
2.2.5 solrcloud模式启动solr
1
2
3
4
#进入solr-8.11.1的目录
cd /usr/local/solr-8.11.1
#使用solrcloud模式启动solr
bin/solr start -c -force

image-20220324151005517

2.3 检测

2.3.1查看状态
1
2
#查看solr状态
bin/solr status

image-20220325102017713

2.3.2查看日志
1
cat /usr/local/solr-8.11.1/server/logs/solr-8983-console.log

三、solr测试

打开solr管理界面:宿主机ip+端口。

image-20220325105515737

3.1创建collection

3.1.1 使用页面创建collection

进入Solr Admin后台,点击Collections菜单,进入Collection添加页面:

image-20220325150255552

点击Add Collection按钮,输入配置,点击保存,完成Collection的创建。

image-20220325150400917

3.1.1 使用命令创建collection
1
2
3
4
#创建集合
bin/solr create -c mycollection -force
#创建集合帮助
bin/solr create_collection -help

四、 问题汇总

4.1 solr 启动报错

问题描述:solr启动报错

1
2
3
Error: VM option 'UseG1GC' is experimental and must be enabled via -XX:+UnlockExperimentalVMOptions.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

问题原因:报错VM option ‘UseG1GC’ is experimental and must be enabled via -XX:+UnlockExperimentalVMOptions

解决方案:换个版本的JDK,JDK8或以上。或者把/usr/local/solr-8.11.1/bin/solr文件中把GC_TUNE变量中有关UseG1GC删除掉。

删除前:

image-20220325101740273

删除后:

image-20220325101814835

4.2 solr首页无法打开

问题描述:solr无法打开首页

image-20220325104706336

问题原因:centos容器之前只映射了5022端口。

解决方案:基于之前的镜像,重新制作镜像。在重新创建容器的时候,增加端口映射。

1
2
3
4
5
6
#制作镜像 格式:docker commit -m "镜像描述"   -a "制作者"  容器名 镜像名
docker commit -m "test make dockerimage" -a"mike" centos8 centos8:solr
#重新创建容器
docker run -d -p 5004:22 -p 8983:8983 -p 2128:2128 --name centos8solr --privileged=true centos8:solr /usr/sbin/init
#进入容器
docker exec -it centos8solr bash

image-20220325105133087

image-20220325105145784

4.3 solr 启动报错

问题描述:打开首页和查看solr状态时提示404.

image-20220325112215891

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
ERROR: Failed to get system information from http://localhost:8983/solr due to: org.apache.solr.common.SolrException: Parse error : <html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/>
<title>Error 404 javax.servlet.UnavailableException: Error processing the request. CoreContainer is either not initialized or shutting down.</title>
</head>
<body><h2>HTTP ERROR 404 javax.servlet.UnavailableException: Error processing the request. CoreContainer is either not initialized or shutting down.</h2>
<table>
<tr><th>URI:</th><td>/solr/admin/info/system</td></tr>
<tr><th>STATUS:</th><td>404</td></tr>
<tr><th>MESSAGE:</th><td>javax.servlet.UnavailableException: Error processing the request. CoreContainer is either not initialized or shutting down.</td></tr>
<tr><th>SERVLET:</th><td>default</td></tr>
<tr><th>CAUSED BY:</th><td>javax.servlet.ServletException: javax.servlet.UnavailableException: Error processing the request. CoreContainer is either not initialized or shutting down.</td></tr>
<tr><th>CAUSED BY:</th><td>javax.servlet.UnavailableException: Error processing the request. CoreContainer is either not initialized or shutting down.</td></tr>
</table>
<h3>Caused by:</h3><pre>javax.servlet.ServletException: javax.servlet.UnavailableException: Error processing the request. CoreContainer is either not initialized or shutting down.
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:162)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:322)
at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:763)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.server.Server.handle(Server.java:516)
at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:400)
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:645)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:392)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
at java.lang.Thread.run(Thread.java:748)
Caused by: javax.servlet.UnavailableException: Error processing the request. CoreContainer is either not initialized or shutting down.

问题原因:zookeeper没有启动

解决方案:检查zk配置文件,查看zk是否启动。

4.4 bin/solr stop -all 无法关闭solr应用

问题描述:bin/solr stop -all 无法关闭solr应用

问题原因:使用bin/solr stop -all命令无法关闭solr自定义端口。因为是关闭的默认端口8983

解决方案:指定端口关闭

1
2
#关闭指定端口
bin/solr stop -p 5002