Solr入門

目錄java

SolrCloud配置... 2web

簡介... 2apache

Solr 是什麼?... 2緩存

配置單機版Solr服務器... 2tomcat

1:下載Solr 2服務器

2:部署Tomcat 2網絡

3:將下載的Solr解壓,並複製其中example\webapps\solr.war包到指定位置... 2app

4:複製example\solr中的solr.xml和zoo.cfg到一個新建文件夾(solrhome)中。... 2負載均衡

5:在tomcat的conf文件夾下新建Catalina\localhost文件夾,並在其中新建solr.xml,內容以下:... 2webapp

6:啓動Tomcat,測試工程。... 2

7:在單機版Solr服務器中添加connection,... 2

配置分佈式Solr服務器... 2

1: 參照Solr單機版的配置,配置多臺Solr服務器... 2

2:修改主節點... 3

3:修改從節點... 3

5: 在項目中引用... 4

配置Solr服務器集羣... 4

1:部署Zookeeper 4

2:部署Solr 5

3:在Zookeeper 中上傳Solr的connection配置文件... 6

4:執行命令... 6

5: 建立connection實例... 6

Solr服務器集羣的好處... 7

索引(collection)的邏輯圖... 8

Solr和索引對照圖... 8

建立索引過程... 9

分佈式查詢... 9

Shard Splitting. 10

 

SolrCloud配置

簡介

Solr 是什麼?

Solr它是一種開放源碼的、基於 Lucene Java 的搜索服務器,易於加入到 Web 應用程序中。Solr 提供了層面搜索(就是統計)、命中醒目顯示而且支持多種輸出格式(包括XML/XSLT 和JSON等格式)。它易於安裝和配置,並且附帶了一個基於HTTP 的管理界面。可使用 Solr 的表現優異的基本搜索功能,也能夠對它進行擴展從而知足企業的須要。Solr的特性包括:

高級的全文搜索功能 專爲高通量的網絡流量進行的優化 基於開放接口(XML和HTTP)的標準 綜合的HTML管理界面 可伸縮性-可以有效地複製到另一個Solr搜索服務器 使用XML配置達到靈活性和適配性 可擴展的插件體系

配置單機版Solr服務器

1:下載Solr

http://www.apache.org/dyn/closer.cgi/lucene/solr/

2:部署Tomcat

3:將下載的Solr解壓,並複製其中example\webapps\solr.war包到指定位置

4:複製example\solr中的solr.xml和zoo.cfg到一個新建文件夾(solrhome)中。

5:在tomcat的conf文件夾下新建Catalina\localhost文件夾,並在其中新建solr.xml,內容以下:

<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="D:\\development\\SolrCloud\\data\\solr\\war\\solr.war" debug="0" crossContext="true">
    <Environment name="solr/home" type="java.lang.String" value="D:\\development\\SolrCloud\\data\\solr\\solrhome" override="false"/>
</Context>

其中docBase指向solr.war文件,Environment/value 配置爲solrhome的路徑。

6:啓動Tomcat,測試工程。

7:在單機版Solr服務器中添加connection,

(1):在Solr解壓的路徑example\solr\下找到collection1

(2):將collection1複製到以前配置好的solrhome文件夾中。

(3):重啓Tomcat服務器。

 

配置分佈式Solr服務器

1: 參照Solr單機版的配置,配置多臺Solr服務器

假設目前存在多臺已經配置好的Solr服務器分別爲

http://127.0.0.1:8080/solr/connection1
http://127.0.0.1:8081/solr/connection1
http://127.0.0.1:8082/solr/connection1

目前須要設置8080爲主機,8081,8082爲從機

2:修改主節點

(1):找到須要設置主庫的solrhome,找到其中須要設置的核心connection1,例如路徑爲\example\solr\collection1

(2):打開\conf\solrconfig.xml

(3):修改節點 替換配置中存在的requestHandler/replication和updateHandler

<requestHandler name="/replication" class="solr.ReplicationHandler" >
    <lst name="master">
       <str name="replicateAfter">startup</str>
       <str name="replicateAfter">commit</str>
       <str name="replicateAfter">optimize</str>
       <str name="confFiles">schema.xml</str>
    </lst>
</requestHandler>
<updateHandler class="solr.DirectUpdateHandler2">
   <autoCommit>
      <maxDocs>1</maxDocs>
      <maxTime>1000</maxTime>
      <openSearcher>false</openSearcher>
   </autoCommit>
</updateHandler>

3:修改從節點

(1):找到須要設置從庫的solrhome,找到其中須要設置的核心connection1,例如路徑爲\example\solr\collection1

(2):打開\conf\solrconfig.xml

(3):修改節點 替換配置中存在的requestHandler/replication和updateHandler

<requestHandler name="/replication" class="solr.ReplicationHandler" >
  <lst name="slave">
        <str name="masterUrl">http://10.28.175.246:8080/solr/waiter</str>
        <str name="pollInterval">00:00:20</str>
   </lst>
</requestHandler>

上述操做完成後,一個Solr分佈式就完成了,主庫主要負責接收插入的數據,從庫主要負責查詢數據。

從庫會在按期(pollInterval配置)到主庫進行數據查詢,若主庫數據有修改,從庫會自動進行差別同步。

5: 在項目中引用

 <bean id="concurrentUpdateSolrServer" class="org.apache.solr.client.solrj.impl.ConcurrentUpdateSolrServer">
      <constructor-arg value=" http://127.0.0.1:8080/solr/connection1" />
      <constructor-arg value="8" />
      <constructor-arg value="8" />
 </bean>
 <bean id="lbHttpSolrServer" class="org.apache.solr.client.solrj.impl.LBHttpSolrServer" >
      <constructor-arg>
           <array value-type="java.lang.String">
                <value>http://127.0.0.1:8081/solr/connection1</value>
                <value>http://127.0.0.1:8082/solr/connection1</value>
           </array>
      </constructor-arg>
 </bean>

配置Solr服務器集羣

本文所講的Solr集羣服務器是基於 Tomcat7 + Zookeeper3.4.6 + Solr4.6

1:部署Zookeeper

(1)下載Zookeeper3.4.6

下載地址爲 http://www.apache.org/dyn/closer.cgi/zookeeper/

(2)解壓Zookeeper3.4.6 .tar.gz到文件夾中待用

(3)打開conf文件夾,新建文件zoo.cfg(也能夠重命名zoo_sample.cfg)

(4)修改zoo.cfg:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=D:\\tmp\\zookeeper\\server1\\data
clientPort=2181
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890

在此示例文件中,咱們部署了三分Zookeeper服務器,數據文件分別定位到

D:\\tmp\\zookeeper\\server1
D:\\tmp\\zookeeper\\server2
D:\\tmp\\zookeeper\\server3

其中的server.x中的x爲服務器myid(myid隨後說在哪裏定義),後面的127.0.0.1:2888:3888分別對應與2181

例如,服務器A的clientPort爲2181,則對應的地址爲127.0.0.1:2888:3888

服務器B的clientPort爲2182,則對應的地址應該爲127.0.0.1:2889:3889

 

服務器配置文件                      dataDir                        clientPort   
server_1/conf/zoo.cfg       D:\\tmp\\zookeeper\\server1        2181
server_2/conf/zoo.cfg       D:\\tmp\\zookeeper\\server2        2182
server_3/conf/zoo.cfg       D:\\tmp\\zookeeper\\server3        2183

(4):接下來咱們該說說myid的問題了

上述文件中咱們定義了一個 dataDir 地址,此地址是程序存放數據用的地址,在此地址中,咱們定義一個myid文件,用記事本打開,寫入1,則此項目的Myid爲1

分別將三個服務器按照123進行排列寫入myid文件

(5):依次啓動Zookeeper服務器

(鏈接第一臺時有異常信息,不用管,等都鏈接起來就沒有異常了)

2:部署Solr

按照Solr單機版的部署方式,部署三臺Solr單機版服務器,並去掉其中的全部connection

(1): 配置Solr和Zookeeper關聯

假設以前部署好的Zookeeper地址爲:

127.0.0.1:2181
127.0.0.1:2182
127.0.0.1:2183

2:部署好的三個solr服務器配置分別爲

solr服務器         tomcat端口             solrhome
solr1                  8081           SolrCloud\data\solrhome1
solr2                  8082           SolrCloud\data\solrhome2
solr3                  8083           SolrCloud\data\solrhome3

3:打開solrhome1下的solr.xml,並修改內容:

<?xml version="1.0" encoding="UTF-8" ?>
<solr>
  <solrcloud>
      <str name="host">${host:}</str>
      <int name="hostPort">8080</int>
      <str name="hostContext">${hostContext:solr}</str>
      <int name="zkClientTimeout">${zkClientTimeout:15000}</int>
      <bool name="genericCoreNodeNames">
             ${genericCoreNodeNames:true}
      </bool>
      <str name="zkHost">
         127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183
       </str>
  </solrcloud>
  <shardHandlerFactory name="shardHandlerFactory"
         class="HttpShardHandlerFactory">
      <int name="socketTimeout">${socketTimeout:0}</int>
      <int name="connTimeout">${connTimeout:0}</int>
  </shardHandlerFactory>
</solr>

其中hostPort爲該服務器的tomcat端口

zkHost爲Zookeeper的三個服務器地址用逗號鏈接起來。

依次啓動三個solr服務器,並訪問任意一個solr,出現下圖頁面,即說明配置集羣服務成功。

3:在Zookeeper 中上傳Solr的connection配置文件

(1):複製相應的Solr的配置文件(例如:Solr\example\solr\collection1\conf)到指定地址

(2):複製Solr\example\lib\ext\*.jar 和 war包中的全部lib中的全部jar包到一個文件夾中。

4:執行命令

java -classpath D:\\uploadCloud\\ClientLib\\* org.apache.solr.cloud.ZkCLI -cmd 
upconfig -zkhost 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183 -confdir 
D:\\uploadCloud\\conf -confname myconf

該命令是使用了以前複製的jar包中的ZkCLI程序進行一個指定文件夾的 upconfig 工做

4執行命令

java -classpath D:\\uploadCloud\\ClientLib\\* org.apache.solr.cloud.ZkCLI -cmd 
linkconfig -collection collection -confname myconf -zkhost 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183

該命令是將剛剛上傳的配置文件命名爲一個collection對象

5: 建立connection實例

訪問剛剛配置的solr服務器

http://127.0.0.1:8081/solr/admin/collections?action=CREATE&name=collection1&numShards=3&replicationFactor=3&maxShardsPerNode=3

name:collection的名稱

numShards:指定分片數量(slices)

replicationFactor:副本數量

maxShardsPerNode:默認值爲1,注意三個數值:numShards、replicationFactor、liveSolrNode,一個正常的solrCloud集羣不允許同一個liveSolrNode上部署同一個shard的多個replic,所以當maxShardsPerNode=1時,numShards*replicationFactor>liveSolrNode時,報錯。所以正確時因知足如下條件: numShards*replicationFactor<liveSolrNode*maxShardsPerNode

createNodeSet

collection.configName:指定該collection使用那份config,這份config必須存在於zk中。

 

Solr服務器集羣的好處

集中式的配置信息使用ZK進行集中配置

啓動時能夠指定把Solr的相關配置文件上傳Zookeeper,多機器共用。這些ZK中的配置不會再拿到本地緩存,Solr直接讀取ZK中的配置信息。配置文件的變更,全部機器均可以感知到。另外,Solr的一些任務也是經過ZK做爲媒介發佈的。目的是爲了容錯。接收到任務,但在執行任務時崩潰的機器,在重啓後,或者集羣選出候選者時,能夠再次執行這個未完成的任務。

自動容錯SolrCloud對索引分片,並對每一個分片建立多個Replication

每一個Replication均可以對外提供服務

一個Replication掛掉不會影響索引服務。更強大的是,它還能自動的在其它機器上幫你把失敗機器上的索引Replication重建並投入使用。

近實時搜索

當即推送式的replication(也支持慢推送)。能夠在秒內檢索到新加入索引。

均衡查詢壓力 查詢時自動負載均衡SolrCloud索引的多個Replication能夠分佈在多臺機器上 若是查詢壓力大,能夠經過擴展機器,增長Replication來減緩。

自動分發的索引和索引分片發送文檔到任何節點,它都會轉發到正確節點。

事務日誌事務日誌確保更新無丟失,即便文檔沒有索引到磁盤。

索引存儲在HDFS上索引的大小一般在G和幾十G,上百G的不多,這樣的功能或許很難實用。 可是,若是你有上億數據來建索引的話,也是能夠考慮一下的。 我以爲這個功能最大的好處或許就是和下面這個「經過MR批量建立索引」聯合實用。

經過MR批量建立索引 有了這個功能,你還擔憂建立索引慢嗎?

強大的RESTful API一般你能想到的管理功能,均可以經過此API方式調用。這樣寫一些維護和管理腳本就方便多了。

優秀的管理界面主要信息一目瞭然;能夠清晰的以圖形化方式看到SolrCloud的部署分佈;固然還有不可或缺的Debug功能。

 

 

索引(collection)的邏輯圖

Solr和索引對照圖

建立索引過程

分佈式查詢

Shard Splitting

相關文章
相關標籤/搜索