Solr集群(伪集群)搭建

什么是SolrCloud:

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

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

它有几个特色功能:

1)集中式的配置信息

2)自动容错

3)近实时搜索

4)查询时自动负载均衡

SolrCloud结构:

SolrCloud为了降低单机的处理压力,需要由多台服务器共同来完成索引和搜索任务。实现的思路是将索引数据进行Shard(分片)拆分,每个分片由多台的服务器共同完成,当一个索引或搜索请求过来时会分别从不同的Shard的服务器中操作索引。

SolrCloud需要Solr基于Zookeeper部署,Zookeeper是一个集群管理软件,由于SolrCloud需要由多台服务器组成,由zookeeper来进行协调管理。

下图是一个SolrCloud应用的例子:


物理结构:需要实现能看到、配置得了的东西。

逻辑结构:看不见、莫不着的。

环境搭建:3个zookeeper实例、4个tomcat实例、在一台虚拟机上模拟。

采用伪集群的方式进行安装,如果是真正的生产环境,将伪集群的ip改下就可以了,步骤是一样的。

环境准备:

centos6.5

jdk1.7

apache-tomcat7

zookeeper

solr

环境安装:

centos6.5:略   、 

jdk:略

zookeeper搭建,请点击  

solr集群搭建:

1、先创建4个tomcat实例。

上传解压tomcat安装包,复制4个解压文件到/usr/local/solrcloud/目录下,分别命名tomcat1、tomcat2、tomcat3、tomcat4

cp apache-tomcat-7.0.47 /usr/local/solrcloud/tomcat1 -r 

cp apache-tomcat-7.0.47 /usr/local/solrcloud/tomcat2 -r 

cp apache-tomcat-7.0.47 /usr/local/solrcloud/tomcat3 -r 

cp apache-tomcat-7.0.47 /usr/local/solrcloud/tomcat4 -r 

2、修改端口8080:8083

示范tomcat2,改3个地方。其它一样:




3、安装solr(跟单机版一样)

上传、解压安装文件,从解压文件dist目录中复制solr.war到tomcat中。

cd solr-4.10.3/dist/

cp solr-4.10.3.war /usr/local/solrcloud/tomcat1/webapps/solr.war

cp solr-4.10.3.war /usr/local/solrcloud/tomcat2/webapps/solr.war

cp solr-4.10.3.war /usr/local/solrcloud/tomcat3/webapps/solr.war

cp solr-4.10.3.war /usr/local/solrcloud/tomcat4/webapps/solr.war

启动tomcat来解压solr.war

cd /usr/local/solrcloud/

tomcat1/bin/startup.sh 

tomcat2/bin/startup.sh 

tomcat3/bin/startup.sh 

tomcat4/bin/startup.sh 

为了方便可以写个脚本启动和关闭




 


启动:./startall.sh

停止:./shutdownall.sh

将原来的solr.war删除。

4、拷贝example\lib\ext 目录下所有jar包到Tomcatwebapp\solr\WEB-INF\lib目录下

cd solr-4.10.3/example/lib/ext/

cp ./* /usr/local/solrcloud/tomcat1/webapps/solr/WEB-INF/lib/

cp ./* /usr/local/solrcloud/tomcat2/webapps/solr/WEB-INF/lib/

cp ./* /usr/local/solrcloud/tomcat3/webapps/solr/WEB-INF/lib/

cp ./* /usr/local/solrcloud/tomcat4/webapps/solr/WEB-INF/lib/

5、在Tomcat下webapps\solr\WEB-INF目录中创建文件classes文件夹,拷贝log4j.properties文件

mkdir /usr/local/solrcloud/tomcat1/webapps/solr/WEB-INF/classes

mkdir /usr/local/solrcloud/tomcat2/webapps/solr/WEB-INF/classes

mkdir /usr/local/solrcloud/tomcat3/webapps/solr/WEB-INF/classes

mkdir /usr/local/solrcloud/tomcat4/webapps/solr/WEB-INF/classes

cd solr-4.10.3/example/resources/

cp log4j.properties /usr/local/solrcloud/tomcat1/webapps/solr/WEB-INF/classes/

cp log4j.properties /usr/local/solrcloud/tomcat2/webapps/solr/WEB-INF/classes/

cp log4j.properties /usr/local/solrcloud/tomcat3/webapps/solr/WEB-INF/classes/

cp log4j.properties /usr/local/solrcloud/tomcat4/webapps/solr/WEB-INF/classes/

4、进入example目录下拷贝4次solr到solrcloud下面,存放solr配置文件

cd solr-4.10.3/example/

cp -r solr /usr/local/solrcloud/solrhome1

cp -r solr /usr/local/solrcloud/solrhome2

cp -r solr /usr/local/solrcloud/solrhome3

cp -r solr /usr/local/solrcloud/solrhome4

5、修改web.xml找到对应配置文件目录

cd /usr/local/solrcloud/

vi tomcat1/webapps/solr/WEB-INF/web.xml 

记得去掉注释!


启动访问测试:

./startall.sh 

192.168.132.132:8080/solr

192.168.132.132:8081/solr

192.168.132.132:8082/solr

192.168.132.132:8083/solr

把solrhome中的配置文件上传到zookeeper集群,使用zookeeper的客户端上传

在solr-4.10.3/example/scripts/cloud-scripts/目录下执行下面命令:

./zkcli.sh -zkhost 192.168.132.132:2181,192.168.132.132:2182,192.168.132.132:2183 -cmd upconfig -confdir /usr/local/solrcloud/solrhome1/collection1/conf -confname myconf

登录zookeeper服务器查询配置文件

cd /usr/local/zookeeper/bin/

./zkCli.sh

6、修改4个solrhome下的solr.xml文件,指定当前实例运行的ip地址及端口









7、修改每一台的tomcat的bin目录下catalina.sh文件中加入DzkHost指定zookeeper服务器地址:

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




启动tomcat:

./startall.sh

随便访问一个就看到左边多了一个cloud

一主多备,集群只有一片,目的是要有2片,每片都是一主一备

8、创建一个两片的collection,每片都是一主一备

在浏览器下使用一下命令:

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


重新再访问一次集群:


再把collection1删除掉就可以了(可以共存多个collection)

http://192.168.132.132:8080/solr/admin/collections?action=DELETE&name=collection1



8、配置业务字段

在solr中默认是中文分析器,需要手工配置,配置一个FieldType,在FieldType中指定中文分析器。solr中的字段必须是先定义后使用。

使用IKAnalyzer,把分析器的文件夹拖到服务器



cd IK Analyzer 2012FF_hf1

cp IKAnalyzer2012FF_u1.jar /usr/local/solrcloud/tomcat1/webapps/solr/WEB-INF/lib/

cp IKAnalyzer2012FF_u1.jar /usr/local/solrcloud/tomcat2/webapps/solr/WEB-INF/lib/

cp IKAnalyzer2012FF_u1.jar /usr/local/solrcloud/tomcat3/webapps/solr/WEB-INF/lib/

cp IKAnalyzer2012FF_u1.jar /usr/local/solrcloud/tomcat4/webapps/solr/WEB-INF/lib/

把IKAnalyzer需要的扩展词典及停用词词典和配置文件复制到solr工程的classpath

cp IKAnalyzer.cfg.xml ext_stopword.dic mydict.dic /usr/local/solrcloud/tomcat1/webapps/solr/WEB-INF/classes/

cp IKAnalyzer.cfg.xml ext_stopword.dic mydict.dic /usr/local/solrcloud/tomcat2/webapps/solr/WEB-INF/classes/

cp IKAnalyzer.cfg.xml ext_stopword.dic mydict.dic /usr/local/solrcloud/tomcat3/webapps/solr/WEB-INF/classes/

cp IKAnalyzer.cfg.xml ext_stopword.dic mydict.dic /usr/local/solrcloud/tomcat4/webapps/solr/WEB-INF/classes/

配置FieldType和业务字段:

业务字段判断标准:

1、在搜索时是否需要在此字段上进行搜索(结合商城例如:商品名称、卖点、描述)

2、后续的业务是否需要用到此字段

在/usr/local/solrhome1/collection2/conf/schema.xml:

如果每个solrhome下面没有collection2就从解压文件里面拷贝过来,并改名为collection2

<fieldType name="text_ik" class="solr.TextField">
  <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
<field name="item_title" type="text_ik" indexed="true" stored="true"/>
<field name="item_sell_point" type="text_ik" indexed="true" stored="true"/>
<field name="item_price"  type="long" indexed="true" stored="true"/>
<field name="item_image" type="string" indexed="false" stored="true" />
<field name="item_category_name" type="string" indexed="true" stored="true" />
<field name="item_desc" type="text_ik" indexed="true" stored="false" />

<field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
<copyField source="item_title" dest="item_keywords"/>
<copyField source="item_sell_point" dest="item_keywords"/>
<copyField source="item_category_name" dest="item_keywords"/>
<copyField source="item_desc" dest="item_keywords"/>

测试:

spring集成:相对于单机版只需要改一下xml配置文件,如下:




结合工程导入数据:

http://localhost:8084/search/manager/importall











猜你喜欢

转载自blog.csdn.net/qq_26857649/article/details/79316546