搭建基于Zookeeper的SolrCloud集群
SolrCloud是基于Solr和Zookeeper的分布式搜索方案, 就是使用 Zookeeper作为集群的配置信息中心,solrCloud提供分布式的搜索能力。
Zookeeper的作用: 几种管理配置文件, 集群管理 (帮助solr选举主从)
为什么需要SolrCloud?
我们一般都是在需要大规模的索引数据量, 搜索请求的并发量很高, 要求容错能力强的时候, 就会考虑使用SolrCloud来满足这些需求. 总的来说就是基于以下三个方面:
- 扩展存储: 单机版的solr存储有限
- 高可用的考虑: 备份
- 高并发的场景: 搜索效率更高
SolrCloud集群的搭建
接下来我们安装的依然是SolrCloud的伪集群, 正常生产环境中我们肯定是安装在多台服务器上的, 而现在我们是安装在一台服务器(虚拟机)上, 通过不同的端口来区别.
准备工作:
- 安装并启动3台Zookeeper -> 教程直达链接
- 装有solr的单机版Tomcat和solrhome
- solr的安装包
在正式安装之前, 我们先来说一下需要哪些步骤:
- 将装有solr的单机版Tomcat和solrhome打成zip压缩包, 上传到linux中, 并解压.
- 将Tomcat和solrhome分别复制4份.
- 修改Tomcat的配置文件, 关联Tomcat和solrhome使其一一对应.
- 修改Tomcat的端口, 防止发生冲突. (因为是在一台服务器上, 所以要以端口来区分)
- 配置Tomcat的catalina.sh文件, 让Tomcat能够找到三台Zookeeper.
- 配置solrhome的配置文件solr.xml, 让solrhome能找到自己的Tomcat (IP和端口一致)
- 执行solr安装包下的一个脚本文件, 可以将solr的配置文件交给Zookeeper管理
- 启动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
第三步: 修改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
第五步: 配置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”
第六步: 配置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
第七步: 执行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 : 配置名称
看到上面的信息, 就说明执行成功了.
第八步: 启动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都启动后, 打开浏览器测试是否能够正常访问
SolrCloud集群分片配置
创建新的 Collection 进行分片处理, 使用restful风格的访问方式.
在浏览器输入以下地址, 可以按照我们的要求创建新的Collection
参数:
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>
好了, 不知不觉现在都深夜了, 该睡觉了.