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)

[root@ip-172-17-30-28 ~]# mkdir -p /usr/local/solr/solr-cloud

[root@ip-172-17-30-28 ~]# cp /root/zookeeper-3.4.6.tar.gz /usr/local/solr/solr-cloud/

[root@ip-172-17-30-28 ~]# cd /usr/local/solr/solr-cloud/

[root@ip-172-17-30-28 solr-cloud]# tar -zxvf zookeeper-3.4.6.tar.gz

[root@ip-172-17-30-28 solr-cloud]# mv zookeeper-3.4.6  zookeeper01

[root@ip-172-17-30-28 solr-cloud]# cp -r zookeeper01/ zookeeper02

[root@ip-172-17-30-28 solr-cloud]# cp -r zookeeper01/ zookeeper03

 

2 配置zookeeper

① 给每个zookeeper的解压目录创建data文件夹

[root@ip-172-17-30-28 solr-cloud]# mkdir /usr/local/solr/solr-cloud/zookeeper01/data

[root@ip-172-17-30-28 solr-cloud]# mkdir /usr/local/solr/solr-cloud/zookeeper02/data

[root@ip-172-17-30-28 solr-cloud]# mkdir /usr/local/solr/solr-cloud/zookeeper03/data

 

② 给每个zookeeper的解压目录创建myid文件,并分别写入1,2,3

 

[root@ip-172-17-30-28 ~]# touch /usr/local/solr/solr-cloud/zookeeper01/data/myid

[root@ip-172-17-30-28 ~]# echo 1 > /usr/local/solr/solr-cloud/zookeeper01/data/myid

 

[root@ip-172-17-30-28 ~]# touch /usr/local/solr/solr-cloud/zookeeper02/data/myid

[root@ip-172-17-30-28 ~]# echo 2 > /usr/local/solr/solr-cloud/zookeeper02/data/myid

 

[root@ip-172-17-30-28 ~]# touch /usr/local/solr/solr-cloud/zookeeper03/data/myid

[root@ip-172-17-30-28 ~]# echo 3 > /usr/local/solr/solr-cloud/zookeeper03/data/myid

 

 

③ 给每个zookeeper的配置文件改名

[root@ip-172-17-30-28 ~]# cd /usr/local/solr/solr-cloud/

[root@ip-172-17-30-28 solr-cloud]# mv zookeeper01/conf/zoo_sample.cfg zookeeper01/conf/zoo.cfg

[root@ip-172-17-30-28 solr-cloud]# mv zookeeper02/conf/zoo_sample.cfg zookeeper02/conf/zoo.cfg

[root@ip-172-17-30-28 solr-cloud]# mv zookeeper03/conf/zoo_sample.cfg zookeeper03/conf/zoo.cfg

④ 修改每个zookeeper的配置文件

[root@ip-172-17-30-28 solr-cloud]# vim /usr/local/solr/solr-cloud/zookeeper01/conf/zoo.cfg

[root@ip-172-17-30-28 solr-cloud]# vim /usr/local/solr/solr-cloud/zookeeper02/conf/zoo.cfg

[root@ip-172-17-30-28 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

[root@ip-172-17-30-28 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

 

[root@ip-172-17-30-28 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

 

 

[root@ip-172-17-30-28 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

 

 

查看状态

[root@ip-172-17-30-28 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

 

[root@ip-172-17-30-28 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

 

[root@ip-172-17-30-28 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

[root@ip-172-17-30-28 ~]# mv solr-6.6.4.tgz /usr/local/solr/

 

③ 解压solr

[root@ip-172-17-30-28 ~]# cd /usr/local/solr/

[root@ip-172-17-30-28 solr]# tar -zxf solr-6.6.4.tgz

 

④ 把solr部署到Tomcat

1. 复制Tomcat并删除webapps内所有文件,创建ROOT目录

[root@ip-172-17-30-28 example]# cd /usr/local/solr/tomcat/webapps/

[root@ip-172-17-30-28 webapps]# rm -rf *

[root@ip-172-17-30-28 webapps]# mkdir ROOT

 

2. 部署solr工程到Tomcat中

在tomcat的webapps下创建个solr文件夹

[root@ip-172-17-30-28 solr]# cp /usr/local/solr/solr-6.6.4/server/solr-webapp/webapp/*  .

 

 

3. 把solr-6.6.4/server/lib/ext目录下的所有的jar包,添加到solr工程中

[root@ip-172-17-30-28 ROOT]# cd /usr/local/solr/solr-6.6.4/server/lib/ext/

[root@ip-172-17-30-28 ext]# cp * /usr/local/solr/tomcat/webapps/solr/WEB-INF/lib/

⑤ 创建solrhome

solr-6.6.4/server/solr目录就是一个solrhome。复制此目录到/usr/local/solr/solrhome

[root@ip-172-17-30-28 ext]# cd /usr/local/solr/solr-6.6.4/server/

[root@ip-172-17-30-28 example]# cp -r solr /usr/local/solr/solrhome

 

⑥ 准备自己的业务域

根据业务需求,修改自己的solrcore的配置文件的业务域等等。如下图:

 

 

(三)solr集群搭建

solr的集群应该有4个solr服务

1把solrhome复制到solr-cloud目录下,复制四份。

[root@ip-172-17-30-28 example]# cd /usr/local/solr/

[root@ip-172-17-30-28 solr]# mkdir solr-cloud/

[root@ip-172-17-30-28 solr]# cp -r solrhome/ solr-cloud/solrhome01

[root@ip-172-17-30-28 solr]# cp -r solrhome/ solr-cloud/solrhome02

[root@ip-172-17-30-28 solr]# cp -r solrhome/ solr-cloud/solrhome03

[root@ip-172-17-30-28 solr]# cp -r solrhome/ solr-cloud/solrhome04

 

2安装4个Tomcat,其实就是复制4个Tomcat

[root@ip-172-17-30-28 solr]# cp -r tomcat/ solr-cloud/tomcat-solr01

[root@ip-172-17-30-28 solr]# cp -r tomcat/ solr-cloud/tomcat-solr02

[root@ip-172-17-30-28 solr]# cp -r tomcat/ solr-cloud/tomcat-solr03

[root@ip-172-17-30-28 solr]# cp -r tomcat/ solr-cloud/tomcat-solr04

 

3修改Tomcat端口号8081~8084

 

[root@ip-172-17-30-28 solr]# cd solr-cloud/

[root@ip-172-17-30-28 solr-cloud]# vim tomcat-solr01/conf/server.xml

[root@ip-172-17-30-28 solr-cloud]# vim tomcat-solr02/conf/server.xml

[root@ip-172-17-30-28 solr-cloud]# vim tomcat-solr03/conf/server.xml

[root@ip-172-17-30-28 solr-cloud]# vim tomcat-solr04/conf/server.xml

 

需要修改3个地方的端口号,

如下图第一个Tomcat为例,修改三个端口号8001,8081,8011,其他Tomcat类似

 

 

 

4修改每个Tomcat中solr服务的web.xml

4个Tomcat都要修改为对应的solrhome

[root@ip-172-17-30-28 solr-cloud]# vim tomcat-solr01/webapps/ROOT/WEB-INF/web.xml

[root@ip-172-17-30-28 solr-cloud]# vim tomcat-solr02/webapps/ROOT/WEB-INF/web.xml

[root@ip-172-17-30-28 solr-cloud]# vim tomcat-solr03/webapps/ROOT/WEB-INF/web.xml

[root@ip-172-17-30-28 solr-cloud]# vim tomcat-solr04/webapps/ROOT/WEB-INF/web.xml

 

修改各自的solrhome

例如/usr/local/solr/solr-cloud/solrhome01

 

5修改4个solrhome里面的solr.xml,设置运行的端口号

[root@ip-172-17-30-28 solr-cloud]# vim solrhome01/solr.xml

[root@ip-172-17-30-28 solr-cloud]# vim solrhome02/solr.xml

[root@ip-172-17-30-28 solr-cloud]# vim solrhome03/solr.xml

[root@ip-172-17-30-28 solr-cloud]# vim solrhome04/solr.xml

 

例如solrhome01需要修改为8081,其他类似

 

 

6把配置文件上传到zookeeper集群

进入/usr/local/solr/solr-6.6.4/server/scripts/cloud-scripts,执行命令

[root@ip-172-17-30-28 solr-cloud]# cd /usr/local/solr/solr-6.6.4/server/scripts/cloud-scripts

需要运行的以下命令,需要修改IP地址和修改solrcore的路径地址

[root@ip-172-17-30-28 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,使用客户端进行查看

[root@ip-172-17-30-28 cloud-scripts]# cd /usr/local/solr/solr-cloud/zookeeper01/bin

[root@ip-172-17-30-28 bin]# ./zkCli.sh -server 192.168.220.229:2181

 

使用ls命令查看zookeeper配置信息

 

8设置zookeeper的地址给Tomcat

需要修改每个Tomcat的bin/catalina.sh文件

[root@ip-172-17-30-28 bin]# cd /usr/local/solr/solr-cloud/

[root@ip-172-17-30-28 solr-cloud]# vim tomcat-solr01/bin/catalina.sh

[root@ip-172-17-30-28 solr-cloud]# vim tomcat-solr02/bin/catalina.sh

[root@ip-172-17-30-28 solr-cloud]# vim tomcat-solr03/bin/catalina.sh

[root@ip-172-17-30-28 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

[root@ip-172-17-30-28 solr-cloud]# ./tomcat-solr01/bin/startup.sh

[root@ip-172-17-30-28 solr-cloud]# ./tomcat-solr02/bin/startup.sh

[root@ip-172-17-30-28 solr-cloud]# ./tomcat-solr03/bin/startup.sh

[root@ip-172-17-30-28 solr-cloud]# ./tomcat-solr04/bin/startup.sh

 

10访问solr集群

访问任意一个solr集群的节点都可以

例如http://192.168.220.229:8081/solr/index.html

效果如下:

11集群分片

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

 

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

响应如下:

 

 

效果如下:

 

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的理解!

①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" 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值