SolrCloud搭建环境
一 需求
SolrCloud(solr 云)是 Solr 提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不需要使用 SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使用 SolrCloud 来满足这些需求。 SolrCloud 是基于 Solr 和Zookeeper的分布式搜索方案,它的主要思想是使用 Zookeeper作为集群的配置信息中心。
特色:1)集中式的配置信息
2)自动容错
3)近实时搜索
4)查询时自动负载均衡
二 SolrCloud结构
1物理结构
三个Solr实例( 每个实例包括两个Core),组成一个SolrCloud。
2逻辑结构
索引集合包括两个Shard(shard1和shard2),shard1和shard2分别由三个Core组成,其中一个Leader两个Replication,Leader是由zookeeper选举产生,zookeeper控制每个shard上三个Core的索引数据一致,解决高可用问题。
用户发起索引请求分别从shard1和shard2上获取,解决高并发问题。
3名词解析
① collection
Collection在SolrCloud集群中是一个逻辑意义上的完整的索引结构。它常常被划分为一个或多个Shard(分片),它们使用相同的配置信息。
比如:针对某搜索服务可以创建一个collection。
collection=shard1+shard2+....+shardX
② Core
每个Core是Solr中一个独立运行单位,提供索引和搜索服务。一个shard需要由一个Core或多个Core组成。由于collection由多个shard组成所以collection一般由多个core组成。
③ Master或Slave
Master是master-slave结构中的主结点(通常说主服务器),Slave是master-slave结构中的从结点(通常说从服务器或备服务器)。同一个Shard下master和slave存储的数据是一致的,这是为了达到高可用目的。
④ Shard
Collection的逻辑分片。每个Shard被化成一个或者多个replication,通过选举确定哪个是Leader。
4 架构分析
本文档是单机版的安装,所以采用伪集群的方式进行安装,如果是真正的生产环境,将伪集群的ip改下就可以了,步骤是一样的。如下图:
三 SolrCloud 配置(本文档为伪集群配置,生产环境下修改相应的IP地址即可)
1 安装jdk1.8(Zookeeper是Java编写的,所以启动需要有Java环境)
(一)Zookeeper集群搭建
1 复制三份zookeeper (zookeeper-3.4.12.tar.gz)
[[email protected] ~]# mkdir -p /usr/local/solr/solr-cloud
[[email protected] ~]# cp /root/zookeeper-3.4.6.tar.gz /usr/local/solr/solr-cloud/
[[email protected] ~]# cd /usr/local/solr/solr-cloud/
[[email protected] solr-cloud]# tar -zxvf zookeeper-3.4.6.tar.gz
[[email protected] solr-cloud]# mv zookeeper-3.4.6 zookeeper01
[[email protected] solr-cloud]# cp -r zookeeper01/ zookeeper02
[[email protected] solr-cloud]# cp -r zookeeper01/ zookeeper03
2 配置zookeeper
① 给每个zookeeper的解压目录创建data文件夹
[[email protected] solr-cloud]# mkdir /usr/local/solr/solr-cloud/zookeeper01/data
[[email protected] solr-cloud]# mkdir /usr/local/solr/solr-cloud/zookeeper02/data
[[email protected] solr-cloud]# mkdir /usr/local/solr/solr-cloud/zookeeper03/data
② 给每个zookeeper的解压目录创建myid文件,并分别写入1,2,3
[[email protected] ~]# touch /usr/local/solr/solr-cloud/zookeeper01/data/myid
[[email protected] ~]# echo 1 > /usr/local/solr/solr-cloud/zookeeper01/data/myid
[[email protected] ~]# touch /usr/local/solr/solr-cloud/zookeeper02/data/myid
[[email protected] ~]# echo 2 > /usr/local/solr/solr-cloud/zookeeper02/data/myid
[[email protected] ~]# touch /usr/local/solr/solr-cloud/zookeeper03/data/myid
[[email protected] ~]# echo 3 > /usr/local/solr/solr-cloud/zookeeper03/data/myid
③ 给每个zookeeper的配置文件改名
[[email protected] ~]# cd /usr/local/solr/solr-cloud/
[[email protected] solr-cloud]# mv zookeeper01/conf/zoo_sample.cfg zookeeper01/conf/zoo.cfg
[[email protected] solr-cloud]# mv zookeeper02/conf/zoo_sample.cfg zookeeper02/conf/zoo.cfg
[[email protected] solr-cloud]# mv zookeeper03/conf/zoo_sample.cfg zookeeper03/conf/zoo.cfg
④ 修改每个zookeeper的配置文件
[[email protected] solr-cloud]# vim /usr/local/solr/solr-cloud/zookeeper01/conf/zoo.cfg
[[email protected] solr-cloud]# vim /usr/local/solr/solr-cloud/zookeeper02/conf/zoo.cfg
[[email protected] solr-cloud]# vim /usr/local/solr/solr-cloud/zookeeper03/conf/zoo.cfg
修改dataDir和端口号
底部加上:
server.1=192.168.220.229:2881:3881
server.2=192.168.220.229:2882:3882
server.3=192.168.220.229:2883:3883
3启动zookeeper
[[email protected] solr-cloud] # zookeeper01/bin/zkServer.sh start
JMX enabled by default
Using config: /usr/local/solr/solr-cloud/zookeeper01/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[[email protected] solr-cloud] # zookeeper02/bin/zkServer.sh start
JMX enabled by default
Using config: /usr/local/solr/solr-cloud/zookeeper02/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[[email protected] solr-cloud] # zookeeper03/bin/zkServer.sh start
JMX enabled by default
Using config: /usr/local/solr/solr-cloud/zookeeper03/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
查看状态
[[email protected] solr-cloud] # ./zookeeper01/bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/solr/solr-cloud/zookeeper01/bin/../conf/zoo.cfg
Mode: follower
[[email protected] solr-cloud] # ./zookeeper02/bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/solr/solr-cloud/zookeeper02/bin/../conf/zoo.cfg
Mode: leader
[[email protected] solr-cloud] # ./zookeeper03/bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/solr/solr-cloud/zookeeper03/bin/../conf/zoo.cfg
Mode: follower
(二)搭建单机版solr服务
1 安装Tomcat(apache-tomcat-8.5.31.tar.gz)
2安装solr单机版
① 上传solr
solr-6.6.4.tgz
② 移动solr
[[email protected] ~]# mv solr-6.6.4.tgz /usr/local/solr/
③ 解压solr
[[email protected] ~]# cd /usr/local/solr/
[[email protected] solr]# tar -zxf solr-6.6.4.tgz
④ 把solr部署到Tomcat
1. 复制Tomcat并删除webapps内所有文件,创建ROOT目录
[[email protected] example]# cd /usr/local/solr/tomcat/webapps/
[[email protected] webapps]# rm -rf *
[[email protected] webapps]# mkdir ROOT
2. 部署solr工程到Tomcat中
在tomcat的webapps下创建个solr文件夹
[[email protected] solr]# cp /usr/local/solr/solr-6.6.4/server/solr-webapp/webapp/* .
3. 把solr-6.6.4/server/lib/ext目录下的所有的jar包,添加到solr工程中
[[email protected] ROOT]# cd /usr/local/solr/solr-6.6.4/server/lib/ext/
[[email protected] ext]# cp * /usr/local/solr/tomcat/webapps/solr/WEB-INF/lib/
⑤ 创建solrhome
solr-6.6.4/server/solr目录就是一个solrhome。复制此目录到/usr/local/solr/solrhome
[[email protected] ext]# cd /usr/local/solr/solr-6.6.4/server/
[[email protected] example]# cp -r solr /usr/local/solr/solrhome
⑥ 准备自己的业务域
根据业务需求,修改自己的solrcore的配置文件的业务域等等。如下图:
(三)solr集群搭建
solr的集群应该有4个solr服务
1把solrhome复制到solr-cloud目录下,复制四份。
[[email protected] example]# cd /usr/local/solr/
[[email protected] solr]# mkdir solr-cloud/
[[email protected] solr]# cp -r solrhome/ solr-cloud/solrhome01
[[email protected] solr]# cp -r solrhome/ solr-cloud/solrhome02
[[email protected] solr]# cp -r solrhome/ solr-cloud/solrhome03
[[email protected] solr]# cp -r solrhome/ solr-cloud/solrhome04
2安装4个Tomcat,其实就是复制4个Tomcat
[[email protected] solr]# cp -r tomcat/ solr-cloud/tomcat-solr01
[[email protected] solr]# cp -r tomcat/ solr-cloud/tomcat-solr02
[[email protected] solr]# cp -r tomcat/ solr-cloud/tomcat-solr03
[[email protected] solr]# cp -r tomcat/ solr-cloud/tomcat-solr04
3修改Tomcat端口号8081~8084
[[email protected] solr]# cd solr-cloud/
[[email protected] solr-cloud]# vim tomcat-solr01/conf/server.xml
[[email protected] solr-cloud]# vim tomcat-solr02/conf/server.xml
[[email protected] solr-cloud]# vim tomcat-solr03/conf/server.xml
[[email protected] solr-cloud]# vim tomcat-solr04/conf/server.xml
需要修改3个地方的端口号,
如下图第一个Tomcat为例,修改三个端口号8001,8081,8011,其他Tomcat类似
4修改每个Tomcat中solr服务的web.xml
4个Tomcat都要修改为对应的solrhome
[[email protected] solr-cloud]# vim tomcat-solr01/webapps/ROOT/WEB-INF/web.xml
[[email protected] solr-cloud]# vim tomcat-solr02/webapps/ROOT/WEB-INF/web.xml
[[email protected] solr-cloud]# vim tomcat-solr03/webapps/ROOT/WEB-INF/web.xml
[[email protected] solr-cloud]# vim tomcat-solr04/webapps/ROOT/WEB-INF/web.xml
修改各自的solrhome
例如/usr/local/solr/solr-cloud/solrhome01
5修改4个solrhome里面的solr.xml,设置运行的端口号
[[email protected] solr-cloud]# vim solrhome01/solr.xml
[[email protected] solr-cloud]# vim solrhome02/solr.xml
[[email protected] solr-cloud]# vim solrhome03/solr.xml
[[email protected] solr-cloud]# vim solrhome04/solr.xml
例如solrhome01需要修改为8081,其他类似
6把配置文件上传到zookeeper集群
进入/usr/local/solr/solr-6.6.4/server/scripts/cloud-scripts,执行命令
[[email protected] solr-cloud]# cd /usr/local/solr/solr-6.6.4/server/scripts/cloud-scripts
需要运行的以下命令,需要修改IP地址和修改solrcore的路径地址
[[email protected] cloud-scripts]# ./zkcli.sh -zkhost 192.168.220.229:2181,192.168.220.229:2182,192.168.220.229:2183 -cmd upconfig -confdir /usr/local/solr/solr-cloud/solrhome01/collection1/conf -confname myconf
注意:collection1为solrCore
zookeeper是做配置文件的集中管理,
以上命令的作用是把配置文件上传给zookeeper,由zookeeper管理配置文件
zookeeper把所有的solr集群的配置文件进行统一管理
7查看zookeeper中的配置文件
进入任意zookeeper,使用客户端进行查看
[[email protected] cloud-scripts]# cd /usr/local/solr/solr-cloud/zookeeper01/bin
[[email protected] bin]# ./zkCli.sh -server 192.168.220.229:2181
使用ls命令查看zookeeper配置信息
8设置zookeeper的地址给Tomcat
需要修改每个Tomcat的bin/catalina.sh文件
[[email protected] bin]# cd /usr/local/solr/solr-cloud/
[[email protected] solr-cloud]# vim tomcat-solr01/bin/catalina.sh
[[email protected] solr-cloud]# vim tomcat-solr02/bin/catalina.sh
[[email protected] solr-cloud]# vim tomcat-solr03/bin/catalina.sh
[[email protected] solr-cloud]# vim tomcat-solr04/bin/catalina.sh
例如Tomcat01,其他Tomcat都一样设置,
添加JAVA_OPTS
JAVA_OPTS="-server -Xmx10240m -Xms10240m -DzkHost=172.17.30.28:2181,172.17.30.88:2181,172.17.30.153:2181 -XX:+PrintHeapAtGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:NewRatio=3 -XX:SurvivorRatio=4 -XX:TargetSurvivorRatio=90 -XX:MaxTenuringThreshold=8 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:ConcGCThreads=4 -XX:ParallelGCThreads=4 -XX:+CMSScavengeBeforeRemark -XX:PretenureSizeThreshold=64m -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=50 -XX:CMSMaxAbortablePrecleanTime=6000 -XX:+CMSParallelRemarkEnabled -XX:+ParallelRefProcEnabled"
PS:-XX是JVM的一些调优,也很有必要
9启动所有的Tomcat
[[email protected] solr-cloud]# ./tomcat-solr01/bin/startup.sh
[[email protected] solr-cloud]# ./tomcat-solr02/bin/startup.sh
[[email protected] solr-cloud]# ./tomcat-solr03/bin/startup.sh
[[email protected] solr-cloud]# ./tomcat-solr04/bin/startup.sh
10访问solr集群
访问任意一个solr集群的节点都可以
例如http://192.168.220.229:8081/solr/index.html
效果如下:
11集群分片
如果集群中有四个solr节点创建新集群collection2,将集群分为两片,每片一个副本。
响应如下:
效果如下:
12删除原来的solrcore
http://192.168.220.229:8081/solr/admin/collections?action=DELETE&name=collection1
响应如下:
效果如下:
四 SolrCloud相关文档(重要)
1. Collection API
https://cwiki.apache.org/confluence/display/solr/Collections+API
里面还有其他相关的API,比如设置和增删tomcat副本数,我希望读者可以仔细查看文档,方便对集群的管理,这是最为集群的管理者最为基本的吧!这里就不再展开细说,希望读者可以自行整理,加深对sorlCloud的理解!
②Delete a Replica:http://localhost:8983/solr/admin/collections?action=DELETEREPLICA&collection=test2&shard=shard2&replica=core_node3
③ Delete collection :
http://localhost:8983/solr/admin/collections?action=DELETE&name=newCollection
④查看集群状态:
http://34.246.118.234:20033/solr/admin/collections?action=CLUSTERSTATUS
⑤ The RELOAD action is used when you have changed a configuration in ZooKeeper.
http://localhost:8983/solr/admin/collections?action=RELOAD&name=newCollection
⑥将本地文件放入新的ZooKeeper文件中
./server/scripts/cloud-scripts/zkcli.sh -zkhost 127.0.0.1:9983 -cmd putfile /my_zk_file.txt /tmp/my_local_file.txt
2. Solr内置jetty 集群
https://www.cnblogs.com/1315925303zxz/p/6372004.html?utm_source=itdadao&utm_medium=referral
3.Solr6.3+tomcat8+zookeeper3.4.8+jdk搭建SolrCloud
https://blog.****.net/lyd8483789/article/details/71123805
4详细请参见相关文档Solr的SolrCloud部署说明:
https://www.w3cschool.cn/solr_doc/solr_doc-7yp92gzc.html
五 solr的配置参数:
制定Xmx Xms 参数调整heap 的大小在solr/bin/solr.in.sh文件中,修改相应参数,如:
SOLR_HEAP="512m"
SOLR_JAVA_MEM="-Xms512m -Xmx512m"