什么是 Solr?
Solr 是一个高性能,采用 Java 开发,基于 Lucene 的全文搜索服务器。同时对其进行了扩展,提供了比 Lucene 更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。
它对外提供类似于 Web-service 的 API 接口。用户可以通过 HTTP 请求,向搜索引擎服务器提交一定格式的 XML 文件,生成索引;也可以通过 Http Get 操作提出查找请求,并得到 XML 格式的返回结果。
Solr 集群搭建
- 解压文件
tar -zxvf solr-7.7.3.tgz -C /opt/module/
#修改名称
cd /opt/module/
mv solr-7.7.3/ solr
- 配置环境变量
#SOLR_HOME
export SOLR_HOME=/opt/module/solr
export PATH=$PATH:$SOLR_HOME/bin
保存并退出。
- 修改配置文件
# 进入 solr 安装目录的 bin 文件夹下
cd /opt/module/solr/bin
# 编辑文件 solr.in.sh
vi solr.in.sh
修改 Zookeeper 参数:
# 其中的连接地址修改为自己的
ZK_HOST="hadoop104:2181,hadoop105:2181,hadoop106:2181"
- 文件分发与同步
将 Solr 分发到其它机器上,并同步环境变量。
scp -r solr/ hadoop105:/opt/module/
scp -r solr/ hadoop106:/opt/module/
scp -r /etc/profile hadoop105:/etc/profile
scp -r /etc/profile hadoop106:/etc/profile
环境变量分发完成后,注意在从机上使用 source /etc/profile
进行环境变量的刷新。
- 启动 Solr 集群
# 启动 solr
solr start -force
# 停止 solr
solr stop
停止 Solr 服务时如果出现:Found 1 Solr nodes running! Must either specify a port using -p or -all to stop all Solr nodes on this host. 提示,则可以使用 solr stop -p 8983
进行关闭。
由于 Solr 本身并不推荐使用 root
账号进行启动,存在安全风险,可能会导致系统被攻击或者数据泄露,如果想要强行启动可以通过添加 -force
参数进行启动,但并不推荐这种做法。
- 新建 Solr 普通用户启动
由于 Solr 的安全性问题,我们不能使用 root
账号直接启动,所以需要创建一个普通用户进行启动。
在三台机器上都执行如下步骤:
# 添加一个普通用户 solr
useradd solr
# 设置一个密码
passwd solr
# 更改 solr 安装目录的所属组
chown -R solr:solr /opt/module/solr
普通用户启动 Solr 集群
# 三台机器都执行
sudo -i -u solr solr start
sudo -i -u
表示以另一个用户的身份登录系统并打开一个新的 Shell。
第一个 solr
表示的是一个普通用户。
第二个 solr
表示的是 Solr 集群安装目录下的 /opt/module/solr/bin/solr
脚本启动文件,因为我们配置了环境变量,所以可以直接写 solr
。
启动完成后出现 Happy searching! 表示启动成功。
- 启动验证
我们可以访问 Solr 提供的 WEB UI 界面来进行验证,启动完成后,选择任意一台主机地址,访问 Solr 的默认端口 8983
即可进入,例如:192.168.0.104:8983
。
进入网页后打开 Cloud
,如果发现三台机器都已经启动,则表示 Solr 集群部署完成。
- 异常处理
无法进入 Solr 的 WEB UI 界面,可能的原因如下:
一、
$SOLR_HOME/bin/solr.in.sh
文件中的 Zookeeper 连接地址/端口是否设置正确。二、未使用普通用户启动,或者没有把 Solr 的安装文件目录的所属组切换为普通用户,但这种情况一般是可以进入 WEB 界面的,只是一些功能无法使用。
三、配置文件都正确,使用普通用户启动 Solr(如:
sudo -i -u solr solr start
),且出现了 Happy searching! 的提示,我们会认为启动成功了,但是打开网页访问时会出现如下错误界面:
显示处理请求时出错,CoreContainer 未初始化或正在关闭。
于是我就去查看了 Solr 的日志文件,在日志头部发现了如下错误:
org.apache.solr.common.SolrException: solr.xml does not exist in /opt/module/solr cannot start Solr
显示无法找到 solr.xml
文件。
solr.xml
文件是 Solr 的核心配置文件之一,定义了 Solr 实例的基本配置信息和核心配置信息,是 Solr 正常运行的必要条件之一。
Solr 默认的 solr.xml
文件位于 Solr 安装目录下的 server/solr/
目录下。
解决方法也很简单,只需要在启动的时候指定 solr.xml
的文件目录即可,如下所示:
sudo -i -u solr solr start -Dsolr.solr.home=/opt/module/solr/server/solr/
通过 -Dsolr.solr.home
参数指定 solr.xml
文件的路径即可,问题得到解决。
但是每次都添加这么一大串参数十分繁琐,我们可以在 $SOLR_HOME/bin/solr.in.sh
文件中直接指定 SOLR_HOME
参数,如下所示:
SOLR_HOME=/opt/module/solr/server/solr/
注意同步到其它机器上,然后就彻底解决该问题啦!