搭建基于Zookeeper的SolrCloud集群

SolrCloud是基于Solr和Zookeeper的分布式搜索方案, 就是使用 Zookeeper作为集群的配置信息中心,solrCloud提供分布式的搜索能力。

Zookeeper的作用: 几种管理配置文件, 集群管理 (帮助solr选举主从)

为什么需要SolrCloud?

我们一般都是在需要大规模的索引数据量, 搜索请求的并发量很高, 要求容错能力强的时候, 就会考虑使用SolrCloud来满足这些需求. 总的来说就是基于以下三个方面:

  • 扩展存储: 单机版的solr存储有限
  • 高可用的考虑: 备份
  • 高并发的场景: 搜索效率更高

SolrCloud集群的搭建

接下来我们安装的依然是SolrCloud的伪集群, 正常生产环境中我们肯定是安装在多台服务器上的, 而现在我们是安装在一台服务器(虚拟机)上, 通过不同的端口来区别.

准备工作:

  • 安装并启动3台Zookeeper -> 教程直达链接
  • 装有solr的单机版Tomcat和solrhome
  • solr的安装包

在正式安装之前, 我们先来说一下需要哪些步骤:

  1. 将装有solr的单机版Tomcat和solrhome打成zip压缩包, 上传到linux中, 并解压.
  2. 将Tomcat和solrhome分别复制4份.
  3. 修改Tomcat的配置文件, 关联Tomcat和solrhome使其一一对应.
  4. 修改Tomcat的端口, 防止发生冲突. (因为是在一台服务器上, 所以要以端口来区分)
  5. 配置Tomcat的catalina.sh文件, 让Tomcat能够找到三台Zookeeper.
  6. 配置solrhome的配置文件solr.xml, 让solrhome能找到自己的Tomcat (IP和端口一致)
  7. 执行solr安装包下的一个脚本文件, 可以将solr的配置文件交给Zookeeper管理
  8. 启动4个Tomcat, 测试是否成功, 访问solr测试是否成功.

下面一个个步骤来执行一遍.

第一步: 将Tomcat和solrhome上传到linux中并解压.

[[email protected] solr-homes]# chmod 777 solr-home.zip
[[email protected] solr-homes]# unzip solr-home.zip

第二步: 将Tomcat和solrhome分别复制4份

[[email protected] solr-cloud]# cp -r apache-tomcat-7.0.82 tomcat-1
[[email protected] solr-cloud]# cp -r apache-tomcat-7.0.82 tomcat-2
[[email protected] solr-cloud]# cp -r apache-tomcat-7.0.82 tomcat-3
[[email protected] solr-cloud]# cp -r apache-tomcat-7.0.82 tomcat-4

搭建基于Zookeeper的SolrCloud集群
搭建基于Zookeeper的SolrCloud集群

第三步: 修改Tomcat的配置文件, 和solrhome一一对应

分别修改4个Tomcat的bin目录下的catalina.sh文件, 在文件顶部加上这一句:

export “JAVA_OPTS=-Dsolr.solr.home=/usr/local/solr-home/solrhome-1”

[[email protected] solr-cloud]# cd /usr/local/solr-cloud/tomcat-1/bin
[[email protected] bin]# vim catalina.sh
[[email protected] bin]# cd /usr/local/solr-cloud/tomcat-2/bin
[[email protected] bin]# vim catalina.sh
[[email protected] bin]# cd /usr/local/solr-cloud/tomcat-3/bin
[[email protected] bin]# vim catalina.sh
[[email protected] bin]# cd /usr/local/solr-cloud/tomcat-4/bin
[[email protected] bin]# vim catalina.sh

第四步: 修改Tomcat的端口号, 防止发生冲突

这里需要注意, Tomcat有三个端口需要修改, 我们平常说的8080只是其中一个.

8080 用于建立http连接的端口.

8005 是用来关闭Tomcat的端口.

8009 负责和其他的HTTP服务器建立连接。在把Tomcat与其他HTTP服务器集成时,就需要用到这个连接器。

这里我们修改每个Tomcat的三个端口分别改成:

Tomcat-1: 8185 8180 8109

Tomcat-2: 8285 8280 8209

Tomcat-3: 8385 8380 8309

Tomcat-4: 8485 8480 8409

[[email protected] conf]# vim /usr/local/solr-cloud/tomcat-1/conf/server.xml
[[email protected] conf]# vim /usr/local/solr-cloud/tomcat-2/conf/server.xml
[[email protected] conf]# vim /usr/local/solr-cloud/tomcat-3/conf/server.xml
[[email protected] conf]# vim /usr/local/solr-cloud/tomcat-4/conf/server.xml

搭建基于Zookeeper的SolrCloud集群
搭建基于Zookeeper的SolrCloud集群
搭建基于Zookeeper的SolrCloud集群

第五步: 配置Tomcat的catalina.sh文件, 加上Zookeeper的各个节点的IP地址和端口.

cd /usr/local/solr-cloud/tomcat-1/bin/
vim catalina.sh

打开catalina.sh文件, 将我们上面加的一行替换

原来: export “JAVA_OPTS=-Dsolr.solr.home=/usr/local/solr-homes/solrhome-1”

替换为: (这是一行) export “JAVA_OPTS=-Dsolr.solr.home=/usr/local/solr-homes/solrhome-1 -DzkHost=192.168.179.133:2181,192.168.179.133:2182,192.168.179.133:2183”

搭建基于Zookeeper的SolrCloud集群

第六步: 配置solrhome的配置文件solr.xml, 让solrhome能找到自己的Tomcat (IP和端口一致)

分别修改四个solrhome的solr.xml文件, 将IP修改成Tomcat一致, 端口改为对应的端口.

注意: 端口一定要配置正确, 分别是8180, 8280, 8380, 8480

[[email protected] solr-homes]# vim solrhome-1/solr.xml 
[[email protected] solr-homes]# vim solrhome-2/solr.xml 
[[email protected] solr-homes]# vim solrhome-3/solr.xml 
[[email protected] solr-homes]# vim solrhome-4/solr.xml

搭建基于Zookeeper的SolrCloud集群

第七步: 执行solr安装包下的一个脚本文件, 将solr的配置文件交给Zookeeper管理

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

我们需要使用solr给我们提供的工具上传配置文件:就是solr安装包中的zkcli.sh这个脚本文件

solr-4.10.3/example/scripts/cloud-scripts/zkcli.sh

将solr-4.10.3压缩包上传到linux,解压.

注意: 先启动三台Zookeeper, 因为要将配置文件上传到Zookeeper, 所以首先要启动Zookeeper啊.

然后进入solr-4.10.3/example/scripts/cloud-scripts目录 ,执行下列命令

./zkcli.sh -zkhost 192.168.179.133:2181,192.168.179.133:2182,192.168.179.133:2183 -cmd upconfig -confdir /usr/local/solr-homes/solrhome-1/collection1/conf/ -confname myconf

上面命令中的参数分别是什么意思 ?

-zkhost :指定zookeeper地址列表

-cmd :指定命令。upconfig 为上传配置的命令

-confdir : 配置文件所在目录

-confname : 配置名称

搭建基于Zookeeper的SolrCloud集群

看到上面的信息, 就说明执行成功了.

第八步: 启动Tomcat测试

#修改目录权限
[[email protected] solr-cloud]# chmod -R 777 tomcat-1
#进入tomcat-1/bin目录下, 执行.startup.sh文件
[[email protected] solr-cloud]# cd tomcat-4/bin
[[email protected] bin]# ./startup.sh

四个Tomcat都启动后, 打开浏览器测试是否能够正常访问
搭建基于Zookeeper的SolrCloud集群
搭建基于Zookeeper的SolrCloud集群

SolrCloud集群分片配置

创建新的 Collection 进行分片处理, 使用restful风格的访问方式.

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

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

参数:

name: 将被创建的集合的名字

numShards: 集合创建时需要创建逻辑碎片的个数

replicationFactor: 分片的副本数。

删除不用的Collection

http://192.168.179.133:8480/solr/admin/collections?action=DELETE&name=collection1

使用SpringDataSolr连接SolrCloud

在SolrJ中提供一个叫做CloudSolrServer的类, 它是SolrServer的子类, 用于连接solrCloud, 它的构造参数就是zookeeper的地址列表. 需要在xml中创建这个bean即可.

<bean id="solrServer" class="org.apache.solr.client.solrj.impl.CloudSolrServer">
	<constructor-arg value="192.168.179.133:2181,192.168.179.133:2182,192.168.179.133:2183" />
	<property name="defaultCollection" value="collection1"></property>
</bean>

好了, 不知不觉现在都深夜了, 该睡觉了.