solr集群 SolrCloud

什么是SolrCloud

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

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

    它有几个特色功能:
        1)集中式的配置信息
        2)自动容错
        3)近实时搜索

        4)查询时自动负载均衡

SolrCloud 系统架构

    

【1】物理结构

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

【2】逻辑结构
索引集合包括两个Shard(shard1 和shard2),shard1 和shard2 分别由三个Core组成,其中一个Leader 两个Replication,Leader 是由zookeeper 选举产生,zookeeper 控制每个shard 上三个Core 的索引数据一致,解决高可用问题。用户发起索引请求分别从shard1 和shard2 上获取,解决高并发问题。

(1)Collection
Collection 在SolrCloud 集群中是一个逻辑意义上的完整的索引结构。它常常被划分为一个或多个Shard(分片),它们使用相同的配置信息。比如:针对商品信息搜索可以创建一个collection。collection=shard1+shard2+....+shardX
(2) Core
每个Core 是Solr 中一个独立运行单位,提供索引和搜索服务。一个shard 需要由一个Core 或多个Core 组成。由于collection由多个shard 组成所以collection 一般由多个
core 组成。
(3)Master 或Slave
Master 是master-slave 结构中的主结点(通常说主服务器),Slave 是master-slave 结构中的从结点(通常说从服务器或备服务器)。同一个Shard 下master 和slave 存储的数据是一致的,这是为了达到高可用目的。
(4)Shard

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

搭建SolrCloud

搭建要求

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

3、集群的入口

需要实现zookeeper 高可用,需要搭建zookeeper 集群。建议是奇数节点。需要三个
zookeeper 服务器。
搭建solr 集群需要7 台服务器。
搭建伪分布式:
需要三个zookeeper 节点
需要四个tomcat 节点。

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

准备工作
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

步骤:

(1)搭建Zookeeper 集群(按照Zookeeper 集群章节完成)
(2)将已经部署完solr.war 的tomcat 的上传到linux
(3)在linux 中创建文件夹/usr/local/solr-cloud 创建4 个tomcat 实例
[root@localhost ~]# mkdir /usr/local/solr-cloud
[root@localhost ~]# cp -r tomcat-solr /usr/local/solr-cloud/tomcat-1
[root@localhost ~]# cp -r tomcat-solr /usr/local/solr-cloud/tomcat-2
[root@localhost ~]# cp -r tomcat-solr /usr/local/solr-cloud/tomcat-3
[root@localhost ~]# cp -r tomcat-solr /usr/local/solr-cloud/tomcat-4

(4)将本地的solrhome 上传到linux

(5)在linux 中创建文件夹/usr/local/solrhomes ,将solrhome 复制4 份

[root@localhost ~]# mkdir /usr/local/solrhomes
[root@localhost ~]# cp -r solrhome /usr/local/solrhomes/solrhome-1
[root@localhost ~]# cp -r solrhome /usr/local/solrhomes/solrhome-2
[root@localhost ~]# cp -r solrhome /usr/local/solrhomes/solrhome-3
[root@localhost ~]# cp -r solrhome /usr/local/solrhomes/solrhome-4
(6)修改每个solr 的web.xml 文件, 关联solehome
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/usr/local/solrhomes/solrhome-1</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
(7)修改每个tomcat 的原运行端口 ,分别为
        8185 8180 8109
        8285 8280 8209
        8385 8380 8309
        8485 8480 8409

8005 端口是用来关闭TOMCAT 服务的端口。
8080 端口,负责建立HTTP 连接。在通过浏览器访问Tomcat 服务器的Web 应用时,使用的就是这个连
接器。
8009 端口,负责和其他的HTTP 服务器建立连接。在把Tomcat 与其他HTTP 服务器集成时,就需要用
到这个连接器。
配置集群

(1)修改每个tomcat 实例bin 目录下的catalina.sh 文件

把此配置添加到catalina.sh 中:

JAVA_OPTS="-DzkHost=192.168.25.135:2181,192.168.25.135:2182,192.168.25.135:2183"
此配置用于在tomcat 启动时找到zookeeper 集群。

(2)配置solrCloud 相关的配置。每个solrhome 下都有一个solr.xml,把其中的ip 及端口号配置好(是对应的tomcat 的IP 和端口)。
solrhomes/solrhome-1/solr.xml

<solrcloud>
<str name="host">192.168.25.135</str>
<int name="hostPort">8180</int>
<str name="hostContext">${hostContext:solr}</str>
<int name="zkClientTimeout">${zkClientTimeout:30000}</int>
<bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
</solrcloud>

solrhomes/solrhome-2/solr.xml

<solrcloud>
<str name="host">192.168.25.135</str>
<int name="hostPort">8280</int>
<str name="hostContext">${hostContext:solr}</str>
<int name="zkClientTimeout">${zkClientTimeout:30000}</int>
<bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
</solrcloud>

solrhomes/solrhome-3/solr.xml [略...]

solrhomes/solrhome-4/solr.xml [略...]


(3)让zookeeper 统一管理配置文件。需要把solrhome 下collection1/conf 目录上传到
zookeeper。上传任意solrhome 中的配置文件即可。
我们需要使用solr 给我们提供的工具上传配置文件:
solr-4.10.3/example/scripts/cloud-scripts/zkcli.sh
将solr-4.10.3 压缩包上传到linux,解压,然后进入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 /usr/local/solrhomes/solrhome-1/collection1/conf -confname myconf
参数解释
-zkhost :指定zookeeper 地址列表
-cmd :指定命令。upconfig 为上传配置的命令
-confdir : 配置文件所在目录
-confname : 配置名称
启动集群

(1)启动每个tomcat 实例。要保证zookeeper 集群是启动状态。

如果你想让某个文件夹下都可以执行,使用以下命令实现

chmod -R 777 solr-cloud

访问集群

地址栏输入http://192.168.25.135:8180/solr ,可以看到Solr 集群版的界面



下图表示的是,一个主节点,三个从节点。


SpringDataSolr 连接SolrCloud

在SolrJ 中提供一个叫做CloudSolrServer 的类,它是SolrServer 的子类,用于连接solrCloud

它的构造参数就是zookeeper 的地址列表

CloudSolrServer solrServer=new CloudSolrServer("192.168.25.135:2181,192.168.25.135:2182,192.168.25.135:2183");

另外它要求要指定defaultCollection 属性(默认的collection 名称)


我们现在修改springDataSolrDemo 工程的配置文件,把原来的solr-server 注销,替换为CloudSolrServer .指定构造参数为地址列表,设置默认collection 名称
<!-- solr 服务器地址
<solr:solr-server id="solrServer" url="http://192.168.25.129:8080/solr" />
-->
<bean id="solrServer" class="org.apache.solr.client.solrj.impl.CloudSolrServer">
<constructor-arg
value="192.168.25.135:2181,192.168.25.135:2182,192.168.25.135:2183" />
<property name="defaultCollection" value="collection1"></property>
</bean>
分片配置

(1)创建新的Collection 进行分片处理。

在浏览器输入以下地址,可以按照我们的要求创建新的Collection

http://192.168.25.135:8180/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2
参数:
name:将被创建的集合的名字
numShards:集合创建时需要创建逻辑碎片的个数

replicationFactor:分片的副本数。


看到这个提示表示成功

(2)删除不用的Collection。执行以下命令

http://192.168.25.135:8480/solr/admin/collections?action=DELETE&name=collection1
页面如下,删除成功


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值