1. 程式人生 > >Solr叢集(偽叢集)搭建

Solr叢集(偽叢集)搭建

什麼是SolrCloud:

SolrCloud(solr )Solr提供的分散式搜尋方案,當你需要大規模,容錯,分散式索引和檢索能力時使用 SolrCloud。當一個系統的索引資料量少的時候是不需要使用SolrCloud的,當索引量很大,搜尋請求併發很高,這時需要使用SolrCloud來滿足這些需求。

 SolrCloud是基於SolrZookeeper的分散式搜尋方案,它的主要思想是使用Zookeeper作為叢集的配置資訊中心。

它有幾個特色功能:

1)集中式的配置資訊

2)自動容錯

3)近實時搜尋

4)查詢時自動負載均衡

SolrCloud結構:

SolrCloud為了降低單機的處理壓力,需要由多臺伺服器共同來完成索引和搜尋任務。實現的思路是將索引資料進行

Shard(分片)拆分,每個分片由多臺的伺服器共同完成,當一個索引或搜尋請求過來時會分別從不同的Shard的伺服器中操作索引。

SolrCloud需要Solr基於Zookeeper部署,Zookeeper是一個叢集管理軟體,由於SolrCloud需要由多臺伺服器組成,由zookeeper來進行協調管理。

下圖是一個SolrCloud應用的例子:


物理結構:需要實現能看到、配置得了的東西。

邏輯結構:看不見、莫不著的。

環境搭建:3個zookeeper例項、4個tomcat例項、在一臺虛擬機器上模擬。

採用偽叢集的方式進行安裝,如果是真正的生產環境,將偽叢集的ip改下就可以了,步驟是一樣的。

環境準備:

centos6.5

jdk1.7

apache-tomcat7

zookeeper

solr

環境安裝:

centos6.5:略   、 

jdk:略

solr叢集搭建:

1、先建立4個tomcat例項。

上傳解壓tomcat安裝包,複製4個解壓檔案到/usr/local/solrcloud/目錄下,分別命名tomcat1、tomcat2、tomcat3、tomcat4

cp apache-tomcat-7.0.47 /usr/local/solrcloud/tomcat1 -r 

cp apache-tomcat-7.0.47 /usr/local/solrcloud/tomcat2 -r 

cp apache-tomcat-7.0.47 /usr/local/solrcloud/tomcat3 -r 

cp apache-tomcat-7.0.47 /usr/local/solrcloud/tomcat4 -r 

2、修改埠8080:8083

示範tomcat2,改3個地方。其它一樣:


3、安裝solr(跟單機版一樣)

上傳、解壓安裝檔案,從解壓檔案dist目錄中複製solr.war到tomcat中。

cd solr-4.10.3/dist/

cp solr-4.10.3.war /usr/local/solrcloud/tomcat1/webapps/solr.war

cp solr-4.10.3.war /usr/local/solrcloud/tomcat2/webapps/solr.war

cp solr-4.10.3.war /usr/local/solrcloud/tomcat3/webapps/solr.war

cp solr-4.10.3.war /usr/local/solrcloud/tomcat4/webapps/solr.war

啟動tomcat來解壓solr.war

cd /usr/local/solrcloud/

tomcat1/bin/startup.sh 

tomcat2/bin/startup.sh 

tomcat3/bin/startup.sh 

tomcat4/bin/startup.sh 

為了方便可以寫個指令碼啟動和關閉




 


啟動:./startall.sh

停止:./shutdownall.sh

將原來的solr.war刪除。

4、拷貝example\lib\ext 目錄下所有jar包到Tomcatwebapp\solr\WEB-INF\lib目錄下

cd solr-4.10.3/example/lib/ext/

cp ./* /usr/local/solrcloud/tomcat1/webapps/solr/WEB-INF/lib/

cp ./* /usr/local/solrcloud/tomcat2/webapps/solr/WEB-INF/lib/

cp ./* /usr/local/solrcloud/tomcat3/webapps/solr/WEB-INF/lib/

cp ./* /usr/local/solrcloud/tomcat4/webapps/solr/WEB-INF/lib/

5、在Tomcat下webapps\solr\WEB-INF目錄中建立檔案classes資料夾,拷貝log4j.properties檔案

mkdir /usr/local/solrcloud/tomcat1/webapps/solr/WEB-INF/classes

mkdir /usr/local/solrcloud/tomcat2/webapps/solr/WEB-INF/classes

mkdir /usr/local/solrcloud/tomcat3/webapps/solr/WEB-INF/classes

mkdir /usr/local/solrcloud/tomcat4/webapps/solr/WEB-INF/classes

cd solr-4.10.3/example/resources/

cp log4j.properties /usr/local/solrcloud/tomcat1/webapps/solr/WEB-INF/classes/

cp log4j.properties /usr/local/solrcloud/tomcat2/webapps/solr/WEB-INF/classes/

cp log4j.properties /usr/local/solrcloud/tomcat3/webapps/solr/WEB-INF/classes/

cp log4j.properties /usr/local/solrcloud/tomcat4/webapps/solr/WEB-INF/classes/

4、進入example目錄下拷貝4次solr到solrcloud下面,存放solr配置檔案

cd solr-4.10.3/example/

cp -r solr /usr/local/solrcloud/solrhome1

cp -r solr /usr/local/solrcloud/solrhome2

cp -r solr /usr/local/solrcloud/solrhome3

cp -r solr /usr/local/solrcloud/solrhome4

5、修改web.xml找到對應配置檔案目錄

cd /usr/local/solrcloud/

vi tomcat1/webapps/solr/WEB-INF/web.xml 

記得去掉註釋!


啟動訪問測試:

./startall.sh 

192.168.132.132:8080/solr

192.168.132.132:8081/solr

192.168.132.132:8082/solr

192.168.132.132:8083/solr

把solrhome中的配置檔案上傳到zookeeper叢集,使用zookeeper的客戶端上傳

在solr-4.10.3/example/scripts/cloud-scripts/目錄下執行下面命令:

./zkcli.sh -zkhost 192.168.132.132:2181,192.168.132.132:2182,192.168.132.132:2183 -cmd upconfig -confdir /usr/local/solrcloud/solrhome1/collection1/conf -confname myconf

登入zookeeper伺服器查詢配置檔案

cd /usr/local/zookeeper/bin/

./zkCli.sh

6、修改4個solrhome下的solr.xml檔案,指定當前例項執行的ip地址及埠





7、修改每一臺的tomcat的bin目錄下catalina.sh檔案中加入DzkHost指定zookeeper伺服器地址:

JAVA_OPTS="-DzkHost=192.168.132.132:2181,192.168.132.132:2182,192.168.132.132:2183"



啟動tomcat:

./startall.sh

隨便訪問一個就看到左邊多了一個cloud

一主多備,叢集只有一片,目的是要有2片,每片都是一主一備

8、建立一個兩片的collection,每片都是一主一備

在瀏覽器下使用一下命令:

http://192.168.132.132:8080/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2


重新再訪問一次叢集:


再把collection1刪除掉就可以了(可以共存多個collection)

http://192.168.132.132:8080/solr/admin/collections?action=DELETE&name=collection1


8、配置業務欄位

在solr中預設是中文分析器,需要手工配置,配置一個FieldType,在FieldType中指定中文分析器。solr中的欄位必須是先定義後使用。

使用IKAnalyzer,把分析器的資料夾拖到伺服器



cd IK Analyzer 2012FF_hf1

cp IKAnalyzer2012FF_u1.jar /usr/local/solrcloud/tomcat1/webapps/solr/WEB-INF/lib/

cp IKAnalyzer2012FF_u1.jar /usr/local/solrcloud/tomcat2/webapps/solr/WEB-INF/lib/

cp IKAnalyzer2012FF_u1.jar /usr/local/solrcloud/tomcat3/webapps/solr/WEB-INF/lib/

cp IKAnalyzer2012FF_u1.jar /usr/local/solrcloud/tomcat4/webapps/solr/WEB-INF/lib/

把IKAnalyzer需要的擴充套件詞典及停用詞詞典和配置檔案複製到solr工程的classpath

cp IKAnalyzer.cfg.xml ext_stopword.dic mydict.dic /usr/local/solrcloud/tomcat1/webapps/solr/WEB-INF/classes/

cp IKAnalyzer.cfg.xml ext_stopword.dic mydict.dic /usr/local/solrcloud/tomcat2/webapps/solr/WEB-INF/classes/

cp IKAnalyzer.cfg.xml ext_stopword.dic mydict.dic /usr/local/solrcloud/tomcat3/webapps/solr/WEB-INF/classes/

cp IKAnalyzer.cfg.xml ext_stopword.dic mydict.dic /usr/local/solrcloud/tomcat4/webapps/solr/WEB-INF/classes/

配置FieldType和業務欄位:

業務欄位判斷標準:

1、在搜尋時是否需要在此欄位上進行搜尋(結合商城例如:商品名稱、賣點、描述)

2、後續的業務是否需要用到此欄位

在/usr/local/solrhome1/collection2/conf/schema.xml:

如果每個solrhome下面沒有collection2就從解壓檔案裡面拷貝過來,並改名為collection2

<fieldType name="text_ik" class="solr.TextField">
  <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
<field name="item_title" type="text_ik" indexed="true" stored="true"/>
<field name="item_sell_point" type="text_ik" indexed="true" stored="true"/>
<field name="item_price"  type="long" indexed="true" stored="true"/>
<field name="item_image" type="string" indexed="false" stored="true" />
<field name="item_category_name" type="string" indexed="true" stored="true" />
<field name="item_desc" type="text_ik" indexed="true" stored="false" />

<field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
<copyField source="item_title" dest="item_keywords"/>
<copyField source="item_sell_point" dest="item_keywords"/>
<copyField source="item_category_name" dest="item_keywords"/>
<copyField source="item_desc" dest="item_keywords"/>

測試:

spring整合:相對於單機版只需要改一下xml配置檔案,如下:




結合工程匯入資料:

http://localhost:8084/search/manager/importall