Solr总结(三)——Solr集群搭建,
| 前言 |
Solr是Solr提供的分布式搜索方案,当你需要大规模容错,分布式索引和检索能力时使用SolrCloud。当一个系统的索引数量少的时候是不需要使用SolrCloud的,当索引量很大,搜索请求并发很高时要使用SolrCloud来满足这些需求。
| 什么是SolrCloud |
SolrCloud是基于Solr和Zookeeper的分布式搜索方案,它的只要思想是使用Zookeeper作为集群的配置信息中心。
特色功能:
- 集中式的配置信息
- 自动容错
- 近实时搜索
- 查询时自动负载均衡
| SolrCloud集群的系统架构 |
参考架构:
本次搭建架构:
| SolrCloud集群搭建 |
一、运行环境
Solr:Solr7.1.0
Jdk:”1.8.0_144”
Tomcat:apache-tomcat-8.5.32
zookeeper:3.4.11
本次搭建搭建是3个zookeeper和4个tomcat。由于机器限制,都安装在同一台虚拟机中。
二、安装:
第一步:准备
建立solrcloud文件夹将solrhome 、zk、tomcat移入(本机之前装过单机版zk,参考)
[root@localhost ~]# cd /usr/local/
[root@localhost local]# ls
[root@localhost local]# mkdir solrcloud
[root@localhost local]# cp -r solrhome/ solrcloud/
[root@localhost local]# cp -r zookeeper solrcloud/
[root@localhost local]# ls
[root@localhost local]# cd solrcloud/
[root@localhost solrcloud]# ls
[root@localhost local]# cd solrcloud/
[root@localhost solrcloud]# ls
[root@localhost solrcloud]# cp -r ../tomcat/ .
[root@localhost solrcloud]# ls
第二步:重命名和复制
1、重命名solrhome,并将其复制成4份
[root@localhost solrcloud]# mv solrhome/ solrhome01
[root@localhost solrcloud]# cp -r solrhome01/ solrhome02
[root@localhost solrcloud]# cp -r solrhome01/ solrhome03
[root@localhost solrcloud]# cp -r solrhome01/ solrhome04
[root@localhost solrcloud]# ls
2、 重命名tomcat,并将其复制成4份
[root@localhost solrcloud]# mv tomcat/ tomcat01
[root@localhost solrcloud]# cp -r tomcat01/ tomcat02
[root@localhost solrcloud]# cp -r tomcat01/ tomcat03
[root@localhost solrcloud]# cp -r tomcat01/ tomcat04
[root@localhost solrcloud]#
[root@localhost solrcloud]# ls
3、重命名zk并将其复制成3份
[root@localhost solrcloud]# mv zookeeper/ zookeeper01
[root@localhost solrcloud]# cp -r zookeeper01/ zookeeper02
[root@localhost solrcloud]# cp -r zookeeper01/ zookeeper03
[root@localhost solrcloud]# ls
第三步:修改tomcat下server.xml和web.xml文件
1.1、修改tomcat01中conf下的server.xml文件
[root@localhost solrcloud]# cd tomcat01/apache-tomcat-8.5.32/conf/
[root@localhost conf]# ls
[root@localhost conf]# vi server.xml
2.1、修改web.xml文件 中solrhome的目录
[root@localhost conf]# cd ../webapps/solr/
[root@localhost solr]# cd WEB-INF/
[root@localhost WEB-INF]# ls
[root@localhost WEB-INF]# vi web.xml
同理:1.2、修改tomcat02下的server.xml文件
[root@localhost WEB-INF]# cd /usr/local/solrcloud/tomcat02/apache-tomcat-8.5.32/conf/
[root@localhost conf]# vi server.xml
2.2、修改tomcat02下的web.xml
[root@localhost conf]# cd ../webapps/solr/WEB-INF/
[root@localhost WEB-INF]# ls
[root@localhost WEB-INF]# vi web.xml
1.3、修改tomcat03下的server.xml文件
vi /usr/local/solrcloud/tomcat03/apache-tomcat-8.5.32/conf/server.xml
2.3、修改tomcat03下的web.xml下solrhome的路径
[root@localhost WEB-INF]# vi /usr/local/solrcloud/tomcat03/apache-tomcat-8.5.32/webapps/solr/WEB-INF/web.xml
1.4、修改tomcat04下的server.xml文件
vi /usr/local/solrcloud/tomcat04/apache-tomcat-8.5.32/conf/server.xml
这里server对应的port设为了18009,如果设成8009会和起初安装单机版的tomcat中的端口冲突。
2.4、修改tomcat04下的web.xml下solrhome的路径
[root@localhost WEB-INF]# vi /usr/local/solrcloud/tomcat04/apache-tomcat-8.5.32/webapps/solr/WEB-INF/web.xml
第四步:修改zk下的zoo.cfg文件
1.1、修改zookeeper01下conf下的zoo.cfg文件
dataDir=/usr/local/solrcloud/zookeeper01/dataDir
1.2、创建zookeeper01 dataDir下myid并填入值1
(dataDir名字可能不同)
同理:2.1、创建zookeeper02 dataDir下myid并填入值2
2.2、修改zookeeper02下conf下的zoo.cfg文件
3.1、创建zookeeper03 dataDir下myid并填入值3
[root@localhost conf]# cd ../../zookeeper03
[root@localhost zookeeper03]# cd dataDir/
[root@localhost dataDir]# rm -rf *
[root@localhost dataDir]# echo 3 >>myid
3.2、修改zookeeper03下conf下的zoo.cfg文件
[root@localhost dataDir]# cd ../conf/
[root@localhost conf]# vi zoo.cfg
第五步:让solr和zk建立联系,修改tomcat下的catalina.sh
[root@localhost conf]# cd ../../
[root@localhost solrcloud]# vi tomcat01/apache-tomcat-8.5.32/bin/catalina.sh
JAVA_OPTS="-DzkHost=192.168.91.130:12181,192.168.91.130:22181,192.168.91.130:32181"
Tomcat02/tomcat03/tomcat04中添加同样这句话
第六步:修改solrhome下的solr.xml
1、修改solrhome01下的solr.xml文件
[root@localhost solrcloud]# vi solrhome01/solr.xml
同理:修改solrhome02、03、04下的solr.xml文件
[root@localhost solrcloud]# vi solrhome02/solr.xml
[root@localhost solrcloud]# vi solrhome03/solr.xml
[root@localhost solrcloud]# vi solrhome04/solr.xml
第七步:启动4个tomcat和3个zk
1.1、编写启动zk脚本:
[root@localhost solrcloud]# vi startallzk.sh
cd zookeeper01/bin/
./zkServer.sh start
cd ../../
cd zookeeper02/bin/
./zkServer.sh start
cd ../../
cd zookeeper03/bin/
./zkServer.sh start
cd ../../
1.2、编写zk停止脚本:
[root@localhost solrcloud]# vi shutdownallzk.sh
cd zookeeper01/bin/
./zkServer.sh stop
cd ../../
cd zookeeper02/bin/
./zkServer.sh stop
cd ../../
cd zookeeper03/bin/
./zkServer.sh stop
cd ../../
1.3、给startallzk.sh 和shutdownallzk.sh添加权限
1.4、启动zk
2.1、编写tomcat的启动脚本
[root@localhost solrcloud]# vi startalltm.sh
cd tomcat01/apache-tomcat-8.5.32/bin/
./startup.sh
cd ../../..
cd tomcat02/apache-tomcat-8.5.32/bin/
./startup.sh
cd ../../..
cd tomcat03/apache-tomcat-8.5.32/bin/
./startup.sh
cd ../../..
cd tomcat04/apache-tomcat-8.5.32/bin/
./startup.sh
cd ../../..
2.2、编写tomcat的停止脚本
[root@localhost solrcloud]# vi shutdownalltm.sh
cd tomcat01/apache-tomcat-8.5.32/bin/
./shutdown.sh
cd ../../..
cd tomcat02/apache-tomcat-8.5.32/bin/
./shutdown.sh
cd ../../..
cd tomcat03/apache-tomcat-8.5.32/bin/
./shutdown.sh
cd ../../..
cd tomcat04/apache-tomcat-8.5.32/bin/
./shutdown.sh
cd ../../..
2.3、给startalltm.sh 和 shutdownalltm.sh 添加权限
[root@localhost solrcloud]# chmod u+x startalltm.sh
[root@localhost solrcloud]# chmod u+x shutdownalltm.sh
第八步:修改core.properties
如果此时直接启动tomcat会报错,首先是no coreNodeName错,接着是no shard错,所以接下来修改core.properties
//solrhome01-04下的core.properties中分别添加coreNodeName=c1至c4,shard=s1至s4,如下图
[root@localhost solrcloud]# vi solrhome01/collection1/core.properties
[root@localhost solrcloud]# vi solrhome02/collection1/core.properties
[root@localhost solrcloud]# vi solrhome03/collection1/core.properties
[root@localhost solrcloud]# vi solrhome04/collection1/core.properties
第九步:使用zk管理solr配置文件
去到这个路径,/usr/local/soft/solr-7.1.0/server/scripts/cloud-scripts执行
./zkcli.sh -zkhost 192.168.91.130:12181,192.168.91.130:22181,192.168.91.130:32181 -cmd upconfig -confdir /usr/local/solrcloud/solrhome01/collection1/conf -confname myconf
第十步:启动每一个tomcat实例。
保证zookeeper集群是启动状态
第十步:创建新的collection进行分片处理。
首先在浏览器访问任意一个solr地址,访问集群,但是会提示错误没有核心,不用管它.
比如:访问8081对应的solr
http://192.168.91.130:8081/solr/index.html
执行下面,开始创建集群。
创建新的额collection进行分片处理
http://192.168.91.130:8081/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2
指令含义:创建一个名字为collection2的核心,包含两个分片,每个分片两台机器。
最终提示seccess代表创建成功。
最后访问:http://192.168.91.130:8081/solr/index.html#/~cloud
如下图:
| 总结 |
配置回顾:
搭建的过程中重在理解每一步的意思,搭建成功过之后回过头来仔细去看搭建的过程,理解每一步都是为什么,再看就会比较清楚。搭建的方法不只一种,参考即可,有错误欢迎指出~~~