Solr(六)solr集群搭建与使用

读此文之前建议先读单机版的安装和使用:Solr(一)solr的介绍、linux安装、使用 

什么是SolrCloud

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

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

它有几个特色功能:

1)集中式的配置信息

2)自动容错

3)近实时搜索

4)查询时自动负载均衡


Solr集群的搭建

solrcloud为了降低单机的处理压力,需要由多台服务器共同来完成索引和搜索任务实现的思路是将索引数据进行Shard分片,每个分片由多台服务器共同完成,当一个索引或搜索请求过来时会分别从不同的Shard的服务器中操作索引solrcloud是基于solr和zookeeper部署zookeeper是一个集群管理软件,solrcloud需要由多台solr服务器组成,然后由zookeeper来进行协调管理。

SolrCloud结构图如下:

需要三个zookeeper节点

四个solr节点。

使用伪分布式实现solr集群。需要三个zookeeper实例,4tomcat实例,可以在一台虚拟机上模拟。建议虚拟机1G以上内存。


Zookeeper集群的搭建

前提条件

三个zookeeper实例。Zookeeper也是java开发的所以需要安装jdk

1、Linux系统

2、Jdk环境。

3、Zookeeper

Zookeeper的安装步骤:

第一步:把zookeeper的安装包上传到服务器

第二步:解压缩。

[root@solr ~]# tar -zxvf zookeeper-3.4.6.tar.gz

第三步:在/home/目录下创建一个solrcloud目录。把zookeeper解压后的文件夹复制到此目录下三份。分别命名为zookeeper1、2、3

[root@solr ~]# mkdir /home/solrcloud

[root@solr ~]# mv zookeeper-3.4.6 /home/solrcloud/zookeeper1

[root@solr ~]# cd /home/solrcloud/

[root@solr solrcloud]# cp -r zookeeper1/ zookeeper2

[root@solr solrcloud]# cp -r zookeeper1/ zookeeper3

第四步:配置zookeeper

1、在每个zookeeper文件夹下创建一个data目录。

2、data文件夹下创建一个文件名称为myid,文件的内容就是此zookeeper的编号123

[root@solr solrcloud]# echo 1 >> zookeeper1/data/myid

[root@solr solrcloud]# echo 2 >> zookeeper2/data/myid

[root@solr solrcloud]# echo 3 >> zookeeper3/data/myid

3、分别把zookeeper123conf目录下的zoo_sample.cfg文件复制一份改名为zoo.cfg

[root@solr conf]# cp zoo_sample.cfg zoo.cfg

4、分别修改zookeeper123配置文件zoo.cfgzookeeper2clientPort=2182zookeeper3clientPort=2183

dataDir=/home/solrcloud/zookeeper1/data/

clientPort=2181

server.1=192.168.168.128:2881:3881

server.2=192.168.168.128:2882:3882

server.3=192.168.168.128:2883:3883


第五步:启动zookeeper。进入zookeeper1/bin目录下。

启动zookeeper./zkServer.sh start

关闭:./zkServer.sh stop

查看状态:./zkServer.sh status

[root@solr solrcloud]# zookeeper1/bin/zkServer.sh start

JMX enabled by default

Using config: /home/solrcloud/zookeeper1/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED

[root@solr solrcloud]# zookeeper2/bin/zkServer.sh start

JMX enabled by default

Using config: /home/solrcloud/zookeeper2/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED

[root@solr solrcloud]# zookeeper3/bin/zkServer.sh start

JMX enabled by default

Using config: /home/solrcloud/zookeeper3/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED

 

查看状态:

[root@solr solrcloud]# zookeeper1/bin/zkServer.sh status

JMX enabled by default

Using config: /home/solrcloud/zookeeper1/bin/../conf/zoo.cfg

Mode: follower

[root@solr solrcloud]# zookeeper2/bin/zkServer.sh status

JMX enabled by default

Using config: /home/solrcloud/zookeeper2/bin/../conf/zoo.cfg

Mode: leader

[root@solr solrcloud]# zookeeper3/bin/zkServer.sh status

JMX enabled by default

Using config: /home/solrcloud/zookeeper3/bin/../conf/zoo.cfg

Mode: follower

Solr实例的搭建

第一步:创建4tomcat实例(可以复制solr目录下的tomcat),修改其端口:8080-8083

[root@solr ~]# cp /home/solr/tomcat/ /home/solrcloud/tomcat1/ -r

[root@solr ~]# cp /home/solr/tomcat/ /home/solrcloud/tomcat2/ -r

[root@solr ~]# cp /home/solr/tomcat/ /home/solrcloud/tomcat3/ -r

[root@solr ~]# cp /home/solr/tomcat/ /home/solrcloud/tomcat4/ -r

 

修改tomcat2tomcat3tomcat4的配置文件:(要改3处地方)

[root@solr solrcloud]# vi tomcat2/conf/server.xml



第二步:创建solrhome1234,(把solrsolrhome复制到solrcloud)。

[root@solr solr]# cp solrhome/ /home/solrcloud/solrhome1 -r

[root@solr solr]# cp solrhome/ /home/solrcloud/solrhome2 -r

[root@solr solr]# cp solrhome/ /home/solrcloud/solrhome3 -r

[root@solr solr]# cp solrhome/ /home/solrcloud/solrhome4 -r

 

修改web.xml指定solrhome的位置(其他3tomcat实例的修改这里就不做演示)。

[root@solr solrcloud]# vi tomcat1/webapps/solr/WEB-INF/web.xml

第三步(这一步骤是非必须的):写shell脚本来批量开启和关闭tomcat服务器,就不用逐个去开启和关闭。

[root@solr solrcloud]# vi shutdownAll.sh

./tomcat1/bin/shutdown.sh

./tomcat2/bin/shutdown.sh

./tomcat3/bin/shutdown.sh

./tomcat4/bin/shutdown.sh

[root@solr solrcloud]# vi startupAll.sh

./tomcat1/bin/startup.sh

./tomcat2/bin/startup.sh

./tomcat3/bin/startup.sh

./tomcat4/bin/startup.sh


shutdownAll.sh startupAll.sh执行权限

[root@solr solrcloud]# chmod 755 ./shutdownAll.sh

[root@solr solrcloud]# chmod 755 ./startupAll.sh


solr集群的搭建

第一步:修改每个solrhome下的solr.xml文件,指定对应solr服务的tomcat的ip和端口。

[root@solr solrcloud]# vi solrhome1/solr.xml


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

[root@solr solrcloud]# vi tomcat1/bin/catalina.sh

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

(可以使用vim的查找功能查找到JAVA_OPTS的定义的位置,然后添加)


第三步:把solrhome中的配置文件上传到zookeeper集群。使用zookeeper的客户端上传。

客户端命令位置:/root/training/solr-4.10.3/example/scripts/cloud-scripts

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

注意:只需要上传solrhome1的就行了,因为solrhome1234conf的文件信息都是完全一样的。

查看配置文件是否上传成功:

[root@solr bin]# ./zkCli.sh

[zk: localhost:2181(CONNECTED) 28] ls /configs/myconf

[currency.xml, mapping-FoldToASCII.txt, protwords.txt, scripts.conf, synonyms.txt, stopwords.txt, velocity, _schema_analysis_synonyms_english.json, admin-extra.html, update-script.js, _schema_analysis_stopwords_english.json, solrconfig.xml, admin-extra.menu-top.html, elevate.xml, schema.xml, clustering, xslt, _rest_managed.json, mapping-ISOLatin1Accent.txt, spellings.txt, lang, admin-extra.menu-bottom.html]

第四步:执行startupAll.sh脚本,启动tomcat

一个主节点多个备份节点,集群只有一片。

第五步:创建一个两片的collection,每片是一主一备。

使用以下命令创建:

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


第六步:删除collection1

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

Solr集群的使用

使用solrj操作集群环境的索引库。

public class SolrCloudTest {
	
	@Test
	public void testAddDocument() throws Exception {
		//创建一个和solr集群的连接
		//参数就是zookeeper的地址列表,使用逗号分隔
		String zkHost = "192.168.168.128:2181,192.168.168.128:2182,192.168.168.128:2183";
		CloudSolrServer solrServer = new CloudSolrServer(zkHost);
		//设置默认的collection
		solrServer.setDefaultCollection("collection2");
		//创建一个文档对象
		SolrInputDocument document = new SolrInputDocument();
		//向文档中添加域
		document.addField("id", 2);
		document.addField("productId", 2);
		document.addField("productTitle", "测试商品2");
		document.addField("productValidStart", "2018-01-01");
		document.addField("productValidEnd", "2018-05-05");
		document.addField("merchantName", "去哪儿");
		document.addField("productType", "一日游");
		document.addField("countryName", "新加坡");
		document.addField("merchantId", "23");
		//把文档添加到索引库
		solrServer.add(document);
		//提交
		solrServer.commit();
	}
	
	@Test
	public void deleteDocument() throws SolrServerException, IOException {
		//创建一个和solr集群的连接
		//参数就是zookeeper的地址列表,使用逗号分隔
		String zkHost = "192.168.168.128:2181,192.168.168.128:2182,192.168.168.128:2183";
		CloudSolrServer solrServer = new CloudSolrServer(zkHost);
		//设置默认的collection
		solrServer.setDefaultCollection("collection2");
		
		solrServer.deleteByQuery("*:*");
		solrServer.commit();
	}
}

Solrj(集群)和spring集成

resource.properties

#集群版
SOLRClOUD.SERVER.URL =192.168.168.128:2181,192.168.168.128:2182,192.168.168.128:2183

在applicationContext-solr.xml添加:

<bean id="cloudSolrServer" class="org.apache.solr.client.solrj.impl.CloudSolrServer">
	<constructor-arg name="zkHost" value="${SOLRClOUD.SERVER.URL}"></constructor-arg>
	<property name="defaultCollection" value="collection2"></property>
</bean>

猜你喜欢

转载自blog.csdn.net/b_evan/article/details/79743382
今日推荐