结构图:
环境:虚拟机一台(centos7.4/jdk1.7)
材料:tomcat7、zookeeper(本文称作为zk)、solr
需求:三个zookeeper节点、四个tomcat节点
首先搭建zookeeper集群:
1、 解压缩zk,在zk根目录新建一个data文件夹,在data文件夹中新建一个myid来指定当前zk集群id(图中最后一个命令应该为:echo 1>>myid)
2、 修改zk根目录下的conf/zoo.cfg(自个修改)配置,需要修改dataDir,还需要增加节点地址和通讯端口号
3、 复制三份zk到自己创建solrcloud的目录下(/usr/local/solr-cloud)
4、 修改zk02的conf/zoo.cfg,修改端口号为2182、dataDir修改为data的路径,myid修改内容为2;data/myid中的值修改为2。Zk03同理(端口号要不同,myid值为3)
5、 编写脚本(zk-start.sh)启动zk,要使用命令赋予权限(chmod u+x zk-start.sh )
6、 启动
Solr集群搭建:
注:本教程直接将单机版的solr服务器tomcat直接复制四份到指定目录了、单机版solr搭建参考
1、 复制四份tomcat到指定目录、
2、 复制四份单机版的solrhome到指定目录
3、 依次修改tomcat的端口号:8180、8280、8380、8480(注意web.xml中的server节点中的port和connector节点中的port都要修改为互不相同)
4、 依次修改tomcat0X/webapps/solr/WEB-INF/web.xml,修改solrhome位置为对应的solrhome0x
5、 依次修改solrhome中的solr.xml配置、每个对应的solrhome修改为对应tomcat服务器的地址和端口号
6、 让zookeeper统一管理配置文件。需要把solrhome/collection1/conf目录上传到zookeeper。上传任意solrhome中的配置文件即可
./zkcli.sh -zkhost 192.168.25.141:2181,192.168.25.141:2182,192.168.25.141:2183 -cmd upconfig -confdir /usr/local/solr-cloud/solrhome01/collection1/conf -confname myconf (有颜色部分为solr对应的ip和单个collection对应的目录) |
在solr的解压目录下example/scripts/cloud-scripts/运行上面的命令
遇到问题:Error: Could not find or load mainclass org.apache.solr.cloud.ZkCLI
解决办法:在solr解压目录下的example中运行start.jar(java –jar start.jar),在新的终端窗口再次运行./zkCli.sh
7、 任意选用一个zk客户端启动,查看上传的配置文件
8、 依次修改tomcat0X中的bin/catalina.sh,添加JAVA_OPTS="-DzkHost=192.168.25.141:2181,192.168.25.141:2182,192.168.25.141:2183",关联solr和zk、其中地址和端口号的三个zk集群对应的地址和通讯端口号
9、 编写脚本启动tomcat集群
10、 访问集群solr:http://192.168.25.141:8180/solr/#/
出现代表solrcloud搭建成功
11、 删除collection1:命令:http://192.168.25.141:8180/solr/admin/collections?action=DELETE&name=collection1
12、 创建新的Collection进行分片处理命令:http://192.168.25.141:8180/solr/admin/collections?action=CREATE&name=collection1&numShards=2&replicationFactor=2
13、 最后在solrcloud中出现如图的代表分片处理创建成功
14、Java连接solrcloud
@Test
public void testSolrCloud() throws Exception {
//连接到solr集群,zookeeper集群地址加端口号
CloudSolrServer server = new CloudSolrServer("192.168.25.141:2181,192.168.25.141:2182,192.168.25.141:2183");
//设置DefaultCollection
server.setDefaultCollection("collection1");
//
SolrInputDocument doc = new SolrInputDocument();
doc.addField("id", "10010");
doc.addField("name", "HelloWorld");
server.add(doc);
server.commit();
}