搜尋引擎--Solr 叢集部署
阿新 • • 發佈:2018-12-25
莫架構經驗:
(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>