搭建Tomcat8+ solr-5.5.1+zookeeper3.4.6集羣

 

一、軟件環境配置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: 

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-二、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

下面對已經建立的初始分片進行復制

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

<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();

}

}

}
相關文章
相關標籤/搜索