欢迎投稿

今日深度:

solr集群,

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>

启动项目,测试。

 

www.htsjk.Com true http://www.htsjk.com/solr/38767.html NewsArticle solr集群, 一、  概述 SolrCloud是solr提供的分布式搜索方案。适用于大规模、容错、分布式索引和检索,解决高并发搜索问题。SolrCloud是基于solr和zookeeper,主要思想是使用zookeeper作为集...
相关文章
    暂无相关文章
评论暂时关闭