最近领导说业务上在调研solr,让我空的时候在测试环境安装下单机版的solr。额,由于之前没用过,所以抓紧学习下solr的安装。
考虑到以后线上用的肯定是solr集群,所以我便开始在网上找各种solr集群搭建的文章。
在经历一个晚上的折腾之后,踩了很多的坑,终于将solr集群搭建完成。

一、整体拓扑说明

规划3个zookeeper做zookeeper集群

规划4个solr做solr集群

solrCloud中ZooKeeper文件管理 zookeeper solr_solr


二、准备工作

1.版本选择

亲测得到的结论是:jdk使用1.8及以上版本,tomcat使用8及以上版本,否则会各种报错。

软件

版本

zookeeper

3.4.9

solr

7.4.0

jdk

jdk-8u144-linux-x64.tar.gz

tomcat

8.0.30

2.下载软件
http://archive.apache.org/dist/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz 下载zookeeper
http://archive.apache.org/dist/lucene/solr/7.4.0/solr-7.4.0.tgz 下载solr
https://archive.apache.org/dist/tomcat/tomcat-8/v8.0.30/bin/apache-tomcat-8.0.30.tar.gz 下载tomcat
https://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html 下载jdk

三、安装zookeeper集群
zookeeper集群的安装过程详见我的另一篇博客:点我直达 根据实际情况改变IP地址即可。

四、安装solr集群
1.在四台服务器上都安装java环境

tar -zxvf jdk-8u144-linux-x64.tar.gz -C /usr/local/
ln -s /usr/local/jdk1.8.0_144 /usr/local/jdk
sed -i.ori '$a export JAVA_HOME=/usr/local/jdk\nexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH\nexport CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar' /etc/profile
source /etc/profile

#出现下面结果证明部署成功
[root@localhost opt]# java -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)

-----------------------以下2-10步操作在第一台上执行即可,执行完成后拷贝到另外3台上----------------

2.创建solr-cloud目录,用来存放tomcat和solrhome

mkdir -p /usr/local/solr-cloud

3.解压tomcat到solr-cloud目录

tar -zxvf apache-tomcat-8.0.30.tar.gz -C /usr/local/solr-cloud/
cd /usr/local/solr-cloud/
mv apache-tomcat-8.0.30 tomcat

4.tomcat优化
tomcat的优化可以参考我的另一篇博客:点我直达

5.将solr项目添加扫tomcat中

cp -rf /usr/local/src/solr-7.4.0/server/solr-webapp/webapp /usr/local/solr-cloud/tomcat/webapps/solr

6.添加tomcat中的solrhome

cp -rf /usr/local/src/solr-7.4.0/server/solr /usr/local/solr-cloud/solrhome

7.将solr中的一些jar包放到tomcat的solr项目中,这一步很重要,不然会报错的,我刚开始就是在这一顿报错,折腾了很久啊!!!

cd /usr/local/src/solr-7.4.0/server/lib
cp metrics-*.jar /usr/local/solr-cloud/tomcat/webapps/solr/WEB-INF/lib/
cd /usr/local/src/solr-7.4.0/server/lib/ext
cp *.jar /usr/local/solr-cloud/tomcat/webapps/solr/WEB-INF/lib/
#会提示目标目录有相同的包,直接输入yes覆盖就行。

8.修改solrhome配置

vim /usr/local/solr-cloud/solrhome/solr.xml

solrCloud中ZooKeeper文件管理 zookeeper solr_tomcat_02


9.修改solr配置关联solrhome

/usr/local/solr-cloud/tomcat/webapps/solr/WEB-INF/web.xml

solrCloud中ZooKeeper文件管理 zookeeper solr_zookeeper_03


10.注释掉访问限制

线上代码连接solr都是通过内网连接的,个人认为没有必要设置访问用户名和密码。

如果要设置,可以参考这个地址

solrCloud中ZooKeeper文件管理 zookeeper solr_tomcat_04


--------------------------------------------------------------------------------------------------------------------------------

11.拷贝solr-cloud目录到其他3台服务器上,并进行配置文件中的IP地址的修改。

其实就是改一下/usr/local/solr-cloud/solrhome/solr.xml 里面的host的IP地址啦。。

12.zookeeper统一管理配置 solrhome 文件

# 进入solr源码包目录
cd /usr/local/src/solr-7.4.0/server/scripts/cloud-scripts

# 执行
./zkcli.sh -zkhost 192.168.0.112:2181,192.168.0.113:2181,192.168.0.114:2181 -cmd upconfig -confdir /usr/local/solr-cloud/solrhome/configsets/sample_techproducts_configs/conf -confname myconf

# 说明
zkhost:集群ip
confdi:solrhome的conf目录
confname:上传conf文件的名称
这个命令只需要在任意一个zk节点执行即可实现zk统一管理4个solrhome配置

13.验证zk的conf是否上传成功

cd /usr/local/zookeeper-3.4.9/bin/
 ./zkCli.sh

出现下图中的表示成功了

solrCloud中ZooKeeper文件管理 zookeeper solr_tomcat_05


14.关联solr和zookeeper

在tomcat的catalina.sh中加入zookeeper集群的配置。4台都是如下配置。

JAVA_OPTS="-DzkHost=192.168.0.112:2181,192.168.0.113:2181,192.168.0.114:2181"

具体位置如下(可以通过umask搜索):

solrCloud中ZooKeeper文件管理 zookeeper solr_tomcat_06


15.启动访问

在4台服务器上都启动tomcat。

这个时候可以访问solr的集群了

solrCloud中ZooKeeper文件管理 zookeeper solr_solr_07


试试创建一个collection

solrCloud中ZooKeeper文件管理 zookeeper solr_zookeeper_08


查看云图

solrCloud中ZooKeeper文件管理 zookeeper solr_tomcat_09