前言
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
[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
[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
[root@localhost solrcloud]# mv zookeeper/ zookeeper01 [root@localhost solrcloud]# cp -r zookeeper01/ zookeeper02 [root@localhost solrcloud]# cp -r zookeeper01/ zookeeper03 [root@localhost solrcloud]# ls
[root@localhost solrcloud]# cd tomcat01/apache-tomcat-8.5.32/conf/ [root@localhost conf]# ls [root@localhost conf]# vi server.xml
[root@localhost conf]# cd ../webapps/solr/ [root@localhost solr]# cd WEB-INF/ [root@localhost WEB-INF]# ls [root@localhost WEB-INF]# vi web.xml
[root@localhost WEB-INF]# cd /usr/local/solrcloud/tomcat02/apache-tomcat-8.5.32/conf/ [root@localhost conf]# vi server.xml
[root@localhost conf]# cd ../webapps/solr/WEB-INF/ [root@localhost WEB-INF]# ls [root@localhost WEB-INF]# vi web.xml
vi /usr/local/solrcloud/tomcat03/apache-tomcat-8.5.32/conf/server.xml
[root@localhost WEB-INF]# vi /usr/local/solrcloud/tomcat03/apache-tomcat-8.5.32/webapps/solr/WEB-INF/web.xml
vi /usr/local/solrcloud/tomcat04/apache-tomcat-8.5.32/conf/server.xml
这里server对应的port设为了18009,如果设成8009会和起初安装单机版的tomcat中的端口冲突。
[root@localhost WEB-INF]# vi /usr/local/solrcloud/tomcat04/apache-tomcat-8.5.32/webapps/solr/WEB-INF/web.xml
dataDir=/usr/local/solrcloud/zookeeper01/dataDir
(dataDir名字可能不同)
[root@localhost conf]# cd ../../zookeeper03 [root@localhost zookeeper03]# cd dataDir/ [root@localhost dataDir]# rm -rf * [root@localhost dataDir]# echo 3 >>myid
[root@localhost dataDir]# cd ../conf/ [root@localhost conf]# vi zoo.cfg
[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中添加同样这句话
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
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
如果此时直接启动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
去到这个路径,/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
保证zookeeper集群是启动状态
首先在浏览器访问任意一个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
如下图:
总结 |
配置回顾:
搭建的过程中重在理解每一步的意思,搭建成功过之后回过头来仔细去看搭建的过程,理解每一步都是为什么,再看就会比较清楚。搭建的方法不只一种,参考即可,有错误欢迎指出~~~