SolrCloud搭建环境

一 需求

  SolrCloud(solr 云)是 Solr 提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不需要使用 SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使用 SolrCloud 来满足这些需求。 SolrCloud 是基于 Solr 和Zookeeper的分布式搜索方案,它的主要思想是使用 Zookeeper作为集群的配置信息中心。

特色:1)集中式的配置信息

          2)自动容错

          3)近实时搜索

          4)查询时自动负载均衡 

 

 

二 SolrCloud结构

 

 

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搭建环境

 

 

三 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

SolrCloud搭建环境

 

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的配置文件的业务域等等。如下图:

 

SolrCloud搭建环境

 

(三)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类似

SolrCloud搭建环境

SolrCloud搭建环境

 

SolrCloud搭建环境

 

 

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

 

SolrCloud搭建环境

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,其他类似

SolrCloud搭建环境

 

 

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

 

注意:collection1solrCore

 

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配置信息

SolrCloud搭建环境

 

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的一些调优,也很有必要

SolrCloud搭建环境

 

 

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

效果如下:

SolrCloud搭建环境

11集群分片

如果集群中有四个solr节点创建新集群collection2,将集群分为两片,每片一个副本。

 

http://192.168.220.229:8081/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2

响应如下:

SolrCloud搭建环境

 

 

效果如下:

SolrCloud搭建环境

 

12删除原来的solrcore

 

 

 

http://192.168.220.229:8081/solr/admin/collections?action=DELETE&name=collection1

 

响应如下:

SolrCloud搭建环境

 

 

 

效果如下:

SolrCloud搭建环境

 

 

四 SolrCloud相关文档(重要

 

1. Collection API 
https://cwiki.apache.org/confluence/display/solr/Collections+API 

        里面还有其他相关的API,比如设置和增删tomcat副本数,我希望读者可以仔细查看文档,方便对集群的管理,这是最为集群的管理者最为基本的吧!这里就不再展开细说,希望读者可以自行整理,加深对sorlCloud的理解!

①Add Replica:http://localhost:8983/solr/admin/collections?action=ADDREPLICA&collection=test2&shard=shard2&node=172.17.30.88:8080_solr

②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.csdn.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"