Solr-cloud

来源:互联网 发布:软件app如何推广 编辑:程序博客网 时间:2024/06/17 09:19

简介

SolrCloud是Solr提供的分布式搜索方案。当需要大规模,容错,分布式索引和检索能力时们需要使用SolrColud。索引量十分大的时候,才需要使用到它。
基于Solr和Zookeeper的分布式搜索方案。由Zookeeper管理Solr集群,作为Solr的集群配置中心。

特色功能

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

架构

物理架构

多个Solr实例(每个实例构成多个Core,或者说成多个Collection索引库),构成一个SolrColud。

逻辑架构

索引集合中包括多个Shard(例如shard1和shard2),shard1由多个Core构成,其中一个Leader,多个Replication,Leader,是由Zookeepr选举产生,Zookeepr控制每个shard与多个Core的索引数据一致,解决高可用问题。
用户发气索引请求也从shard1和shard2中获取,解决高并发问题。

Solr的分片中的Core(索引库)由Zookeepr进行投票选举,决定谁为Leader,谁为Replication,通过半数投票,所以Zookeepr集群最好为奇数个集群,如果为偶数,有可能会地投票成一半对一半,则需要进行第二次投票,直至投出结果为止。所以建议Zookeepr集群最低为3个或者以上。

安装

zookeeper集群

cp zookeeper-3.4.6 /zookeeper_solrcloud/solr-cloud/zookeeper1 -rcp zookeeper-3.4.6 /zookeeper_solrcloud/solr-cloud/zookeeper2 -rcp zookeeper-3.4.6 /zookeeper_solrcloud/solr-cloud/zookeeper3 -rcd /zookeeper_solrcloud/solr-cloud/zookeeper1cd data/touch myid  // 创建一个空文件.这个文件写的值为1,2,3。。。代表当前的节点的编号vim myid1:wqcat myid  //预览编辑后的文件cd ..cd confcp zoo_sample.cfg  zoo.cfg  //复制一份配置文件vim zoo.cfgdataDir=/zookeeper_solrclound/solr-cloud/zookeeper1/data/  //修改地址server.1=192.168.25.135:2881:3881   //2881 :  zookeeper节电之间通信的端口, 3881 : 节点之间选取的端口server.2=192.168.25.135:2882:3882server.3=192.168.25.135:2883:3883cd zookeeper2mkdir dataecho 2 >data/myid //创建myid文件  值为2cd conf/cp zoo_sample.cfg  zoo.cfg  //复制一份配置文件vim zoo.cfgdataDir=/zookeeper_solrclound/solr-cloud/zookeeper2/data/clientPort=2182 server.1=192.168.25.135:2881:3881server.2=192.168.25.135:2882:3882server.3=192.168.25.135:2883:3883cd zookeeper3mkdir dataecho 2 >data/myid //创建myid文件  值为2cd conf/cp zoo_sample.cfg  zoo.cfg  //复制一份配置文件vim zoo.cfgdataDir=/zookeeper_solrclound/solr-cloud/zookeeper3/data/clientPort=2183 server.1=192.168.25.135:2881:3881server.2=192.168.25.135:2882:3882server.3=192.168.25.135:2883:3883//编写批处理启动文件cd zookeeper1/bin/./zkServer.sh startcd ..cd ..cd zookeeper2/bin/./zkServer.sh startcd ..cd ..cd zookeeper3/bin/./zkServer.sh startcd .. 
./zkServer.sh statusJMX enabled by defaultUsing config: /zookeeper_solrclound/solr-cloud/zookeeper1/bin/../conf/zoo.cfgMode: leader   //Leader  领导者cd zookeeper2[root@localhost zookeeper2]# cd bin/[root@localhost bin]# ./zkServer.sh statusJMX enabled by defaultUsing config: /zookeeper_solrclound/solr-cloud/zookeeper2/bin/../conf/zoo.cfgMode: follower   //从集cd zookeeper3/b-bash: cd: zookeeper3/b: No such file or directory[root@localhost solr-cloud]# cd zookeeper3/bin/[root@localhost bin]# ./zkServer.sh statusJMX enabled by defaultUsing config: /zookeeper_solrclound/solr-cloud/zookeeper3/bin/../conf/zoo.cfgMode: follower  //从集 //查看主从关系

solr-cloud集群

cp apache-tomcat-7.0.47 /zookeeper_solrclound/solr-cloud/tomcat1 -rcp apache-tomcat-7.0.47 /zookeeper_solrclound/solr-cloud/tomcat2 -rcp apache-tomcat-7.0.47 /zookeeper_solrclound/solr-cloud/tomcat3 -rcp apache-tomcat-7.0.47 /zookeeper_solrclound/solr-cloud/tomcat4 -r//把以前创建号的solr单机版复制过去,因为不用配置了,关于配置已经发出来了cp solr/ /zookeeper_solrclound/solr-cloud/tomcat1/webapps/ -r cp solr/ /zookeeper_solrclound/solr-cloud/tomcat2/webapps/ -rcp solr/ /zookeeper_solrclound/solr-cloud/tomcat3/webapps/ -rcp solr/ /zookeeper_solrclound/solr-cloud/tomcat4/webapps/ -r //修改每个tomcat的端口号 <Server port="8105"<Connector port="8180" <Connector port="8109"....依次类似//复制solrhome cp solrhome/ /zookeeper_solrclond/solr-cloud/solrhome01 -rcp solrhome/ /zookeeper_solrclond/solr-cloud/solrhome02 -rcp solrhome/ /zookeeper_solrclond/solr-cloud/solrhome03 -rcp solrhome/ /zookeeper_solrclond/solr-cloud/solrhome04 -r//修改每个复制的tomcatsolrhome目录vim tomcat1/webapps/solr/WEB-INF/web.xml <env-entry>       <env-entry-name>solr/home</env-entry-name>       <env-entry-value>/zookeeper_solrclound/solr-cloud/solrhome01/</env-entry-value>       <env-entry-type>java.lang.String</env-entry-type>    </env-entry>。。。  依次设置//修改每个solrhome的solr.xml文件vim solrhome01/solr.xml <solrcloud>    <str name="host">192.168.25.135</str>  //修改ip地址    <int name="hostPort">8180</int>    //修改为刚才设置端口号    <str name="hostContext">${hostContext:solr}</str>    <int name="zkClientTimeout">${zkClientTimeout:30000}</int>    <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>  </solrcloud>.....**依次设置**## 设置Solr和Zookeepr关联关系cd tomcat1/bin/vim catalina.sh  // JAVA_OPTS   : 配置运行时的环境变量,告诉zookeeper在哪里,才能连接zookeeper//加入JAVA_OPTS="-DzkHost=192.168.25.135:2181,192.168.25.135:2182,192.168.25.135:2183"  //每个tomcat都需要依次配置//有zookeeper管理每个solr节点对应的配置文件cd solr-4.10.3/example/scripts/cloud-scripts/./zkcli.sh -zkhost 192.168.25.135:2181,192.168.25.135:2182,192.168.25.135:2183 -cmd upconfig -confdir /zookeeper_solrclound/solr-cloud/solrhome01/collection1/conf -confname myconf   //上传<!-- 查看是否上传成功-->cd /zookeeper_solrclound/solr-cloud/zookeeper1/bin/./zkCli.sh -server 192.168.25.135:2182ls /configs/myconf  //查看文件是否存在,有就代表上传成功<!--设置一个批处理文件,启动tomcat -->vim start-tomcat.shtomcat1/bin/startup.sh tomcat2/bin/startup.sh tomcat3/bin/startup.sh tomcat4/bin/startup.sh <!-- 查看日志,是否每个tomcat启动成功--> tail -f tomcat3/logs/catalina.out

新增Collection

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

删除Collection

http://192.168.25.135:8280/solr/admin/collections?action=DELETE&name=collection1

代码测试

@Test    public void sorlCloudAdd() throws SolrServerException, IOException{        CloudSolrServer cloudSolrServer = new CloudSolrServer                ("192.168.25.135:2181,192.168.25.135:2182,192.168.25.135:2183");        cloudSolrServer.setDefaultCollection("collection2");    //  SolrServer solrServer = cloudSolrServer.getLbServer();        SolrInputDocument document = new SolrInputDocument();        document.setField("id", "Hello moto");        document.setField("item_title", "我的标题");        cloudSolrServer.add(document);        cloudSolrServer.commit();    }

XML配置

<!-- 单机版Solr -->    <!-- <bean id="httpSolrServer"   class="org.apache.solr.client.solrj.impl.HttpSolrServer">        <constructor-arg index="0" value="http://192.168.25.135:8080/solr/collection1"></constructor-arg>    </bean> -->    <!-- 集群版Solr -->    <bean id="cloudServer" class="org.apache.solr.client.solrj.impl.CloudSolrServer">        <constructor-arg index="0" value="192.168.25.135:2181,192.168.25.135:2182,192.168.25.135:2183" />        <property name="defaultCollection" value="collection2"></property>    </bean>
原创粉丝点击