当前位置: 首页 > news >正文

solr集群

一、  概述

SolrCloud是solr提供的分布式搜索方案。适用于大规模、容错、分布式索引和检索,解决高并发搜索问题。SolrCloud是基于solr和zookeeper,主要思想是使用zookeeper作为集群的配置信息中心。

SolrCloud的特色功能,集中式的配置信息;自动容错;近实时搜索;查询时自动负载均衡。

一套有3个solr服务器构建的SolrCloud的结构,3个solr实例,每个实例包括两个core。在逻辑上,比如,3个core组成一个shard,其中一个主节点,2个从节点,主节点有zookeeper选举产生,zookeeper控制每个shard上3个core的索引数据一致,解决高可用问题。用户发起索引请求分别从shard1和shard2上获取,解决高并发问题。一个或多个shard构成一个完整的collection,每个shard使用相同的配置,shard是collection的逻辑分片。

二、  搭建SolrCloud

搭建一个由zookeeper集群和solr集群构成的SolrCloud。

使用zookeeper作为SolrCloud的入口,为了保证zookeeper的高可用,需要搭建zookeeper集群。在练习环境下,可以搭建zookeeper的伪分布式。

1.         zookeeper集群

将zookeeper的压缩包上传到服务器,解压到/home/java/。在/usr/local/目录下创建目录solr-cloud。将解压的zookeeper包复制到solr-cloud下。复制另外两份。进入第一份,创建data目录,进入data目录,创建文件myid,在myid中写入1。进入zookeepper包下的conf目录,复制zoo_cample.cfg为zoo.cfg,修改zoo.cfg,dataDir为实际路径,配置zookeeper节点通信和投票选举的端口。

server.1=192.168.0.121:2881:3881

server.2=192.168.0.121:2881:3881

server.3=192.168.0.121:2881:3881

同样步骤修改另外两个节点,注意在伪分布式中修改端口号,以免冲突。

编写一个启动3个节点的批处理命令。

cd zookeeper01/bin

./zkServer.sh start

cd ../../zookeeper02/bin

./zkServer.sh start

cd ../../zookeeper03/bin

./zkServer.sh start

修改shell文件权限,chmod  u+x  start-all.sh。执行./start-all.sh,启动。执行zkServer.sh  status,查看每个节点的状态,有没有leader,follower。

2.         solr集群

复制4份刚解压的tomcat到solr-cloud目录下。配置一份solr的web项目,分别复制到每个tomcat上发布。修改每个tomcat的端口号,修改3处地方。配置一份solrhome,复制4份到solr-cloud目录下。修改每个tomcat下solr的web.xml中solrhome的路径。修改每个solrhome下的solr.xml,配置host和port。

   <str name="host">192.168.0.121</str>

   <int name="hostPort">8180</int>

配置tomcat到zookeeper的连接。在每个tomcat下的bin目录的catalina.sh,首次出现$JAVA_OPTS之前,配置zookeeper的地址。

JAVA_OPTS="-DzkHost=192.168.0.121:2181,192.168.0.121:2182,192.168.0.121:2183"

将solr集群中公共的配置文件交给zookeeper管理,也就是使用zkcli.sh将任意一个solrhome下的collection1/conf目录上传到zookeeper。zkcli.sh在solr的解压包的example/scripts/cloud-scripts目录下。

./zkcli.sh  –zkhost  192.168.0.121:2181,192.168.0.121:2182,192.168.0.121:2

183  -cmdupconfig  -confdir  /usr/local/solr-cloud/solrhome01/collection1/conf -confname  myconf

在zookeeper的bin下的zkCli.sh查看上传是否成功。./zkCli.sh -server 192.168.0.121:2182

进入客户端,ls  /configs/myconf查看是否上传成功。

编写一个启动所有tomcat的shell。

/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

修改sh权限,执行。tail -f /usr/local/solr-cloud/tomcat04/logs/catalina.out查看是否启动成功。

使用浏览器访问任意一个solr节点。点击cloud>graph,查看架构图。一般是一个collection有一个shard,shard下面有配置的个数节点,这里是4个。分切片的方法是,在浏览器输入:

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

执行结果的xml中出现success字样即分配成功。

删除不需要的collection的方法,在浏览器输入:

http://192.168.0.121:8180/solr/admin/collections?action=DELETE&name=collection1

三、  使用Solrj管理集群

测试代码

    @Test

    publicvoid testAddDocument()throws Exception {

        CloudSolrServer server = new CloudSolrServer("192.168.0.121:2181,192.168.0.121:2182,192.168.0.121:2183");

        server.setDefaultCollection("collection2");

        SolrInputDocument document = newSolrInputDocument();

        document.setField("id", "solrCloud01");

        document.setField("item_title", "扫啦云");

        document.setField("item_price", 122);

        server.add(document);

        server.commit();

    }



    @Test

    publicvoid testQuery() throws Exception {

        CloudSolrServer server = new CloudSolrServer("192.168.0.121:2181,192.168.0.121:2182,192.168.0.121:2183");

        server.setDefaultCollection("collection2");

        SolrQuery query = new SolrQuery();

        query.setQuery("*:*");

        QueryResponse response = server.query(query);

        SolrDocumentList results = response.getResults();

        System.out.println(results.getNumFound());

        for (SolrDocument doc : results) {

            System.out.println(doc.get("id") + "--" + doc.get("item_title") + "--" + doc.get("item_price"));

        }

    }

四、  将项目的搜索功能切换到集群版

由于单机版的HttpSolrServer和集群版的CloudSlorServer都是继承了抽嫌累SolrServer,只需要在spring的配置文件中,将单机版的bean注释,添加上集群版的bean就可以了。

     <!-- 单机版solr -->

      <!-- <beanclass="org.apache.solr.client.solrj.impl.HttpSolrServer"id="httpSolrServer">

            <constructor-argname="baseURL"value="http://192.168.0.121:8080/solr/collection1" />

      </bean> -->

      <!-- 集群版solr-->

      <bean id="cloudSolrServer" class="org.apache.solr.client.solrj.impl.CloudSolrServer">

            <constructor-argindex="0" value="192.168.0.121:2181,192.168.0.121:2182,192.168.0.121:2183"/>

            <propertyname="defaultCollection" value="collection2" />

      </bean>

启动项目,测试。

 

相关文章:

  • ssm框架web项目配置全局异常处理
  • ActiveMQ
  • 删除数据库重复记录
  • session共享问题
  • springmvc中ajax响应json报406错误的两种原因
  • 数据库切片
  • tomcat热部署
  • c++
  • linux系统编程
  • proc*c/c++简介
  • [one_demo_14]一个简单的easyui的demo
  • ztree
  • PowerDesigner
  • POI简单介绍
  • shiro
  • Docker入门(二) - Dockerfile
  • iOS 系统授权开发
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • js操作时间(持续更新)
  • learning koa2.x
  • Python socket服务器端、客户端传送信息
  • Vue全家桶实现一个Web App
  • Vue学习第二天
  • Windows Containers 大冒险: 容器网络
  • 近期前端发展计划
  • 聊一聊前端的监控
  • 前端存储 - localStorage
  • 前端性能优化--懒加载和预加载
  • 通信类
  • 如何正确理解,内页权重高于首页?
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • #1015 : KMP算法
  • #define与typedef区别
  • #Spring-boot高级
  • #在 README.md 中生成项目目录结构
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (补)B+树一些思想
  • (初研) Sentence-embedding fine-tune notebook
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (附源码)计算机毕业设计大学生兼职系统
  • (三)elasticsearch 源码之启动流程分析
  • (一)基于IDEA的JAVA基础10
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • .NET 4.0中的泛型协变和反变
  • .NET 8.0 发布到 IIS
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .Net程序帮助文档制作
  • :not(:first-child)和:not(:last-child)的用法
  • @font-face 用字体画图标
  • [ C++ ] STL---仿函数与priority_queue
  • [ CTF ]【天格】战队WriteUp- 2022年第三届“网鼎杯”网络安全大赛(青龙组)
  • [Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操作
  • [autojs]autojs开关按钮的简单使用
  • [C++核心编程](四):类和对象——封装
  • [Gym-102091E] How Many Groups