导言:用zookeeper集群来管理solr集群,即通过zookeeper的访问来间接访问solr;zookeeper决定来调用哪台solr服务器,为了使zookeeper实现高可用,故也搭建成集群;因为zookeeper使用投票机制,判断是否宕机需其他服务器投票决定,超过半数视为宕机,所以搭建集群的个数最好为奇数个;zookeeper和solr集群中,一台为主服务器,其他为备份服务器,当主服务器挂掉后,备份服务器可升级为主服务器;一个Collection可分为n片,solr服务器均为相应n片中对应片的备份
注:本步骤如下图所示模式的集群,并且是在一台虚拟机上进行模拟。
一、先参考博客一台linux虚拟机模拟搭建zookeeper集群及可能遇到的问题解决搭建zookeeper集群
二、solr集群搭建
1、参考博客linux环境下搜索引擎Solr4.10(索引库)基础与安装安装一个solr和tomcat,安装路径和zookeeper集群同一个目录,即:/myfile/programfiles/solr_cloud。注意根据自己路径修改相关的路径配置。
2、同目录下再复制三个solr和安装solr.war的tomcat
如图所示:
3、修改tomcat的端口号
修改tomcat01/conf/server.xml文件
[root@linhaijing solr_cloud]# vim tomcat01/conf/server.xml
在只读模式下输入/port,搜索port:
将搜索到的3个port分别改为:
接下来修改tomcat02/conf/server.xml, tomcat03/conf/server.xml, tomcat04/conf/server.xml文件的端口号,为8205,8280,8209;8305,8380,8309;8405,8480,8409。
4、修改solr01/example/solr/solr.xml文件,添加对应tomcat所在ip和端口号
同理,修改solr02/example/solr/solr.xml,solr03/example/solr/solr.xml,solr04/example/solr/solr.xml的ip和端口号,端口号分别为,8280,8380,8480。
5、修改tomcat下solr工程的solr_home
由于tomcat01在搭建时已经配好,现修改tomcat02, tomcat03, tomcat04的solr_home
[root@linhaijing solr]# vim /myfile/programfiles/solr_cloud/tomcat02/webapps/solr/WEB-INF/web.xml
如下图:
同理,修改 tomcat03, tomcat04的solr_home。
6、配置zookeeper和solr工程的关联关系
编辑/myfile/programfiles/solr_cloud/tomcat01/bin/catalina.sh文件
[root@linhaijing solr]# vim /myfile/programfiles/solr_cloud/tomcat01/bin/catalina.sh
在最上面添加如下这句话,即安装的zookeeper的ip和端口号:
JAVA_OPTS="-DzkHost=192.168.25.130:2181,192.168.25.130:2182,192.168.25.130:2183"
如图:
同理,修改tomcat02/bin/catalina.sh ,tomcat03/bin/catalina.sh ,tomcat04/bin/catalina.sh ,都加上上面这句话。
7、上传solrhome的配置文件到zookeeper中统一管理
进入:/myfile/programfiles/solr_cloud/solr01/example/scripts/cloud-scripts/目录下,使用zkcli.sh命令上传
执行命令:
[root@linhaijing cloud-scripts]# ./zkcli.sh -zkhost 192.168.25.130:2181,192.168.25.130:2182,192.168.25.130:2183 -cmd upconfig -confdir /myfile/programfiles/solr_cloud/solr01/example/solr/collection1/conf/ -confname myconf
任意选择上传一个solrhome下的conf文件到zookeeper即可。
8、查看上传到zookeeper是否成功
进入目录:/myfile/programfiles/solr_cloud/zookeeper01/bin/
9、启动zookeeper
进入:/myfile/programfiles/solr_cloud/zookeeper01/bin目录下,执行如下命令启动zookeeper
默认启动2181端口执行如下命令:
[root@linhaijing bin]# ./zkCli.sh
如果要启动其他端口,执行如下命令:
[root@linhaijing bin]# ./zkCli.sh -server 192.168.1.130:2181
启动结果如下:
退出:quit
10、查看配置文件是否上传成功
第9步完成后未退出的情况下执行如下1,2,3步,即可查看上传的配置文件。所有zookeeper都共用这一份配置文件。
11、启动tomcat,开启solr服务
输入quit,退出zookeeper,进入/myfile/programfiles/solr_cloud目录,执行如下命令新建并编辑启动tomcat的批处理脚本文件start-tomcat.sh
注意:启动tomcat(solr)集群前确保zookeeper集群已启动。
[root@linhaijing solr_cloud]# vim start-tomcat.sh
输入一下内容:
/myfile/programfiles/solr_cloud/tomcat01/bin/startup.sh
/myfile/programfiles/solr_cloud/tomcat02/bin/startup.sh
/myfile/programfiles/solr_cloud/tomcat03/bin/startup.sh
/myfile/programfiles/solr_cloud/tomcat04/bin/startup.sh
保存退出后,执行如下命令赋予执行权限:
[root@linhaijing solr_cloud]# chmod +x start-tomcat.sh
如图所示:
12、 用批处理文件启动tomcat,在/myfile/programfiles/solr_cloud目录下执行如下命令:
[root@linhaijing solr_cloud]# ./start-tomcat.sh
13、浏览器访问:
发现8081端口报错:
8082、8083、8084端口访问没问题:
查找原因发现:重新启动机器开启服务访问就正常了。
14、浏览器查看集群结构:
15、分片
浏览器执行如下命令:
注:numShards=2:一个collection2分为2个分片节点,replicationFactor=2:1个分片节点2个solr备份节点(可参考本文开始的架构图)
http://192.168.25.130:8180/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2
结果:
查看cloud节点情况:
删除collection1,浏览器执行如下命令:
http://192.168.25.130:8180/solr/admin/collections?action=DELETE&name=collection1
结果显示:
查看cloud节点情况,即搭建成功了本章开头所示图的模式集群。
16、对上传到zookeeper中的文件进行修改和删除操作
请参考博文: 对solr集群上传到zookeeper集群中的collection文件进行修改和删除操作 (更新solrcloud+zookeeper的schema.xml配置文件)
三、利用Java客户端进行集群测试
注意:要保证添加域对应的索引在zookeeper集群管理的schema.xml文件中已存在,如果没有请参照上一步进行配置;项目中要引入solrJ的jar包(可参考博客Java连接单机版solr测试代码之solrJ的运用第2步进入jar包);
测试代码:
//新增数据
@Test
public void testSolrCloud()throws Exception{
//新建一个solr集群服务器对象
CloudSolrServer cloudSolrServer = new CloudSolrServer("192.168.25.130:2181,192.168.25.130:2182,192.168.25.130:2183");
//设置默认的collection
cloudSolrServer.setDefaultCollection("collection2");
//创建一个文档对象
SolrInputDocument document = new SolrInputDocument();
document.setField("id",10000001);
document.setField("item_title","你是我的小宝贝");
document.setField("item_price",9999999);
//添加数据到索引库
cloudSolrServer.add(document);
//服务器提交数据
cloudSolrServer.commit();
}
执行结果:
集群搭建命令总结:
1、tomcat的catalinda.sh中的配置:
JAVA_OPTS="-DzkHost=192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183"
2、上传配置文件至zookeeper的命令:
./zkcli.sh -zkhost 192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183 -cmd upconfig -confdir /usr/local/solr-cloud/solrhome01/collection1/conf/ -confname myconf
3、连接zookeeper的命令:
./zkCli.sh -server 192.168.25.154:2182
4、SolrCloud创建Collection的命令
http://192.168.25.154:8180/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2
5、SolrCloud删除Collection的命令
http://192.168.25.154:8180/solr/admin/collections?action=DELETE&name=collection1