Solr集群搭建【内涵ZooKeeper集群的搭建】

一、什么是SolrCloud

  • SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不需要使用SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使用SolrCloud来满足这些需求。

  • SolrCloud是基于Solr和Zookeeper的分布式搜索方案,它的主要思想是使用Zookeeper作为集群的配置信息中心。

  • 特点:

    • 集中式的配置信息
    • 自动容错

    • 近实时搜索

    • 查询时自动负载均衡

二、Solr集群的系统架构

  • 物理结构:

    • 三个Solr实例( 每个实例包括两个Core),组成一个SolrCloud

  • 逻辑结构:

    • Collection在SolrCloud集群中是一个逻辑意义上的完整的索引结构。它常常被划分为一个或多个Shard(分片),它们使用相同的配置信息

    • 比如:针对商品信息搜索可以创建一个collection,扩容增加Shard即可

       collection=shard1+shard2+....+shardX

  • Core:

    • 每个Core是Solr中一个独立运行单位,提供 索引和搜索服务。一个shard需要由一个Core或多个Core组成。由于collection由多个shard组成所以collection一般由多个core组成
  • Shard:

    • Collection的逻辑分片。每个Shard被化成一个或者多个replication,通过选举确定哪个是Leader

    • 上图的两个Shard的数据不同,但是每个Shard分了三个结点,三个结点的数据是相同的,这三个结点有一个主服务器结点,两个从服务器结点【分散存储】,可以解决高并发和负载均衡

  • 需要实现的solr集群架构:

    • Zookeeper作为集群的管理工具
      • 集群管理:容错、负载均衡
      • 配置文件的集中管理
      • 集群的入口
    • 需要实现zookeeper 高可用。需要搭建集群。建议是奇数节点。需要三个zookeeper服务器。

      搭建solr集群至少需要7台服务器。

      这里因环境限制,演示的是搭建伪分布式(在一台虚拟机上,建议内存至少1G):

      需要三个zookeeper节点

      需要四个tomcat节点。

      本文使用tomcat进行部署,而不使用solr自带的jetty

三、首先搭建ZooKeeper集群

  • 安装JDK教程:https://blog.csdn.net/Future_LL/article/details/84667634

  • 上传并解压所需要的压缩包,压缩格式:tar -zxvf 需要压缩的包名

  • 把ZooKeeper复制三份

  • 在每个zookeeper目录下创建一个data目录

  • 在data目录下创建一个myid文件,文件名就叫做“myid”。内容就是每个实例的id。例如1、2、3

    • 举例:查看zookeeper01下的data是否有文件myid,并且内容为1
  • 把conf目录下的zoo_sample.cfg文件改名为zoo.cfg

  • 修改zoo.cfg配置文件,这里以zookeeper01举例,zookeeper02,、zookeeper03自己配置

  • 启动每个zookeeper实例

    • 使用批处理启动ZooKeeper
    • cd /usr/local/solr-cloud/zookeeper01/bin/
      ./zkServer.sh start
      cd /usr/local/solr-cloud/zookeeper02/bin/
      ./zkServer.sh start
      cd /usr/local/solr-cloud/zookeeper03/bin/
      ./zkServer.sh start
    • 更改批处理文件的权限
    • 运行批处理文件
    • 分别查看每个实例的状态
  • 如果你显示的是这样子的一个领导两个部下(leader和follower不一定是谁,随机的),那么就代表zookeeper集群已经搭建完成

四、搭建Solr集群

  • 我们这里先搭建只用一个服务器的Solr:https://blog.csdn.net/Future_LL/article/details/84676913

  • 创建四个tomcat实例。每个tomcat运行在不同的端口。tomcat01改为8180、tomcat02改为8280、tomcat03改为8380、tomcat04改为8480

    • 这里以tomcat01举例:
  • 把单机版的solr实例复制到集群中的tomcat中

  • 为每个solr实例创建一个对应的solrhome。使用单机版的solrhome复制四份

    • ​​​​​​​查看solr-cloud是否有上图所创建的文件

  • 配置solrCloud相关的配置。每个solrhome下都有一个solr.xml,把其中的ip及端口号配置好​​​​​​​

    • ​​​​​​​以solrhome01为例,修改solr.xml

    • 其他得solrhome0X根据上图进行修改配置文件

  • ​​​​​​​

  • 需要修改solr服务的web.xml文件,把solrhome关联起来​​​​​​​,这里以tomcat01为例

  • ​​​​​​​​​​​​​​

      <env-entry>
           <env-entry-name>solr/home</env-entry-name>
           <env-entry-value>/usr/local/solr-cloud/solrhome01</env-entry-value>
           <env-entry-type>java.lang.String</env-entry-type>
        </env-entry>
    

     

    • 其余的tomcat02,03,04同上

  • 修改tomcat/bin目录下的catalina.sh 文件,关联solr和zookeeper​​​​​​​,这里以tomcat01为例

    • 通过Tomcat给Solr传递一个参数,告诉Solr ZooKeeper在哪

    • JAVA_OPTS="-DzkHost=192.168.229.128:2181,192.168.229.128:2182,192.168.229.128:2183"

       

  • ​​​​​​​

    • 其余的tomcat02,03,04同上

  • ​​​​​​​

  • 让zookeeper统一管理配置文件。需要把/conf目录上传到zookeeper​​​​​​​

    • 现在我们每一个solr都有了自己的solrhome,现在我们要让每一个solr实例的配置文件都一样,这个配置文件需要集中管理,这个时候我们使用zookeeper来统一管理配置文件。所以要将配置文件上传到zookeeper中。那么上传哪些配置文件呢​​​​​​​

    • 这里注意下managed-schema文件,网上有很多低版本solr,会提到一个collection1/conf下的schema.xml,但是并没有找到。好像是从5.0版本开始不使用schema.xml的,这俩其实内容都一样,搞不懂为啥要换个名字,而且内容格式是xml,但是文件名却没有.xml的后辍,这里直接上传整个conf目录就行​​​​​​​

  • ​​​​​​​

    • 在下图的目录有一个脚本文件,执行这个脚本就可以将配置文件上传到zookeeper了

    • 注意:执行上传前,需要启动ZooKeeper集群

  • ​​​​​​​

  • ​​​​​​​

    • 执行上传脚本

  • ​​​​​​​

    • ​​​​​​​查看是否上传成功

  • ​​​​​​​

  • 启动每个tomcat实例。要包装zookeeper集群是启动状态

    • 使用批处理启动Tomcat

  • /usr/local/solr-cloud/tomcat01/bin/startup.sh
    /usr/local/solr-cloud/tomcat02/bin/startup.sh
    /usr/local/solr-cloud/tomcat03/bin/startup.sh
    /usr/local/solr-cloud/tomcat04/bin/startup.sh

    • 修改批处理文件的权限
  • 运行脚本启动Tomcat

  • 访问集群 localhost:8180/solr/index.html

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

  • ​​​​​​​
  • 这样一个最简单的Solr集群就单间成功了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值