一、軟件環境配置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(); } } }