目录

SolrCloud

1. 简介

SolrCloud 是Solr提供的分布式搜索方案,当索引量很大,搜索请求并发很高,这时需要使用SolrCloud来满足这些需求。当一个系统的索引数据量少的时候是不需要使用SolrCloud的。

SolrCloud是基于Solr和Zookeeper的分布式搜索方案。它的主要思想是使用Zookeeper作为SolrCloud集群的配置信息中心,统一管理solrcloud的配置,比如solrconfifig.xml和managed-schema

使用场景:

当你需要容错,分布式索引和分布式检索能力时使用SolrCloud。 
当索引量很大,搜索请求并发很高时,同样需要使用SolrCloud来满足这些需求。

特点:

集中式的配置信息 
自动容错 
近实时搜索 
查询时自动负载均衡

2. 结构

https://img.zhaojq.top/20260727091724929.png
示意图

  • 物理结构

    3个solr实例(每个实例包括两个core), 组成一个solrCloud

    core:

    每个Core是Solr中一个独立运行单位,提供 索引和搜索服务。

  • 逻辑结构

    索引集合包括两个Shard(shard1和shard2),shard1和shard2分别由三个Core组成,其中一个Leader两个Replication,Leader是由zookeeper选举产生,zookeeper控制每个shard上三个Core的索引数据一致,解决高可用问题。用户发起索引请求分别从shard1和shard2上获取,解决高并发问题。

    Master&Slave:
    	Master是master-slave构中的主结点(通常说主服务器),Slave是master-slave结构中的从结 点(通常说从服务器或备服务器)。 
    Shard: 
    	一个shard需要由一个Core或多个Core组成。Collection的逻辑分片。每个Shard被化成一个或者多 个replication,通过选举确定哪个是Leader。索引集合包括两个Shard(shard1和shard2), shard1和shard2分别由三个Core组成,其中一个Leader两个Replication,Leader是由zookeeper选 举产生,zookeeper控制每个shard上三个Core的索引数据一致,解决高可用问题。用户发起索引请求分 别从shard1和shard2上获取,解决高并发问题。 
    collection: 
    	多个shard组成所以collection一般由多个core组成。 Collection在SolrCloud集群中是一个逻辑意义上的完整的索引结构。它常常被划分为一个或多个 Shard(分片),它们使用相同的配置信息。 比如:针对商品信息搜索可以创建一个collection。 collection=shard1+shard2+....+shardX

3. 环境搭建

  • 系统搭建结构图

    solrcloud是基于solr和zookeeper部署,zookeeper是一个集群管理软件,solrcloud需要由多台solr服务器组成,然后由zookeeper来进行协调管理

    https://img.zhaojq.top/20260727091725119.png
    示意图

  • zk集群搭建

    参考:zookeeper分类部分

  • solr集群搭建

    • 先搭建一个单机版

      1.上传tomcat 和 solr 压缩包 到/usr/local/solr-cloud 下,tomcat中建立solr工程 
      	tar -xvf apache-tomcat-8.5.55.tar.gz 
      	mv apache-tomcat-8.5.55 tomcat 
      	tar -xvf solr-7.7.3.tgz 
      	cp /usr/local/solr-cloud/solr-7.7.3/server/solr-webapp/webapp -rf /usr/local/solr-cloud/tomcat/webapps/solr 
      2.拷贝jar包 
      	cd /usr/local/solr-cloud/solr-7.7.3/server/lib 
      	cp ext/* /usr/local/solr-cloud/tomcat/webapps/solr/WEB-INF/lib/ 
      	cp metrics-* /usr/local/solr-cloud/tomcat/webapps/solr/WEB-INF/lib/ 
      3.配置solrhome 
      	首先创建solrhome存储Solr索引文件 
      	mkdir -p /usr/local/solr-cloud/solrhome 
      	复制solr-7.7.3/server/solr目录下所有内容到solrhome 
      	cd /usr/local/solr-cloud/solr-7.7.3/server/solr 
      	cp -r * /usr/local/solr-cloud/solrhome/ 
      4.需要修改solr的web.xml文件 把solrhome关联起来 和 去掉安全认证。 
      	<env-entry>
          	<env-entry-name>solr/home</env-entry-name> 
          	<env-entry-value>/usr/local/solr-cloud/solrhome</env-entry-value> 
          	<env-entry-type>java.lang.String</env-entry-type> 
          </env-entry> 
          <!-- <security-constraint> ...... --> 
      5.启动tomcat测试 
      	./tomcat/bin/startup.sh 
      	systemctl stop firewalld
    • 创建四个tomcat实例。每个tomcat运行在不同的端口。8180、8280、8380、8480

      分别修改tomcat中的端口
      vim tomcat01/conf/server.xml
      
      把原来的8005 换成 8105 之前的 8009换成 8109 之前的 8080 换成 8180 其它的tomcat 也类似修改
      <Server port="8105" shutdown="SHUTDOWN"> </Server> 
      <Connector port="8180" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 
      <Connector port="8109" protocol="AJP/1.3" redirectPort="8443" />
    • 建立classes文件夹 拷贝日志配置文件。

      mkdir tomcat01/webapps/solr/WEB-INF/classes 
      cp /usr/local/solr-cloud/solr-7.7.3/server/resources/log* /usr/local/solr- cloud/tomcat01/webapps/solr/WEB-INF/classes

      其它的tomcat中的操作 参考上面的修改即可

    • 把单机版solrhome 复制为solrhome1 solrhome2 solrhome3 solrhome4。

      cp solrhome -rf solrhome1 
      cp solrhome -rf solrhome2 
      cp solrhome -rf solrhome3 
      cp solrhome -rf solrhome4
    • 配置solrCloud相关的配置。每个solrhome下都有一个solr.xml,把其中的ip及端口号配置好.

      这里重点是 hostPort 要和tomcat 对应 如果是多台机器 ip 设置不同即可

      vi solrhome1/solr.xml 其它的solrhome/solr.xml 依次修改
      <solrcloud> 
          <str name="host">192.168.211.137</str> 
          <int name="hostPort">8180</int> 
          <str name="hostContext">${hostContext:solr}</str> 
      </solrcloud>
    • 让zookeeper统一管理配置文件。需要把solrhome/confifigsets/sample_techproducts_confifigs/conf目录上传到zookeeper。上传任意solrhome中的配置文件即可。要保证zookeeper集群是启动状态。

      使用工具上传配置文件:solr-7.7.3/server/scripts/cloud-scripts/zkcli.sh

      cd /usr/local/solr-cloud/solr-7.7.3/server/scripts/cloud-scripts
      
      ./zkcli.sh -zkhost 192.168.211.137:2181,192.168.211.137:2182,192.168.211.137:2183 -cmd upconfig - confdir /usr/local/solr-cloud/solrhome1/configsets/sample_techproducts_configs/conf -confname myconf
    • 查看zookeeper上的配置文件

      #使用zookeeper目录下的bin/zkCli.sh命令查看zookeeper上的配置文件
       ./zkCli.sh
       ls /
       ls /configs
       ls /configs/myconf
    • 修改tomcat/bin目录下的catalina.sh 文件,关联solr和zookeeper/ 把此配置添加到配置文件中:

      #vi中搜索 umask
      JAVA_OPTS="-DzkHost=192.168.211.137:2181,192.168.211.137:2182,192.168.211.137:2183"
    • 检查每个tomcat中项目的web.xml 看是否已经对应到对应的solrhome 检查没有问题可以启动全部tomcat

      solr/home
      /usr/local/solr-cloud/solrhome1
      java.lang.String

      启动每个tomcat实例。

      chmod -R 777 tomcat01/bin 
      chmod -R 777 tomcat02/bin 
      chmod -R 777 tomcat03/bin 
      chmod -R 777 tomcat04/bin
      
      ./tomcat_start.sh
    • 访问集群

      查看里面的 cloud 菜单,随意连接一台

    • 创建新的Collection进行分片处理

      点击页面的Collections按钮,然后就能添加了

4. Springboot 访问solrCloud

见示例代码: springboot-solrcloud