1. 程式人生 > >搜尋引擎--Solr 叢集部署

搜尋引擎--Solr 叢集部署

莫架構經驗:
(1)4核8G 的機器,可以支援1000W條資料。(2)注意分片,不是越多越好,一個分片控制在100G的資料,大於100G,考慮兩個分片。(3)副本(儲存資料的元件),有幾臺機器就建立幾個副本。(4)提交一定要批量提交,單個提交不可採取。

重點內容

需要三個zookeeper節點
四個solr節點。

使用偽分散式實現solr叢集。需要三個zookeeper例項,4個tomcat例項,可以在一臺虛擬機器上模擬。建議虛擬機器1G以上記憶體。

這裡寫圖片描述

Solr例項的搭建

第一步:建立4個tomcat例項,修改其埠。8080-8083
第二步:解壓solr-4.10.3.tar.gz壓縮包。從壓縮包中複製solr.war
到tomcat。 第三步:啟動tomcat解壓war包。把solr-4.10.3目錄下example目錄下的關於日誌相關的jar包新增到solr工程中。 第四步:建立solrhome。修改web.xml指定solrhome的位置。

solr叢集的搭建

第一步 :

把solrhome中的配置檔案上傳到zookeeper叢集。使用zookeeper的客戶端上傳。
客戶端命令位置:/root/solr-4.10.3/example/scripts/cloud-scripts

./zkcli.sh -zkhost 192.168.25.154:2181,192.168.25.154:2182,192.168
.25.154:2183 -cmd upconfig -confdir /usr/local/solrcloud/solrhome1/collection1/conf -confname myconf // 採坑,執行上面報錯,解決方案:http://blog.csdn.net/only_wan/article/details/53678901 檢視配置檔案是否上傳成功: [[email protected] bin]# ./zkCli.sh Connecting to localhost:2181 [zk: localhost:2181(CONNECTED) 0] ls / [configs, zookeeper] [zk: localhost:2181
(CONNECTED) 1] ls /configs [myconf] [zk: localhost:2181(CONNECTED) 2] ls /configs/myconf [admin-extra.menu-top.html, currency.xml, protwords.txt, mapping-FoldToASCII.txt, _schema_analysis_synonyms_english.json, _rest_managed.json, solrconfig.xml, _schema_analysis_stopwords_english.json, stopwords.txt, lang, spellings.txt, mapping-ISOLatin1Accent.txt, admin-extra.html, xslt, synonyms.txt, scripts.conf, update-script.js, velocity, elevate.xml, admin-extra.menu-bottom.html, clustering, schema.xml] [zk: localhost:2181(CONNECTED) 3]

第二步:

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

這裡寫圖片描述

第三步:

修改每一臺solr的tomcat 的 bin目錄下catalina.sh檔案中加入DzkHost指定zookeeper伺服器地址:
JAVA_OPTS=”-DzkHost=192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183”
(可以使用vim的查詢功能查詢到JAVA_OPTS的定義的位置,然後新增)

第四步:

重新啟動tomcat。
這裡寫圖片描述

第五步:
建立一個兩片的collection,每片是一主一備。

這裡寫圖片描述

這裡寫圖片描述

第六步:

這裡寫圖片描述

這裡寫圖片描述

Solr叢集的使用

public class SolrCloudTest {

    @Test
    public void testAddDocument() throws Exception {
        //建立一個和solr叢集的連線
        //引數就是zookeeper的地址列表,使用逗號分隔
        String zkHost = "192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183";
        CloudSolrServer solrServer = new CloudSolrServer(zkHost);
        //設定預設的collection
        solrServer.setDefaultCollection("collection2");
        //建立一個文件物件
        SolrInputDocument document = new SolrInputDocument();
        //向文件中新增域
        document.addField("id", "test001");
        document.addField("item_title", "測試商品");
        //把文件新增到索引庫
        solrServer.add(document);
        //提交
        solrServer.commit();
    }

    @Test
    public void deleteDocument() throws SolrServerException, IOException {
        //建立一個和solr叢集的連線
        //引數就是zookeeper的地址列表,使用逗號分隔
        String zkHost = "192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183";
        CloudSolrServer solrServer = new CloudSolrServer(zkHost);
        //設定預設的collection
        solrServer.setDefaultCollection("collection2");


        solrServer.deleteByQuery("*:*");
        solrServer.commit();
    }
}

Solrj和spring整合

//修改spring的配置檔案,新增叢集版的配置:
<!-- 叢集版 -->
    <bean id="cloudSolrServer" class="org.apache.solr.client.solrj.impl.CloudSolrServer">
        <constructor-arg name="zkHost" value="192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183"></constructor-arg>
        <property name="defaultCollection" value="collection2"></property>
    </bean>