搭建Tomcat8+ solr-5.5.1+zookeeper3.4.6集群及单机版

1、软件环境配置


环境: Windows 7


apache-tomcat-8.0.35下载地址: http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/


Zookeepr v3.4.6 下载地址: http://apache.fayea.com/zookeeper/


solr-5.5.1 下载地址: http://mirrors.cnnic.cn/apache/lucene/solr/


JDK1.7 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

2、部署过程


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 目录。如下图:


第一步:把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配置。


1、 修改 tomcat8-* 分别对应 各自solr_home_* 和 solr 服务 。


如下图:tomcat8-*对应solr_home_1、2 、3;

2、 为了三个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:


http://localhost:8080/solr/


http://localhost:8081/solr/


http://localhost:8082/solr/


如果都能正常访问到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-2、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。

其余tomcat7_ser* catalina.bat设置


set 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


下面对已经创建的初始分片进行复制


http://192.168.175.1:8080/solr/admin/cores?action=CREATE&collection=mycollection&name=mycollection_shard1_replica1&shard=shard1


上传另一份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

org.apache.solr
solr-solrj
5.5.0

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 docs = new ArrayList();
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();
}
}
}
 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值