1 什么是SolrCloud?

SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。

当一个系统的索引数据量少的时候是不需要使用SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使用SolrCloud来满足这些需求。

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

它有几个特色功能

1)集中式的配置信息

2)自动容错

3)近实时搜索

4)查询时自动负载均衡

2 Solr集群的系统架构

1 物理结构

三个Solr实例( 每个实例包括两个Core),组成一个SolrCloud。

2 逻辑结构

索引集合包括两个Shard(shard1和shard2),shard1和shard2分别由三个Core组成,

其中一个Leader两个Replication,Leader是由zookeeper选举产生,zookeeper控制

每个shard上三个Core的索引数据一致,解决高可用问题。
用户发起索引请求分别从shard1和shard2上获取,解决高并发问题。

collection
Collection在SolrCloud集群中是一个逻辑意义上的完整的索引结构。它常常被划分为一个或多个Shard(分片),它们使用相同的配置信息。
比如:针对商品信息搜索可以创建一个collection。
collection=shard1+shard2+....+shardX

Core
每个Core是Solr中一个独立运行单位,提供 索引和搜索服务。一个shard需要由一个Core或多个Core组成。由于collection由多个shard组成所以collection一般由多个core组成。
Master或Slave
Master是master-slave结构中的主结点(通常说主服务器),Slave是master-slave结构中的从结点(通常说从服务器或备服务器)。同一个Shard下master和slave存储的数据是一致的,这是为了达到高可用目的。

Shard
Collection的逻辑分片。每个Shard被化成一个或者多个replication,通过选举确定哪个是Leader。

3  需要实现的solr集群架构

Zookeeper作为集群的管理工具。
1、集群管理:容错、负载均衡。
2、配置文件的集中管理
3、集群的入口

需要实现zookeeper 高可用。需要搭建集群。建议是奇数节点。需要三个zookeeper服务器。

搭建solr集群需要7台服务器。

搭建伪分布式:
需要三个zookeeper节点
需要四个tomcat节点。

建议虚拟机的内容1G以上。

4 环境准备

CentOS-6.5-i386-bin-DVD1.iso
jdk-7u72-linux-i586.tar.gz
apache-tomcat-7.0.47.tar.gz
zookeeper-3.4.6.tar.gz
solr-4.10.3.tgz

5 安装单机版Zookeeper

参照教程:http://www.cnblogs.com/jepson6669/p/9094101.html

1 上传文件到Linux上
2 解压到/usr/local目录下
3.进入zookeeper目录,创建data文件夹
4.进入conf目录把zoo_sample.cfg 改名为zoo.cfg.

5.进入zoo.cfg修改快照保存的目录为上面创建的data目录

dataDir=/usr/local/solr-cloud/zookeeper01/data

6  Zookeeper集群搭建

第一步:需要安装jdk环境

没有安装的可以参考教程:http://www.cnblogs.com/jepson6669/p/8374699.html

第二步:在/usr/local/创建目录solr-cloud

第三步:将第5部分中安装的单机版zookeeper,复制三分到solr-cloud目录下,分别为zookeeper01,zookeeper02,zookeeper03

# cp -r zookeeper-3.4.6/ /usr/local/solr-cloud/zookeeper02
# cp -r zookeeper-3.4.6/ /usr/local/solr-cloud/zookeeper02
# cp -r zookeeper-3.4.6/ /usr/local/solr-cloud/zookeeper03

第四步:在zookeeper01,zookeeper02,zookeeper03的目录下的data目录中分别创建myid文件,

内容就是每个实例的id。例如1、2、3

# echo 1 > ./zookeeper01/data/myid
# echo 2 > ./zookeeper02/data/myid
# echo 3 > ./zookeeper03/data/myid

 使用echo命令创建文件

# echo 2 > myid 创建一个文件名叫myid 的文件内容为2

五步:修改zookeeper01,zookeeper02,zookeeper03的zoo.cfg文件

1.修改数据保存的目录

2.修改客户端连接zookeeper的端口号

3.添加集群中的节点列表

下面是zookeeper01/conf/zoo.cfg实例。

第六步:启动三个zookeeper实例,修改编写一个批处理脚本,启动之后需要等待一会,然后在查看状态。

查看服务的状态同样可以写一个批处理脚本

可以看到状态如下:

7 Solr集群的搭建

【说明:因为第一次安装失败了,笔记是两次安装综合到一起的,所以ip地址有的地方是192.128.25.128

有的地方又是192.168.25.130】

第一步:创建四个tomcat实例。直接复制tomcat 四分到/usr/local/solr-cloud/目录下,分别命名为tomcat01,tomcat02,tomcat03,tomcat04.

第二步:往四个tomcat实例里面部署solr实例。这里直接使用之前单机版配置好的solr

单机版的solr搭建可以参考:http://www.cnblogs.com/jepson6669/p/9053880.html

第三步:修改四个tomcat实例的端口号8180,8280,8380,8480

下面给出tomcat01的修改示例:

其它三个tomcat的修改依次类推。

第四步:为每个solr实例创建一个对应的solrhome。使用单机版的solrhome复制四份

第五步:需要修改solr的web.xml文件。把solrhome关联起来

以tomcat02为例:

第六步:配置solrCloud相关的配置。每个solrhome下都有一个solr.xml,把其中的ip及端口号配置好

第七步:修改tomcat/bin目录下的catalina.sh 文件,关联solr和zookeeper

把此配置添加到配置文件中:
JAVA_OPTS="-DzkHost=192.168.25.128:2181,192.168.25.128:2182,192.168.25.128:2183"

四个tomcat实例都需要做下面的修改。

第八步: 让zookeeper统一管理配置文件。需要把solrhome/collection1/conf目录上传到zookeeper。上传任意一个solrhome中的配置文件即可。

 工具的位置在:解压solr-4.10.3.tgz.tgz得到solr-4.10.3里面的example/scripts/cloud-scripts/zkcli.sh

我们使用zkcli.sh这个工具,把我们的配置文件上传到zookeeper。

使用下面的命令:

./zkcli.sh -zkhost 192.168.25.130:2181,192.168.25.130:2182,192.168.25.130:2183 -cmd upconfig -confdir /usr/local/solr-cloud/solrhome01/collection1/conf -confname myconf

查看zookeeper上的配置文件:
使用zookeeper目录下的bin/zkCli.sh命令查看zookeeper上的配置文件:

直接使用命令./zkCli.sh就可以连接上,

但是直接连接上的是localhost:2181这个zookeeper。

默认连接的就是2181这个zookeeper

输入quit退出

连接指定端口的zookeeper使用下面的命名

[root@admin bin]# ./zkCli.sh -server 192.168.25.130:2182

这个时候我们连接的就是192.168.25.130:2182的zookeeper。

连接到集群中的任何节点,都可以使用下面命令查看根目录下有多少个配置文件

# ls /

可以看到里面有一个configs,执行命令 ls /configs 可以看到下面有一个myconf

这个myconf也就是我们执行下面这条命令的时候指定的

./zkcli.sh -zkhost 192.168.25.130:2181,192.168.25.130:2182,192.168.25.130:2183 -cmd upconfig -confdir /usr/local/solr-cloud/solrhome01/collection1/conf -confname myconf

执行命令 ls /configs/myconf ,可以看到里面就有我们上传上来的配置文件

这就表示我们把配置文件上传到了zookeeper里面了。

使用命令quit推出去。

第九步:启动每个tomcat实例。要保证zookeeper集群是启动状态。

同样我们可以写一个批处理start-tomcat-all.sh,内容如下

授予所有用户执行的权限

[root@admin solr-cloud]# chmod a+x start-tomcat-all.sh

然后执行批处理命令,启动所有的tomcat

查看tomcat日志,确认是否启动起来了,如果虚拟机的内存小的话,需要等待特别长的时间,才能够启动起来

第十步:访问集群

8 solrcloud的collection管理

1 创建新的collection进行分片处理

在浏览器中的输入下面的命令,然后按回车。

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

解释:创建一个collection名称叫做collection3(name=collection3),分配的数量为1(numshard=2),有2个备份机(replicationFactor=2),每片都是一主一备,所有总的有两个备份机。

然后我们在查看一下cloud,效果如下

2 删除不用的collection

在浏览器中输入下面的命令,然后回车

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

然后查看一下cloud,效果如下

9 使用solrJ管理集群

1 使用步骤

第一步:把solrJ相关的jar包添加到工程中。

maven工程中添加下面的依赖

第二步:创建一个SolrServer对象,需要使用CloudSolrServer子类。构造方法的参数是zookeeper的地址列表。
第三步:需要设置DefaultCollection属性
第四步:创建一SolrInputDocument对象。
第五步:向文档对象中添加域
第六步:把文档对象写入索引库。
第七步:提交。

2 添加文档

//集群版添加文档
@Test
public void testSolrCloudAddDocument() throws Exception {
// 第一步:把solrJ相关的jar包添加到工程中。
// 第二步:创建一个SolrServer对象,需要使用CloudSolrServer子类。构造方法的参数是zookeeper的地址列表。
// 参数是zookeeper的地址列表,使用逗号分隔
CloudSolrServer solrServer = new CloudSolrServer("192.168.25.130:2181,192.168.25.130:2182,192.168.25.130:2183");
// 第三步:需要设置DefaultCollection属性。
solrServer.setDefaultCollection("collection3");
// 第四步:创建一SolrInputDocument对象。
SolrInputDocument document = new SolrInputDocument();
// 第五步:向文档对象中添加域
document.addField("item_title", "测试商品");
document.addField("item_price", "100");
document.addField("id", "test001");
// 第六步:把文档对象写入索引库。
solrServer.add(document);
// 第七步:提交。
solrServer.commit();
}

3 查询文档

//集群版查询文档
@Test
public void testSolrCloudQueryDocument() throws Exception {
//创建一个CloudSolrServer对象
CloudSolrServer cloudSolrServer = new CloudSolrServer("192.168.25.130:2181,192.168.25.130:2182,192.168.25.130:2183");
//设置默认的Collection
cloudSolrServer.setDefaultCollection("collection3");
//创建一个查询对象
SolrQuery query = new SolrQuery();
//设置查询条件
query.set("q", "*:*"); //*:*查询所有
//query.setQuery("*:*");
//执行查询
QueryResponse queryResponse = cloudSolrServer.query(query);
//取查询结果
SolrDocumentList solrDocumentList = queryResponse.getResults();
System.out.println("总共查询到"+solrDocumentList.getNumFound()+"条记录");
//遍历结果,打印
for (SolrDocument solrDocument : solrDocumentList) {
System.out.println(solrDocument.get("id"));
System.out.println(solrDocument.get("item_title"));
System.out.println(solrDocument.get("item_price"));
} }

10 单机版和集群版solr的applicationContext.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-4.2.xsd"> <!-- 单机版solr服务配置 -->
<!-- <bean id="httpSolrServer" class="org.apache.solr.client.solrj.impl.HttpSolrServer">
<constructor-arg index="0" value="http://47.93.53.127:18080/solr/collection1"></constructor-arg>
</bean> --> <!-- 集群版solr服务 -->
<bean id="cloudSolrServer" class="org.apache.solr.client.solrj.impl.CloudSolrServer">
<constructor-arg name="zkHost" value="192.168.25.130:2181,192.168.25.130:2182,192.168.25.130:2183"></constructor-arg>
<property name="defaultCollection" value="collection2"></property>
</bean>
</beans>

通过上面的配置文件可以很方便的在单机版和集群版之间切换。

solr集群的搭建教程和使用入门的更多相关文章

  1. Solr集群的搭建以及使用(内涵zookeeper集群的搭建指南)

    1   什么是SolrCloud SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud.当一个系统的索引数据量少的时候 ...

  2. solr集群的搭建

    solrCloud 昨天随手写了个solr单机版的搭建,今天准备写一个solr集群的搭建!1.solr集群只要环境配置正确还是比较简单的环境:CentOS-6.4-i386-bin-DVD1.isoj ...

  3. Solr集群的搭建概述(非教程)

    1.什么是SolrCloud SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud.当一个系统的索引数据量少的时候是不 ...

  4. Solr集群环境搭建

    一.准备工作 首先保证已经安装JDK工具包: [root@localhost opt]# java -version java version "1.8.0_144" Java(T ...

  5. RabbitMQ集群环境搭建教程收集(待实践)

    先收集,后续再实践. http://www.linuxidc.com/Linux/2016-10/136492.htm http://www.cnblogs.com/lion.net/p/572547 ...

  6. Solr集群搭建详细教程(二)

    注:欢迎大家转载,非商业用途请在醒目位置注明本文链接和作者名dijia478,商业用途请联系本人dijia478@163.com. 之前步骤:Solr集群搭建详细教程(一) 三.solr集群搭建 注意 ...

  7. solr集群搭建(复制)

    Solr集群的搭建以及使用(内涵zookeeper集群的搭建指南) 1   什么是SolrCloud SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引 ...

  8. solr集群solrCloud的搭建

    上一章讲了solr单机版的搭建,本章将讲解sole集群的搭建.solr集群的搭建需要使用到zookeeper,搭建参见zookeeper集群的安装 一.solr实例的搭建 1. tomcat安装 这里 ...

  9. e3mall商城的归纳总结8之solr集群、activemq的搭建和使用

    由于本节内容比较分散,因此专门为这两个技术进行开展了帖子. solr集群的搭建 solr集群solrJ的测试 activemq的搭建 activemq的使用 引入activemq.jar包 我们先来说 ...

随机推荐

  1. How do I determine if I'm being run under the debugger?

    #include <assert.h>#include <stdbool.h>#include <sys/types.h>#include <unistd.h ...

  2. ASP.NET MVC验证DateTime的问题

    今天碰到一个Bug,在IE8中,日期验证失效,输入正确的日期格式也会验证失败,提示:xxx必须是日期格式(the field xxx must be a date) 最终找到问题所在:jquery.v ...

  3. 转载:爬虫技术浅析(Python)

    http://drops.wooyun.org/tips/3915 0x00 前言 网络爬虫(Web crawler),是一种“自动化浏览网络”的程序,或者说是一种网络机器人.它们被广泛用于互联网搜索 ...

  4. 字体变色详解链接:https://www.cnblogs.com/daofaziran/p/9015284.html

    格式:\033[显示方式;前景色;背景色m + 结尾部分:\033[0m 字体色 | 背景色 | 颜色描述 ------------------------------------------- 30 ...

  5. bat windows10系统垃圾清理---

    @echo off color 0a title windows10系统垃圾清理--- echo ★☆ ★☆ ★☆ ★☆ ★☆★☆★☆ ★☆ ★☆ ★☆ ★☆★ echo ★☆ ★☆ ★☆ ★☆ ★☆ ...

  6. ASP.NET WebApi总结之自定义权限验证

    在.NET中有两个AuthorizeAttribute类, 一个定义在System.Web.Http命名空间下 #region 程序集 System.Web.Http, Version=5.2.3.0 ...

  7. python网络编程--socketserver 和 ftp功能简单说明

    1. socketserver 我们之前写的tcp协议的socket是不是一次只能和一个客户端通信,如果用socketserver可以实现和多个客户端通信.它是在socket的基础上进行了一层封装,也 ...

  8. Verify the Developer App certificate for your account is trusted on your device.

    1.报错内容 Could not launch "CH5203" Verify the Developer App certificate for your account is ...

  9. Linux mint 安装踩坑记录

    记得之前电脑上的那个Ubuntu是去年寒假的时候安装的,算下来自己用Linux也快一年了.虽然在去年暑假的时候我也曾经想过要把Ubuntu升级到18.04可是当时安装了几次都没有成功,自己也就放弃了. ...

  10. CodeChef March Challenge 2019题解

    传送门 \(CHNUM\) 显然正数一组,负数一组 for(int T=read();T;--T){ n=read(),c=d=0; fp(i,1,n)x=read(),x>0?++c:++d; ...