一、软件环境配置html
环境: Windows 7java
apache-tomcat-8.0.35下载地址: http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/linux
Zookeepr v3.4.6 下载地址: http://apache.fayea.com/zookeeper/web
solr-5.5.1 下载地址: http://mirrors.cnnic.cn/apache/lucene/solr/apache
JDK1.7 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.htmlbootstrap
二、部署过程windows
2.1 部署好单机版Tomcat7 +Solr5.5.1浏览器
第一步:在E盘根目录下创建solrcloud目录。并把apache-tomcat-8.0.35-windows-x64.zip解压到solrcloud目录下,复制apache-tomcat-8.0.35并重命名为tomcat8-1。把solr-5.5.1.zip解压,并把solr-5.5.1\example\example-DIH\solr目录下的 solr文件夹 和 solr.xml 复制保存到solr_home_1\home 目录。以下图:tomcat
第一步:把apache-tomcat-8.0.35-windows-x64.zip解压到solrCloud目录下,复制apache-tomcat-8.0.35并重命名为tomcat8-1,服务器
第二步,新建 solr_home_1 文件夹以下图,并在目录下,建立 home 和 server 文件夹
第三步:把solr-5.2.1\example\example-DIH\solr指定文件复制到solr_home_1\home目录下,以下图
第四步:把solr-5.5.1\server\solr-webapp\webapp下的内容复制到solr_home_1\server\solr下面,solr文件夹能够本身新建一个。
复制到
第五步:修改E:\solrcloud\solr_home_1\server\solr\WEB-INF目录下的web.xml文件,里面修改solr/home的value值,以下图。
第六步:在E:\solrcloud\solr_home_1\server\solr\WEB-INF目录下建立classes文件夹,将solr-5.5.1\example\resources\log4j.properites文件复制到classes目录下。
第七步:由于咱们未将solr 服务放到tomcat webapps下面,因此须要修改E:\solrcloud\tomcat8-1\conf\server.xml 指向solr服务路径。以下图。
第八步:将solr-5.5.1\dist 和solr-5.5.1\server\lib\ext目录下的jar包复制到solr_home_1\server\solr\WEB-INF\lib 下(有这两个目录的jar大部分功能都是支持了,固然其它的jar确定有用的,只是咱们初学都暂时用不到)。
第九步:如今单机版本的就已经配置OK了。 启动tomcat, 访问http://localhost:8080/solr
2.2 配置多Tomcat+solr同时运行
第一步:
把tomcat8-1复制2份,分别命名tomcat8-2,tomcat8-3;
把solr_home_1复制2份,分别命名solr_home_2,solr_home_3。
目录结构以下:
第二步:修改E:\solrcloud\tomcat8-*\conf\server.xml配置。
一、 修改 tomcat8-* 分别对应 各自solr_home_* 和 solr 服务 。
以下图:tomcat8-*对应solr_home_一、2 、3;
二、 为了三个tomcat可以在一台机器上同时启动,须要在server.xml修改tomcat的端口信息。修改方案以下:
SHUTDOWN Port | HTTP/1.1 Port | AJP/1.3 Port | |
tomcat8-1 | 8005 | 8080 | 8009 |
tomcat8-2 | 8015 | 8081 | 8019 |
tomcat8-3 | 8025 | 8082 | 8029 |
第三步:配置各个tomcat和solr 之间的关系,修改E:\solrcloud\solr_home_*\server\solr\WEB-INF目录下的web.xml文件(对应关系)
第四步:验证修改是否成功,依次启动三个Tomcat。并在浏览器输入以下的URL:
若是都能正常访问到solr的admin页面,那么说明配置是成功的。不然就须要检查哪里错了或者遗漏了。
2.3 配置ZooKeeper集群
这部分的内容与前面tomcat+solr是没有关联的,因此配置这里,能够跟忘记前面的内容。
第一步:新建一个文件夹zookeeper-1,而且在下面新建data和datalog目录,解压zookeeper-3.4.6.tar.gz到E:\solrcloud\zookeeper-1目录下。
第二步:把E:\solrcloud\zookeeper-1\zookeeper-3.4.6\conf目录下的zoo_sample.cfg修改成zoo.cfg。并写入以下的配置参数:
在data目录中建立文件myid(不须要后缀名),在myid文件中写入数字1并保存退出。
第三步:把zookeeper-1复制2份,分别命名为zookeeper-二、zookeeper-3。而后修改各个zookeeper-*的conf目录下zoo.cfg的dataDir和dataLogDir和clientPort。修改方案以下:
dataDir | dataLogDir | clientPort | |
zookeeper-1 | E:\solrcloud\zookeeper-1\data | E:\solrcloud\zookeeper-1\datalog | 2181 |
zookeeper-2 | E:\solrcloud\zookeeper-2\data | E:\solrcloud\zookeeper-2\datalog | 2182 |
zookeeper-3 | E:\solrcloud\zookeeper-3\data | E:\solrcloud\zookeeper-3\datalog | 2183 |
而且修改每一个data目录下的myid文件中的内容。zookeeper-1是1, zookeeper-2是2,zookeeper-3是3 。
第四步:启动三个zookeeper。并验证是否配置成功。目录结构以及启动目录以下图:
注意:链接第一台时有异常信息,不用管,等都链接起来就没有异常了。
进入cmd 命令,输入: netstat -ano|findstr 2181 查看端口是否启用
2.4搭建Tomcat8+ solr-5.5.1+zookeeper3.4.6集群
前面tomcat+solr可以启动和访问了,并且zookeeper也能启动成功了。接下来就须要把他们关联起来。你们看那么多贴子应该知道(固然不知道也要记住这个知识点):solrcloud 的全部配置 须要zookeeper统一管理。
第一步: 将须要的配置库 集中放到一个目录中。
在E:\solrcloud 下建立cloud_conf文件夹做为配置库,将solr-5.5.1\server\ solr\configsets\sample_techproducts_configs\conf 下配置文件复制到cloud_conf文件夹中。(也可使用solr-5.2.1\example\example-DIH\solr\solr\conf中的配置文件)
第二步: 配置zookeeper路径
在E:\solrcloud\tomcat8-1\bin\catalina.bat文件中, 我是在 setlocal 上一行添加:
以下图:
set JAVA_OPTS=-Dbootstrap_confdir=E:/solrcloud/cloud_conf -Dcollection.configName=myconf -DzkHost=127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183 -DnumShards=3
配置参数解释:
-DzkHost是用来指定zookeeper服务器的ip和端口。
-Dnumshareds=3 用来指定当前集群中分片数为3
-Dcollection.configName 是在指定你的配置文件上传到zookeeper后的名字,省略这个参数将致使配置名字为默认的“configuration1”
-Dbootstrap_confdir :zooKeeper须要准备一份集群配置的副本,因此这个参数是告诉SolrCloud这些 配置是放在哪里。同时做为整个集群共用的配置文件。能够看做是第一份solr配置。由于后续咱们能够经过上传,来实现多collection。
其他tomcat8-* catalina.bat设置
set JAVA_OPTS= -DzkHost=127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183
linux下tomcat8-* catalina.sh设置跟windows格式不同
JAVA_OPTS="$JAVA_OPTS -DzkHost=127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183"
第三步: 由于配置由zookeeper 统一管理了,因此home下面的solr配置就不起使用了。 删除solr_home_*\home\solr文件夹, 修改配置solr.xml。
hostPort 修改成对应的tomcat端口号 8080 8081 8082
第四步:重启tomcat。访问任务一个端口都成,好比: http://localhost:8081, 能正常访问,且菜单中,出现了Cloud说明咱们已经部署成功了
接下来分别从Core Admin建立一个Core,输入 name , instanceDir, collection, shard,点击AddCore。 说明下,当collection 名称样的core 索引是通用的。(反之collection不同则索引以前不可相互访问了)
即 你在 new_core 下面建立的索引,在new_core1下面也是可以查询到的。 当咱们建立完core以后,分支图就已经出现了。以下:
2.5经常使用命令
经过REST接口来建立Collection
http://192.168.175.1:8080/solr/admin/collections?action=CREATE&name=mycollection1&numShards=3&replicationFactor=1
下面对已经建立的初始分片进行复制
上传另外一份collection配置文件
在window cmd模式:
java -classpath .;E:\solrcloud\solr_home_1\server\solr\WEB-INF\lib\* org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183 -confdir E:\solrcloud\cloud_conf -confname mycollection1
命令说明:
上传(upconfig) 到指定的服务(-zkhost 27.0.0.1:2181, 127.0.0.1:2182, 127.0.0.1:2183) 配置文件路径(-confdir):E:\solrcloud\cloud_conf。 配置名称(-confname)为: mycollection1
注: 要添加 E:\solrcloud\solr_home_1\server\solr\WEB-INF\lib\* cmd才能识别 org.apache.solr.cloud.ZkCLI 的命令。
删除collection
java -classpath .;E:\solrcloud\solr_home_1\server\solr\WEB-INF\lib\* org.apache.solr.cloud.ZkCLI -cmd clear /configs/mycollection1 -zkhost 127.0.0.1:2181,127.0.0.1:2281,127.0.0.1:2381
删除全部
java -classpath .;E:\solrcloud\solr_home_1\server\solr\WEB-INF\lib\* org.apache.solr.cloud.ZkCLI -cmd clear /configs -zkhost 127.0.0.1:2181,127.0.0.1:2281,127.0.0.1:2381
2.6solrj连接solrcloud
<dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</artifactId> <version>5.5.0</version> </dependency>
package com.demo; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.CloudSolrClient; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.SolrInputDocument; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; /** * Created by liuxun on 2016/6/14. */ public class solrDemo { private static CloudSolrClient cloudSolrClient; private static synchronized CloudSolrClient getCloudSolrClient(final String zkHost) { if (cloudSolrClient == null) { try { cloudSolrClient = new CloudSolrClient(zkHost); } catch (Exception e) { e.printStackTrace(); } } return cloudSolrClient; } private static void addIndex(SolrClient solrClient) { try { SolrInputDocument doc1 = new SolrInputDocument(); doc1.addField("id", "421245251215121452521251"); doc1.addField("name", "张三"); doc1.addField("description", "张三是个农民,勤劳致富,奔小康"); SolrInputDocument doc2 = new SolrInputDocument(); doc2.addField("id", "4224558524254245848524243"); doc2.addField("name", "李四"); doc2.addField("description", "李四是个企业家,白手起家,致富一方"); SolrInputDocument doc3 = new SolrInputDocument(); doc3.addField("id", "2224558524254245848524299"); doc3.addField("name", "王五"); doc3.addField("description", "王五好吃懒作,溜须拍马,跟着李四,也过着小康的日子"); Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>(); docs.add(doc1); docs.add(doc2); docs.add(doc3); solrClient.add(docs); solrClient.commit(); } catch (SolrServerException e) { System.out.println("Add docs Exception !!!"); e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { System.out.println("Unknowned Exception!!!!!"); e.printStackTrace(); } } public static void search(SolrClient solrClient, String String) { SolrQuery query = new SolrQuery(); query.setQuery(String); // query.setParam("shards.tolerant", true); try { QueryResponse response = solrClient.query(query); SolrDocumentList docs = response.getResults(); System.out.println("文档个数:" + docs.getNumFound()); System.out.println("查询时间:" + response.getQTime()); for (SolrDocument doc : docs) { String id = (String) doc.getFieldValue("id"); String name = (String) doc.getFieldValue("name"); String desc = (String) doc.getFieldValue("description"); System.out.println("id: " + id); System.out.println("name: " + name); System.out.println("description: " + desc); System.out.println(); } } catch (SolrServerException e) { e.printStackTrace(); } catch (Exception e) { System.out.println("Unknowned Exception!!!!"); e.printStackTrace(); } } public void deleteAllIndex(SolrClient solrClient) { try { solrClient.deleteByQuery("*:*");// delete everything! solrClient.commit(); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { System.out.println("Unknowned Exception !!!!"); e.printStackTrace(); } } public static void main(String[] args) { try { final String zkHost = "127.0.0.1:2181"; final String defaultCollection = "mycollection"; final int zkClientTimeout = 20000; final int zkConnectTimeout = 1000; CloudSolrClient cloudSolrClient = getCloudSolrClient(zkHost); System.out.println("The Cloud cloudSolrClient Instance has benn created!"); cloudSolrClient.setDefaultCollection(defaultCollection); cloudSolrClient.setZkClientTimeout(zkClientTimeout); cloudSolrClient.setZkConnectTimeout(zkConnectTimeout); cloudSolrClient.connect(); System.out.println("The cloud Server has been connected !!!!"); //建立索引 solrDemo.addIndex(cloudSolrClient); System.out.println("create index end!!!"); //查询 solrDemo.search(cloudSolrClient, "name:李"); cloudSolrClient.close(); } catch (Exception e) { e.printStackTrace(); } } }