Solr集群(即SolrCloud)搭建与使用

Posted 推荐师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Solr集群(即SolrCloud)搭建与使用相关的知识,希望对你有一定的参考价值。



亲,欢迎关注哦!↑↑↑Solr集群(即SolrCloud)搭建与使用Solr集群(即SolrCloud)搭建与使用




1、什么是SolrCloud
  SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。
当一个系统的索引数据量少的时候是不需要使用SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使用SolrCloud来满足这些需求。SolrCloud是基于Solr和Zookeeper的分布式搜索方案,它的主要思想是使用Zookeeper作为集群的配置信息中心。
它有几个特色功能:
  1)集中式的配置信息。
  2)自动容错。
  3)近实时搜索。
  4)查询时自动负载均衡。
  注意:一般使用zookeeper,就是将他当作一个注册中心使用。SolrCloud使用zookeeper是使用其的管理集群的,请求过来,先连接zookeeper,然后再看看分发到那台solr机器上面,决定了那台服务器进行搜索的,对Solr配置文件进行集中管理。

2、zookeeper是个什么玩意?
  顾名思义zookeeper就是动物园管理员,他是用来管hadoop(大象)、Hive(蜜蜂)、pig(小猪)的管理员, Apache Hbase和 Apache Solr 的分布式集群都用到了zookeeper;Zookeeper:是一个分布式的、开源的程序协调服务,是hadoop项目下的一个子项目。

3、SolrCloud结构
    SolrCloud为了降低单机的处理压力,需要由多台服务器共同来完成索引和搜索任务。实现的思路是将索引数据进行Shard(分片)拆分,每个分片由多台的服务器共同完成,当一个索引或搜索请求过来时会分别从不同的Shard的服务器中操作索引。
SolrCloud需要Solr基于Zookeeper部署,Zookeeper是一个集群管理软件,由于SolrCloud需要由多台服务器组成,由zookeeper来进行协调管理。
  下图是一个SolrCloud应用的例子:

Solr集群(即SolrCloud)搭建与使用

对上图进行图解,如下图所示:

1)、物理结构
    三个Solr实例( 每个实例包括两个Core),组成一个SolrCloud。
2)、逻辑结构
    索引集合包括两个Shard(shard1和shard2),shard1和shard2分别由三个Core组成,其中一个Leader两个Replication,Leader是由zookeeper选举产生,zookeeper控制每个shard上三个Core的索引数据一致,解决高可用问题。
用户发起索引请求分别从shard1和shard2上获取,解决高并发问题。
    a、collection
        Collection在SolrCloud集群中是一个逻辑意义上的完整的索引结构。它常常被划分为一个或多个Shard(分片),它们使用相同的配置信息。
        比如:针对商品信息搜索可以创建一个collection。
        collection=shard1+shard2+....+shardX
    b、Core
        每个Core是Solr中一个独立运行单位,提供 索引和搜索服务。一个shard需要由一个Core或多个Core组成。由于collection由多个shard组成所以collection一般由多个core组成。
    c、Master或Slave
        Master是master-slave结构中的主结点(通常说主服务器),Slave是master-slave结构中的从结点(通常说从服务器或备服务器)。同一个Shard下master和slave存储的数据是一致的,这是为了达到高可用目的。
    d、Shard
        Collection的逻辑分片。每个Shard被化成一个或者多个replication,通过选举确定哪个是Leader。
注意:collection就是一个完整的索引库,分片存储,有两片,两片的内容不一样的。一片存储在三个节点,一主两从,他们之间的内容就是一样的。

如下图所示:

Solr集群(即SolrCloud)搭建与使用

4、SolrCloud搭建
    本教程的这套安装是单机版的安装,所以采用伪集群的方式进行安装,如果是真正的生成环境,将伪集群的ip改下就可以了,步骤是一样的。
SolrCloud结构图如下:

Solr集群(即SolrCloud)搭建与使用

环境准备,请安装好自己的jdk。 

    注意,我搭建的是伪集群,一个虚拟机,分配了1G内存,然后搭建的集群。

5、zookeeper集群安装。
第一步:解压zookeeper,tar -zxvf zookeeper-3.4.6.tar.gz将zookeeper-3.4.6拷贝到/usr/local/solr-cloud下,复制三份分别并将目录名改为zookeeper1、zookeeper2、zookeeper3。
# 首先将zookeeper进行解压缩操作。[root@localhost package]# tar -zxvf zookeeper-3.4.6.tar.gz -C /home/hadoop/soft/# 然后创建一个solr-cloud目录。[root@localhost ~]# cd /usr/local/[root@localhost local]# lsbin etc games include lib libexec sbin share solr src[root@localhost local]# mkdir solr-cloud[root@localhost local]# lsbin etc games include lib libexec sbin share solr solr-cloud src[root@localhost local]# # 复制三份分别并将目录名改为zookeeper1、zookeeper2、zookeeper3。[root@localhost soft]# cp -r zookeeper-3.4.6/ /usr/local/solr-cloud/zookeeper1[root@localhost soft]# cd /usr/local/solr-cloud/[root@localhost solr-cloud]# lszookeeper1[root@localhost solr-cloud]# cp -r zookeeper1/ zookeeper2[root@localhost solr-cloud]# cp -r zookeeper1/ zookeeper3
第二步:进入zookeeper1文件夹,创建data目录。并在data目录中创建一个myid文件内容为"1"(echo 1 >> data/myid)。
[root@localhost solr-cloud]# lszookeeper1 zookeeper2 zookeeper3[root@localhost solr-cloud]# cd zookeeper1[root@localhost zookeeper1]# lsbin CHANGES.txt contrib docs ivy.xml LICENSE.txt README_packaging.txt recipes zookeeper-3.4.6.jar zookeeper-3.4.6.jar.md5build.xml conf dist-maven ivysettings.xml lib NOTICE.txt README.txt src zookeeper-3.4.6.jar.asc zookeeper-3.4.6.jar.sha1[root@localhost zookeeper1]# mkdir data[root@localhost zookeeper1]# cd data/[root@localhost data]# ls[root@localhost data]# echo 1 >> myid[root@localhost data]# cat myid
第三步:进入conf文件夹,把zoo_sample.cfg改名为zoo.cfg。
[root@localhost zookeeper1]# lsbin CHANGES.txt contrib dist-maven ivysettings.xml lib NOTICE.txt README.txt src zookeeper-3.4.6.jar.asc zookeeper-3.4.6.jar.sha1build.xml conf data docs ivy.xml LICENSE.txt README_packaging.txt recipes zookeeper-3.4.6.jar zookeeper-3.4.6.jar.md5[root@localhost zookeeper1]# cd conf/[root@localhost conf]# lsconfiguration.xsl log4j.properties zoo_sample.cfg[root@localhost conf]# mv zoo_sample.cfg zoo.cfg [root@localhost conf]# lsconfiguration.xsl log4j.properties zoo.cfg[root@localhost conf]#
第四步:修改zoo.cfg。修改:dataDir=/usr/local/solr-cloud/zookeeper1/data
注意:clientPort=2181(zookeeper2中为2182、zookeeper3中为2183)
可以在末尾添加这三项配置(注意:2881和3881分别是zookeeper之间通信的端口号、zookeeper之间选举使用的端口号。2181是客户端连接的端口号,别搞错了哦):
server.1=192.168.110.142:2881:3881
server.2=192.168.110.142:2882:3882
server.3=192.168.110.142:2883:3883

Solr集群(即SolrCloud)搭建与使用第五步:对zookeeper2、zookeeper3中的设置做第二步至第四步修改。

zookeeper2修改如下所示:
a)、myid内容为2
b)、

dataDir=/usr/local/solr-cloud/zookeeper2/data
c)、clientPort=2182
Zookeeper3修改如下所示:
a)、myid内容为3
b)、

dataDir=/usr/local/solr-cloud/zookeeper3/data
c)、clientPort=2183

[root@localhost conf]# cd ../../zookeeper2[root@localhost zookeeper2]# lsbin CHANGES.txt contrib docs ivy.xml LICENSE.txt README_packaging.txt recipes zookeeper-3.4.6.jar zookeeper-3.4.6.jar.md5build.xml conf dist-maven ivysettings.xml lib NOTICE.txt README.txt src zookeeper-3.4.6.jar.asc zookeeper-3.4.6.jar.sha1[root@localhost zookeeper2]# mkdir data[root@localhost zookeeper2]# cd data/[root@localhost data]# ls[root@localhost data]# echo 2 >> myid[root@localhost data]# lsmyid[root@localhost data]# cat myid 2[root@localhost data]# lsmyid[root@localhost data]# cd ..[root@localhost zookeeper2]# lsbin CHANGES.txt contrib dist-maven ivysettings.xml lib NOTICE.txt README.txt src zookeeper-3.4.6.jar.asc zookeeper-3.4.6.jar.sha1build.xml conf data docs ivy.xml LICENSE.txt README_packaging.txt recipes zookeeper-3.4.6.jar zookeeper-3.4.6.jar.md5[root@localhost zookeeper2]# cd conf/[root@localhost conf]# lsconfiguration.xsl log4j.properties zoo_sample.cfg[root@localhost conf]# mv zoo_sample.cfg zoo.cfg [root@localhost conf]# lsconfiguration.xsl log4j.properties zoo.cfg[root@localhost conf]# vim zoo.cfg [root@localhost conf]# cd ../..[root@localhost solr-cloud]# lszookeeper1 zookeeper2 zookeeper3[root@localhost solr-cloud]# cd zookeeper3[root@localhost zookeeper3]# lsbin CHANGES.txt contrib docs ivy.xml LICENSE.txt README_packaging.txt recipes zookeeper-3.4.6.jar zookeeper-3.4.6.jar.md5build.xml conf dist-maven ivysettings.xml lib NOTICE.txt README.txt src zookeeper-3.4.6.jar.asc zookeeper-3.4.6.jar.sha1[root@localhost zookeeper3]# mkdir data[root@localhost zookeeper3]# lsbin CHANGES.txt contrib dist-maven ivysettings.xml lib NOTICE.txt README.txt src zookeeper-3.4.6.jar.asc zookeeper-3.4.6.jar.sha1build.xml conf data docs ivy.xml LICENSE.txt README_packaging.txt recipes zookeeper-3.4.6.jar zookeeper-3.4.6.jar.md5[root@localhost zookeeper3]# cd data/[root@localhost data]# ls[root@localhost data]# echo 3 >> myid[root@localhost data]# lsmyid[root@localhost data]# cd ../..[root@localhost solr-cloud]# lszookeeper1 zookeeper2 zookeeper3[root@localhost solr-cloud]# cd zookeeper3[root@localhost zookeeper3]# lsbin CHANGES.txt contrib dist-maven ivysettings.xml lib NOTICE.txt README.txt src zookeeper-3.4.6.jar.asc zookeeper-3.4.6.jar.sha1build.xml conf data docs ivy.xml LICENSE.txt README_packaging.txt recipes zookeeper-3.4.6.jar zookeeper-3.4.6.jar.md5[root@localhost zookeeper3]# cd conf/[root@localhost conf]# lsconfiguration.xsl log4j.properties zoo_sample.cfg[root@localhost conf]# mv zoo_sample.cfg zoo.cfg [root@localhost conf]# lsconfiguration.xsl log4j.properties zoo.cfg[root@localhost conf]# vim zoo.cfg [root@localhost conf]#
第六步:启动三个zookeeper。
/usr/local/solr-cloud/zookeeper1/bin/zkServer.sh start
/usr/local/solr-cloud/zookeeper2/bin/zkServer.sh start
/usr/local/solr-cloud/zookeeper3/bin/zkServer.sh start
查看集群状态:
/usr/local/solr-cloud/zookeeper1/bin/zkServer.sh status
/usr/local/solr-cloud/zookeeper2/bin/zkServer.sh status
/usr/local/solr-cloud/zookeeper3/bin/zkServer.sh status
[root@localhost ~]# /usr/local/solr-cloud/zookeeper1/bin/zkServer.sh startJMX enabled by defaultUsing config: /usr/local/solr-cloud/zookeeper1/bin/../conf/zoo.cfgStarting zookeeper ... STARTED[root@localhost ~]# /usr/local/solr-cloud/zookeeper2/bin/zkServer.sh startJMX enabled by defaultUsing config: /usr/local/solr-cloud/zookeeper2/bin/../conf/zoo.cfgStarting zookeeper ... STARTED[root@localhost ~]# /usr/local/solr-cloud/zookeeper3/bin/zkServer.sh startJMX enabled by defaultUsing config: /usr/local/solr-cloud/zookeeper3/bin/../conf/zoo.cfgStarting zookeeper ... STARTED[root@localhost ~]# /usr/local/solr-cloud/zookeeper1/bin/zkServer.sh statusJMX enabled by defaultUsing config: /usr/local/solr-cloud/zookeeper1/bin/../conf/zoo.cfgMode: follower[root@localhost ~]# /usr/local/solr-cloud/zookeeper2/bin/zkServer.sh statusJMX enabled by defaultUsing config: /usr/local/solr-cloud/zookeeper2/bin/../conf/zoo.cfgMode: leader[root@localhost ~]# /usr/local/solr-cloud/zookeeper3/bin/zkServer.sh statusJMX enabled by defaultUsing config: /usr/local/solr-cloud/zookeeper3/bin/../conf/zoo.cfgMode: follower[root@localhost ~]#
第七步:开启zookeeper用到的端口,或者直接关闭防火墙。
service iptables stop

可以编写简单的启动脚本,如下所示:

[root@localhost solr-cloud]# vim start-zookeeper.sh[root@localhost solr-cloud]# chmod u+x start-zookeeper.sh [root@localhost solr-cloud]# lltotal 16-rwxr--r--. 1 root root 133 Sep 13 18:32 start-zookeeper.shdrwxr-xr-x. 11 root root 4096 Sep 13 02:13 zookeeper1drwxr-xr-x. 11 root root 4096 Sep 13 02:35 zookeeper2drwxr-xr-x. 11 root root 4096 Sep 13 02:37 zookeeper3[root@localhost solr-cloud]#

Solr集群(即SolrCloud)搭建与使用

查看启动状态的脚本信息如下所示:

Solr集群(即SolrCloud)搭建与使用

6、tomcat安装。(注意:solrCloud部署依赖zookeeper,需要先启动每一台zookeeper服务器。)

注意:使用之前搭建好的solr单机版,这里为了节省时间,直接拷贝之前的solr单机版,然后修改配置文件即可。
https://www.cnblogs.com/biehongli/p/11443347.html
第一步:将apache-tomcat-7.0.47.tar.gz解压,tar -zxvf apache-tomcat-7.0.47.tar.gz。
[root@localhost solr-cloud]# tar -zxvf apache-tomcat-7.0.47.tar.gz
第二步:把解压后的tomcat复制到/usr/local/solr-cloud/目录下复制四份。
/usr/local/solr-cloud/tomcat1
/usr/local/solr-cloud/tomcat2
/usr/local/solr-cloud/tomcat3
/usr/local/solr-cloud/tomcat4
[root@localhost package]# cp -r apache-tomcat-7.0.47 /usr/local/solr-cloud/tomcat01[root@localhost package]# cp -r apache-tomcat-7.0.47 /usr/local/solr-cloud/tomcat02[root@localhost package]# cp -r apache-tomcat-7.0.47 /usr/local/solr-cloud/tomcat03[root@localhost package]# cp -r apache-tomcat-7.0.47 /usr/local/solr-cloud/tomcat04[root@localhost package]# cd /usr/local/solr-cloud/[root@localhost solr-cloud]# lsstart-zookeeper.sh status-zookeeper.sh stop-zookeeper.sh tomcat01 tomcat02 tomcat03 tomcat04 zookeeper1 zookeeper2 zookeeper3[root@localhost solr-cloud]#
第三步:修改tomcat的server.xml,把其中的端口后都加一。保证两个tomcat可以正常运行不发生端口冲突。

[root@localhost solr-cloud]# vim tomcat01/conf/server.xml
[root@localhost solr-cloud]# vim tomcat02/conf/server.xml
[root@localhost solr-cloud]# vim tomcat03/conf/server.xml
[root@localhost solr-cloud]# vim tomcat04/conf/server.xml

tomcat01修改的端口分别是8005修改为8105,8080修改为8180,8009修改为8189。其他tomcat第二位依次累加1即可。

    tomcat01修改的端口分别是8005修改为8105,8080修改为8180,8009修改为8189。其他tomcat第二位依次累加1即可。
7、开始部署solr。将之前的solr部署到四台tomcat下面。然后将单机版的solrhome复制四份,分别是solrhome01,solrhome02,solrhome03,solrhome04。然后开始编辑solrhome01,solrhome02,solrhome03,solrhome04。下面的solr.xml配置文件(修改每个solrhome的solr.xml文件)。让tomcat01和solrhome01对应上,其他依次类推,让tomcat02和solrhome02对应上,让tomcat03和solrhome03对应上,让tomcat04和solrhome04对应上。

Solr集群(即SolrCloud)搭建与使用

然后将solr和solrhome之间建立关系。
Solr集群(即SolrCloud)搭建与使用

然后将tomcat和zookeeper建立关系。每一台solr和zookeeper关联。

注意:可以使用vim的查找功能查找到JAVA_OPTS的定义的位置,然后添加。

Solr集群(即SolrCloud)搭建与使用

现在,每个部署在tomcat下面的solr都有自己的独立的solrhome。在solr集群环境下, solrhome下面的配置文件应该只有一份,所以这里将配置文件上传到zookeeper,让zookeeper进行管理配置文件。将solrhome下面的conf目录上传到zookeeper。使用solr自带的工具执行,将cong目录上传到zookeeper。

注意:由于zookeeper统一管理solr的配置文件(主要是schema.xml、solrconfig.xml), solrCloud各各节点使用zookeeper管理的配置文件。./zkcli.sh此命令在solr-4.10.3/example/scripts/cloud-scripts/目录下。

    然后登陆zookeeper服务器查询配置文件,查看是否上传成功。上传成功以后所有节点共用这一份配置文件的。然后将所有的tomcat启动即可。然后也写一个批处理启动tomcat的脚本。    

    启动以后可以访问一下,看看启动的状况。你可以可以查看启动日志的。我的这个应该是没有启动成功的。然后检查一下原因。

Solr集群(即SolrCloud)搭建与使用

做到这里报了一堆莫名奇妙的错误,百度了很久,没有找到具体原因,就是起不来,可能是分配1G的内存太小了,我调到1.5G内存,然后将单机版solr,集群版solr,全部删除了,然后重新搭建,才成功了。 如下图所示,这玩意,还是建议多研究,搭建的时候仔细点,不然一不小心就错了。
注意:正常启动,任意一台solr,左侧菜单出现Cloud。

Solr集群(即SolrCloud)搭建与使用

上图中的collection1集群只有一片,可以通过下边的方法配置新的集群。
创建collection的命令如下所示(注意:如果集群中有四个solr节点创建新集群collection2,将集群分为两片,每片两个副本):

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

Solr集群(即SolrCloud)搭建与使用

刷新页面如下所示:创建成功以后,就是一个collection分成了两片,一主一备(192.168.110.142:8180、192.168.110.142:8280,依次类比即可)。

Solr集群(即SolrCloud)搭建与使用

删除collection的命令如下所示:http://192.168.110.142:8180/solr/admin/collections?action=DELETE&name=collection1

那么之前的collection1可以删除或者自己留着也行的。

Solr集群(即SolrCloud)搭建与使用

提示tips: 启动solrCloud注意,启动solrCloud需要先启动solrCloud依赖的所有zookeeper服务器,再启动每台solr服务器。

End


Thank you for your reading.Solr集群(即SolrCloud)搭建与使用

合作:18513753639


~~~喜欢就点击在看哟!

以上是关于Solr集群(即SolrCloud)搭建与使用的主要内容,如果未能解决你的问题,请参考以下文章

JAVAEE——宜立方商城08:Zookeeper+SolrCloud集群搭建搜索功能切换到集群版Activemq消息队列搭建与使用

solrcloud 在windows可以集群吗

solr集群搭建(SolrCloud)

solr集群搭建(复制)

Solr Centos6.5下搭建solr-7.7.2集群solrcloud+DIH操作

Solr5.5.4+Zookeeper3.4.6+Tomcat8搭建SolrCloud集群

(c)2006-2024 SYSTEM All Rights Reserved IT常识